From 29b5f04a2710e3ab01a0a04271b649031eed6d80 Mon Sep 17 00:00:00 2001 From: "junwei.gu" Date: Wed, 21 Jun 2023 18:11:10 +0800 Subject: [PATCH] refactor(material/mesh/shader): refactor material set modelMatrix and fix vert/frag bug --- dist/index.js | 5313 +++++++++-------- example/index.html | 1 + example/mesh/instance.html | 1 + src/material/BillboardMaterial.ts | 14 +- src/material/BlinnPhongMaterial.ts | 6 +- src/material/ColorMaterial.ts | 6 +- src/material/Material.ts | 14 +- src/material/PbrMaterial.ts | 8 +- src/material/ShaderMaterial.ts | 3 +- src/material/SkyBoxMaterial.ts | 8 +- src/mesh/Billboard.ts | 18 + src/mesh/InstanceMesh.ts | 10 +- src/mesh/Mesh.ts | 17 +- src/render/DrawCommand.ts | 3 - src/shader/Shaders.ts | 26 +- src/shader/material/billboardFrag.ts | 10 - src/shader/material/billboardVert.ts | 26 - src/shader/material/billboard_fs.ts | 24 + src/shader/material/billboard_vs.ts | 37 + src/shader/material/pbr_fs.ts | 43 +- src/shader/material/phongFrag.ts | 41 +- src/shader/material/phongVert.ts | 31 +- src/shader/shaderChunk/ShaderChunk.ts | 4 +- src/shader/shaderChunk/attribute/FragInput.ts | 7 +- .../shaderChunk/attribute/VertexOutput.ts | 7 +- .../common/TextureAndSamplerDefine.ts | 41 + .../shaderChunk/normal/getNormalBackUp.ts | 4 +- src/utils/combine.ts | 76 +- src/utils/uniformUtils.ts | 11 +- 29 files changed, 2940 insertions(+), 2870 deletions(-) create mode 100644 src/mesh/Billboard.ts delete mode 100644 src/shader/material/billboardFrag.ts delete mode 100644 src/shader/material/billboardVert.ts create mode 100644 src/shader/material/billboard_fs.ts create mode 100644 src/shader/material/billboard_vs.ts create mode 100644 src/shader/shaderChunk/common/TextureAndSamplerDefine.ts diff --git a/dist/index.js b/dist/index.js index 169d5b5..f2d69bc 100644 --- a/dist/index.js +++ b/dist/index.js @@ -678,7 +678,6 @@ class DrawCommand { render(context, passEncoder, camera) { const { shaderData, - modelMatrix, renderState, vertexBuffer, indexBuffer, @@ -691,7 +690,6 @@ class DrawCommand { const currentPassEncoder = renderTarget?.beginRenderPassEncoder?.(context) ?? passEncoder; const defines = Object.assign({}, lightShaderData?.defines ?? {}, camera?.shaderData?.defines ?? {}); const { device } = context; - if (modelMatrix) shaderData?.replaceUniformBufferValue?.("modelMatrix", modelMatrix); shaderData?.bind?.(context, currentPassEncoder); camera?.shaderData?.bind(context, currentPassEncoder); lightShaderData?.bind?.(context, currentPassEncoder); @@ -5283,7 +5281,7 @@ class VertextBuffer { * const object2 = { * propTwo : 2 * } - * const final = Cesium.combine(object1, object2); + * const final = combine(object1, object2); * * // final === { * // propOne : 1, @@ -7362,6 +7360,31 @@ UniformBuffer.UniformType = { [UniformEnum.DirtectLightShadows]: UniformDirtectLightShadows }; +function billboard_fs(defines) { + return ` + struct SelfUniform { + modelMatrix: mat4x4, + color:vec3, + rotation:f32, + center:vec2, + opacity:f32, + } + @binding(${defines.billboardBinding}) @group(0) var selfUniform : SelfUniform; + #if${defines.USE_COLORTEXTURE} + @group(0) @binding(${defines.baseColorSamplerBinding}) var baseColorSampler: sampler; + @group(0) @binding(${defines.baseColorTextureBinding}) var baseColorTexture: texture_2d; + #endif + @fragment + fn main(input:VertexOutput) -> @location(0) vec4 { + #if${defines.USE_COLORTEXTURE} + return textureSample(baseColorTexture, baseColorSampler, input.uv); + #else + return vec4(selfUniform.color,selfUniform.opacity); + #endif + } + `; +} + const preprocessorSymbols = /#([^\s]*)(\s*)/gm; // Template literal tag that handles simple preprocessor symbols for WGSL // shaders. Supports #if/elif/else/endif statements. @@ -7441,2876 +7464,2871 @@ function wgslParseDefines(strings, ...values) { return state.frag; } -function FragInput(defines) { +function billboard_vs(defines) { return wgslParseDefines` - struct FragInput { - @builtin(front_facing) frontFacing: bool, - @location(0) worldPos:vec3, - @location(1) normal:vec3, - #if ${defines.HAS_UV} - @location(2) uv:vec2 - #endif - } + + #include + #include + #include + struct SelfUniform { + modelMatrix: mat4x4, + color:vec3, + rotation:f32, + center:vec2, + opacity:f32, + } + @binding(${defines.billboardBinding}) @group(0) var selfUniform : SelfUniform; + @binding(${defines.cameraBinding}) @group(1) var systemUniform : SystemUniform; + @vertex + fn main(input: VertexInput) -> VertexOutput { + var output:VertexOutput; + let mvPosition:vec4= ystemUniform.viewMatrix *selfUniform.modelMatrix*vec4(0.0,0.0,0.0, 1.0 ); + #if ${defines.HAS_UV} + output.uv=input.uv; + #endif + var scale:vec2; + scale.x = length( vec3( selfUniform.modelMatrix[ 0 ].x, selfUniform.modelMatrix[ 0 ].y, selfUniform.modelMatrix[ 0 ].z ) ); + scale.y = length( vec3( selfUniform.modelMatrix[ 1 ].x, selfUniform.modelMatrix[ 1 ].y, selfUniform.modelMatrix[ 1 ].z ) ); + + vec2 alignedPosition = ( input.position.xy - ( selfUniform.center - vec2( 0.5 ) ) ) * scale; + vec2 rotatedPosition; + rotatedPosition.x = cos( selfUniform.rotation ) * alignedPosition.x - sin( selfUniform.rotation ) * alignedPosition.y; + rotatedPosition.y = sin( selfUniform.rotation ) * alignedPosition.x + cos( selfUniform.rotation ) * alignedPosition.y; + mvPosition.xy += rotatedPosition; + output.position = systemUniform.projectionMatrix * mvPosition; + return output; + } `; } -function VertexInput(defines) { +// import Color from "../../math/Color"; +function colorFrag(defines) { + return ` + struct VertexOutput { + @builtin(position) position: vec4, + @location(0) color: vec4, + }; + @fragment + fn main(input:VertexOutput) -> @location(0) vec4 { + return input.color; + } + `; +} + +function colorVert(defines) { + return ` + struct VertexInput { + @location(${defines.positionLocation}) position: vec3, + @location(${defines.colorLocation}) color: vec4, + } + struct VertexOutput { + @builtin(position) position: vec4, + @location(0) color: vec4, + }; + struct SelfUniform { + modelMatrix: mat4x4, + } + struct SystemUniform { + projectionMatrix: mat4x4, + viewMatrix: mat4x4, + inverseViewMatrix: mat4x4, + cameraPosition: vec3, + }; + @binding(${defines.colorBinding}) @group(0) var selfUniform : SelfUniform; + @binding(${defines.cameraBinding}) @group(1) var systemUniform : SystemUniform; + @vertex + fn main(input: VertexInput) -> VertexOutput { + var output:VertexOutput; + output.color=input.color; + output.position = systemUniform.projectionMatrix * systemUniform.viewMatrix *selfUniform.modelMatrix*vec4(input.position,1.0); + return output; + } + `; +} + +function pbr_fs(defines) { return wgslParseDefines` - struct VertexInput { - @location(${defines.positionLocation}) position: vec3, - @location(${defines.normalLocation}) normal: vec3, - #if${defines.HAS_COLOR} - @location(${defines.colorLocation}) color: vec3, + // reference: https://github.com/KhronosGroup/glTF-WebGL-PBR/blob/master/shaders/pbr-frag.glsl + #include + #include + #include + #include + #include + #include + struct PhysicalMaterial { + diffuseColor:vec3, + roughness:f32, + specularColor:vec3, + #if ${defines.USE_CLEARCOAT} + clearcoat:f32, + clearcoatRoughness:f32, + clearcoatF0:vec3, + clearcoatF90:f32, + #endif + + #if ${defines.USE_IRIDESCENCE} + iridescence:f32, + iridescenceIOR:f32, + iridescenceThickness:f32, + iridescenceFresnel:vec3, + iridescenceF0:vec3, + #endif + + #if ${defines.USE_SHEEN} + sheenColor:vec3, + sheenRoughness:f32, + #endif + + #if ${defines.IOR} + ior:f32, + #endif + + #if ${defines.USE_TRANSMISSION} + transmission:f32, + transmissionAlpha:f32, + thickness:f32, + attenuationDistance:f32, + attenuationColor:vec3, + #endif + }; + const M_PI:f32 = 3.141592653589793; + const c_MinRoughness:f32 = 0.04; + #include + #if ${defines.USE_IBL} + #include + #endif + @binding(${defines.pbrBinding}) @group(0) var materialUniform : MaterialUniform; + @binding(${defines.cameraBinding}) @group(1) var systemUniform : SystemUniform; + @fragment + fn main(input:FragInput) -> @location(0) vec4 + { + var perceptualRoughness:f32 = materialUniform.roughness; + var metallic:f32 = materialUniform.metallic; + + #if ${defines.USE_METALNESSTEXTURE} + let mrSample:vec4 = textureSample(metalnessRoughnessTexture,metalnessRoughnessSampler, input.uv); + perceptualRoughness = mrSample.g * perceptualRoughness; + metallic = mrSample.b * metallic; #endif - #if ${defines.HAS_UV} - @location(${defines.uvLocation}) uv: vec2, + perceptualRoughness = clamp(perceptualRoughness, c_MinRoughness, 1.0); + metallic = clamp(metallic, 0.0, 1.0); + let alphaRoughness:f32 = perceptualRoughness * perceptualRoughness; + + + // The albedo may be defined from a base texture or a flat color + #if ${defines.USE_TEXTURE} + let baseColor:vec4 = textureSample(baseColorTexture,baseColorSampler, input.uv) ; + #else + let baseColor:vec4 = vec4(materialUniform.color,1.0); #endif - #if${defines.HAS_SKIN} - @location(${defines.joint0Location}) joint0:vec4, - @location(${defines.weight0Location}) weight0:vec4, + + #if ${defines.USE_NORMALTEXTURE} + let n:vec3 = getNormalByNormalTexture(input); + #else + let n:vec3 = getNormal(input); #endif - #if ${defines.USE_INSTANCE} - @builtin(instance_index) instanceIdx : u32 + var material:PhysicalMaterial; + material.diffuseColor=baseColor.rgb*( 1.0 - metallic ); + material.roughness=perceptualRoughness; + material.specularColor=mix( vec3( 0.04), baseColor.rgb, metallic ); + var geometry:Geometry; + geometry.normal=n; + geometry.viewDir=normalize(systemUniform.cameraPosition - input.worldPos); + geometry.position=input.worldPos; + geometry.dotNV = saturate(dot(geometry.normal, geometry.viewDir) ); + //light shading + var reflectedLight=parseLights(geometry,material); + var color=reflectedLight.directDiffuse+reflectedLight.directSpecular; + //IBL + #if ${defines.USE_IBL && defines.HAS_UV} + var reflectedLightDiffuse=indirectDiffuse_Physical(geometry,material); + var reflectedLightSpecular=indirectSpecular_Physical(geometry,material); + color+=reflectedLightDiffuse.indirectDiffuse; + color+=reflectedLightSpecular.indirectSpecular; #endif - } + #if ${defines.USE_AOTEXTURE} + let ao:f32 = textureSample(aoTexture,aoSampler, input.uv).r; + color = mix(color, color * ao, materialUniform.occlusionStrength); + #endif + + #if ${defines.USE_EMISSIVETEXTURE} + let emissive:vec3 = textureSample(emissiveTexture, emissiveSampler,input.uv).rgb ; + color += emissive; + #endif + return vec4(color, baseColor.a); + } `; } -function VertexOutput(defines) { +function pbr_vs(defines) { return wgslParseDefines` - struct VertexOutput { - @builtin(position) position:vec4, - @location(0) worldPos:vec3, - @location(1) normal:vec3, + #include + #include + #include + #include + #include + #include + @binding(${defines.pbrBinding}) @group(0) var materialUniform : MaterialUniform; + @binding(${defines.cameraBinding}) @group(1) var systemUniform : SystemUniform; + @vertex + fn main(input: VertexInput)-> VertexOutput + { + var output: VertexOutput; #if ${defines.HAS_UV} - @location(2) uv:vec2 + output.uv = input.uv; #endif - } - `; -} - -function SystemUniform(defines) { - return wgslParseDefines` - struct SystemUniform { - projectionMatrix: mat4x4, - viewMatrix: mat4x4, - inverseViewMatrix: mat4x4, - cameraPosition: vec3, - }; - `; + var modelMatrix:mat4x4; + var vNormalView:vec3; + vNormalView = normalize(materialUniform.normalMatrix * vec4(input.normal,0.0)).xyz; + modelMatrix=materialUniform.modelMatrix; + #include + #include + output.normal = vNormalView.xyz; + output.position = systemUniform.projectionMatrix * systemUniform.viewMatrix *modelMatrix* vec4(input.position, 1.0); + let modelPos=modelMatrix *vec4(input.position,1.0); + output.worldPos = modelPos.xyz/modelPos.w; + return output; + } + `; } -function environment(defines) { +function pbrFrag(defines) { return wgslParseDefines` - #if ${defines.ENVTEXTURE_TYPE_CUBE_UV} - const cubeUV_minMipLevel:f32= 4.0; - const cubeUV_minTileSize:f32= 16.0; - const CUBEUV_MAX_MIP:f32=6.0; - const CUBEUV_TEXEL_WIDTH:f32=1.0/256.0; - const CUBEUV_TEXEL_HEIGHT:f32=1.0/256.0; - fn getFace(direction:vec3 )->f32 { - let absDirection:vec3 = abs( direction ); - var face:f32 = - 1.0; - if ( absDirection.x > absDirection.z ) { - if ( absDirection.x > absDirection.y ){ - face =select(3.0,0.0,direction.x > 0.0); - }else{ - face =select(4.0,1.0,direction.y > 0.0); - } - - } - else { - if ( absDirection.z > absDirection.y ){ - face =select(5.0,2.0,direction.z > 0.0); - }else{ - face =select(4.0,1.0,direction.y > 0.0); - } - } - return face; - } - fn getUV( direction:vec3, face:f32 )->vec2 { - var uv:vec2; - if ( face == 0.0 ) { - uv = vec2( direction.z, direction.y ) / abs( direction.x ); - } - else if ( face == 1.0 ) { - uv = vec2( - direction.x, - direction.z ) / abs( direction.y ); - } - else if ( face == 2.0 ) { - uv = vec2( - direction.x, direction.y ) / abs( direction.z ); - } - else if ( face == 3.0 ) { - uv = vec2( - direction.z, direction.y ) / abs( direction.x ); - } - else if ( face == 4.0 ) { - uv = vec2( - direction.x, direction.z ) / abs( direction.y ); - } - else { - uv = vec2( direction.x, direction.y ) / abs( direction.z ); - } - return 0.5 * ( uv + 1.0 ); - } - fn bilinearCubeUV(envTexture:texture_cube,baseSampler:sampler,direction:vec3, mipInt:f32 )->vec3 { - var face:f32 = getFace( direction ); - let filterInt:f32 = max( cubeUV_minMipLevel - mipInt, 0.0 ); - let tempMipInt = max( mipInt, cubeUV_minMipLevel ); - let faceSize:f32 = exp2( tempMipInt ); - var uv:vec2 = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0; - if ( face > 2.0 ) { - uv.y += faceSize; - face -= 3.0; - } - uv.x += face * faceSize; - uv.x += filterInt * 3.0 * cubeUV_minTileSize; - uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize ); - uv.x *= CUBEUV_TEXEL_WIDTH; - uv.y *= CUBEUV_TEXEL_HEIGHT; - return textureSample(envTexture,baseSampler,direction).rgb; - } - const cubeUV_r0:f32= 1.0; - const cubeUV_v0:f32= 0.339; - const cubeUV_m0:f32= - 2.0; - const cubeUV_r1:f32= 0.8; - const cubeUV_v1:f32= 0.276; - const cubeUV_m1:f32= - 1.0; - const cubeUV_r4:f32= 0.4; - const cubeUV_v4:f32= 0.046; - const cubeUV_m4:f32= 2.0; - const cubeUV_r5:f32= 0.305; - const cubeUV_v5:f32= 0.016; - const cubeUV_m5:f32= 3.0; - const cubeUV_r6:f32= 0.21; - const cubeUV_v6:f32= 0.0038; - const cubeUV_m6:f32= 4.0; - fn roughnessToMip( roughness:f32)->f32 { - var mip:f32 = 0.0; - if ( roughness >= cubeUV_r1 ) { - mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0; - } - else if ( roughness >= cubeUV_r4 ) { - mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1; - } - else if ( roughness >= cubeUV_r5 ) { - mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4; - } - else if ( roughness >= cubeUV_r6 ) { - mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5; - } - else { - mip = - 2.0 * log2( 1.16 * roughness ); - } - return mip; - } - fn textureCubeUV(envTexture:texture_cube, baseSampler:sampler,sampleDir:vec3,roughness:f32 )->vec4 { - let mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP ); - let mipF = fract( mip ); - let mipInt = floor( mip ); - let color0:vec3 = bilinearCubeUV( envTexture,baseSampler,sampleDir, mipInt ); - if ( mipF == 0.0 ) { - return vec4(color0, 1.0 ); - } - else { - let color1:vec3 = bilinearCubeUV( envTexture,baseSampler, sampleDir, mipInt + 1.0 ); - return vec4(mix( color0, color1, mipF ), 1.0 ); - } - - } - #endif - #if ${defines.USE_ENVTEXTURE} - fn getIBLIrradiance( normal:vec3,baseSampler:sampler,viewMatrix:mat4x4)->vec3 { - #if ${defines.ENVTEXTURE_TYPE_CUBE_UV} - let worldNormal:vec3 = inverseTransformDirection( normal, viewMatrix ); - let envTextureColor:vec4 = textureCubeUV( envTexture,baseSampler, worldNormal, 1.0 ); - return PI * envTextureColor.rgb * materialUniform.envTextureIntensity; - #else - return vec3( 0.0 ); - #endif - } - fn getIBLRadiance( viewDir:vec3,baseSampler:sampler,viewMatrix:mat4x4,normal:vec3, roughness:f32 )->vec3 { - #if ${defines.ENVTEXTURE_TYPE_CUBE_UV} - var reflectVec:vec3 = reflect( - viewDir, normal ); - reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) ); - reflectVec = inverseTransformDirection( reflectVec, viewMatrix ); - let envTextureColor:vec4 = textureCubeUV( envTexture,baseSampler, reflectVec, roughness ); - return envTextureColor.rgb * materialUniform.envTextureIntensity; - #else - return vec3( 0.0 ); - #endif - } - #endif - `; -} - -function instanceVertHeader(defines) { - return wgslParseDefines` - #if ${defines.USE_INSTANCE} - struct InstancesUniform { - instanceMatrixs: array, ${defines.instanceCount}>, - }; - @group(0) @binding(${defines.instanceMatrixsBufferBinding}) var instancesUniform: InstancesUniform; - #endif - `; -} -function instanceVertMain(defines) { - return wgslParseDefines` - #if ${defines.USE_INSTANCE} - modelMatrix=instancesUniform.instanceMatrixs[input.instanceIdx]; - #endif - `; -} - -function light(defines) { - return wgslParseDefines` - struct ReflectedLight { - ambient: vec3, - directDiffuse:vec3, - directSpecular:vec3, - indirectDiffuse:vec3, - indirectSpecular:vec3, - testColor: vec3, - }; - struct IncidentLight { - color: vec3, - direction: vec3, - visible: bool, - }; - struct Geometry { - position: vec3, - normal: vec3, - viewDir: vec3, - dotNV:f32, - #if ${defines.USE_CLEARCOAT} - vec3 clearcoatNormal; - #endif - }; - - #if ${defines.spotLightsCount > 0} - struct SpotLight { - position: vec3, - distance: f32, - direction: vec3, - coneCos: f32, - color: vec3, - penumbraCos: f32, - decay: f32, - }; - fn getSpotLightInfo(spotLight:SpotLight,worldPos:vec3,shininess:f32,N:vec3,V:vec3)->ReflectedLight{ - var direction:vec3 = spotLight.position - worldPos; - var lightColor:ReflectedLight; - let lightDistance:f32 = length(direction); - direction = normalize(direction); - let angleCos:f32 = dot( direction, spotLight.direction ); - let decay:f32 = clamp(1.0 - pow(lightDistance/spotLight.distance, spotLight.decay), 0.0, 1.0); - let spotEffect:f32 = smoothstep( spotLight.penumbraCos, spotLight.coneCos, angleCos ); - let decayTotal:f32 = decay * spotEffect; - let d:f32 = max( dot( N, direction ), 0.0 ) * decayTotal; - lightColor.directDiffuse= spotLight.color * d; - let halfDir:vec3 = normalize( V + direction ); - let s:f32 = pow( clamp( dot( N, halfDir ), 0.0, 1.0 ), shininess ) * decayTotal; - lightColor.directSpecular= spotLight.color * s; - return lightColor; - } - fn getSpotLightIncidentLight(spotLight:SpotLight, geometry:Geometry)->IncidentLight { - var incidentLight:IncidentLight; - let lVector:vec3 = spotLight.position - geometry.position; - incidentLight.direction = normalize( lVector ); - - let lightDistance:f32 = length( lVector ); - let angleCos:f32 = dot( incidentLight.direction, spotLight.direction ); - - let spotEffect:f32 = smoothstep( spotLight.penumbraCos, spotLight.coneCos, angleCos ); - let decayEffect:f32 = clamp(1.0 - pow(lightDistance/spotLight.distance, 4.0), 0.0, 1.0); - - incidentLight.color=spotLight.color*spotEffect * decayEffect; - return incidentLight; - } - - #endif - - #if ${defines.pointLightsCount > 0} - struct PointLight { - position: vec3, - distance: f32, - color: vec3, - decay: f32, - }; - fn getPointLightInfo(pointLight:PointLight,worldPos:vec3,shininess:f32,N:vec3,V:vec3)->ReflectedLight{ - var lightColor:ReflectedLight; - var direction:vec3 = worldPos - pointLight.position; - let dist:f32 = length( direction ); - direction = normalize(direction); - let decay = clamp(1.0 - pow(dist / pointLight.distance, pointLight.decay), 0.0, 1.0); - - let d = max( dot( N, -direction ), 0.0 ) * decay; - lightColor.directDiffuse = pointLight.color * d; - - let halfDir:vec3 = normalize( V - direction ); - let s:f32 = pow( clamp( dot( N, halfDir ), 0.0, 1.0 ), shininess ) * decay; - lightColor.directSpecular = pointLight.color * s; - return lightColor; - } - fn getPointLightIncidentLight(pointLight:PointLight, geometry:Geometry)->IncidentLight { - var incidentLight:IncidentLight; - let lVector:vec3 = pointLight.position-geometry.position; - incidentLight.direction= normalize( lVector ); - let lightDistance:f32 = length( lVector ); - // let weight:f32=1.0 - pow(lightDistance/pointLight.distance, 4.0); - incidentLight.color=pointLight.color*clamp(1.0 - pow(lightDistance/pointLight.distance, 4.0), 0.0, 1.0); - return incidentLight; - } - #endif - #if ${defines.dirtectLightsCount > 0} - struct DirectionalLight { - direction: vec3, - color: vec3, - }; - fn getDirectLightInfo(directionalLight:DirectionalLight,shininess:f32,N:vec3,V:vec3)->ReflectedLight{ - var lightColor:ReflectedLight; - let d:f32 = max(dot(N, -directionalLight.direction), 0.0); - lightColor.directDiffuse += directionalLight.color * d; - - let halfDir:vec3 = normalize( V - directionalLight.direction ); - let s:f32 = pow( clamp( dot( N, halfDir ), 0.0, 1.0 ), shininess ); - lightColor.directSpecular += directionalLight.color * s; - return lightColor; - } - fn getDirectionalDirectLightIncidentLight(directionalLight:DirectionalLight,geometry:Geometry)->IncidentLight { - var incidentLight:IncidentLight; - incidentLight.color = directionalLight.color; - incidentLight.direction = normalize(directionalLight.direction); - return incidentLight; - } - #endif - - #if ${defines.openShadow} - struct LightInfo { - direction: vec3, - viewport: vec4, - }; - - fn linearizeDepth(depth: f32, near: f32, far: f32)->f32 { - return 2 * (near * far) / (far + near - depth * (far - near)); - } - - fn getCubeFace(v : vec3) -> i32{ - let vAbs = abs(v); - - if (vAbs.z >= vAbs.x && vAbs.z >= vAbs.y) { - if (v.z < 0.0) { - return 3; - } - return 2; - } - - if (vAbs.y >= vAbs.x) { - if (v.y < 0.0) { - return 5; - } - return 4; - } - - if (v.x < 0.0) { - return 1; - } - return 0; - } - - fn getShadowValue(shadowMapArray:texture_depth_2d_array, shadowSampler:sampler_comparison, lightPos:vec4, geometry:Geometry, lightInfo:LightInfo, index:u32, isPointLight: bool, near: f32, far: f32)->f32 { - var visibility = 0.0; - var projectPos: vec3 = lightPos.xyz / lightPos.w; - var shadowPos: vec3 = vec3(projectPos.xy * vec2(0.5, -0.5) + vec2(0.5), projectPos.z); - var d:f32 = dot(geometry.normal, -lightInfo.direction); - var bias = max(0.012 * (1.0 - d), 0.001) / lightPos.w; - let oneOverShadowDepthTextureSize = 1.0 / 1024.0; - // var depth = select(shadowPos.z, (linearizeDepth(shadowPos.z, near, far) - near) / (far- near), isPerspectiveCamera); - var depth = shadowPos.z; - - if (isPointLight) { - shadowPos.x = shadowPos.x * lightInfo.viewport.z; - shadowPos.y = shadowPos.y * lightInfo.viewport.w; - var viewportX = lightInfo.viewport.x * lightInfo.viewport.z; - var viewportY = lightInfo.viewport.y * lightInfo.viewport.w; - var uvOffset = 1.5 / 1024.0; - shadowPos.x = clamp(shadowPos.x + viewportX, viewportX + uvOffset, viewportX + lightInfo.viewport.z - uvOffset); - shadowPos.y = clamp(shadowPos.y + viewportY, viewportY + uvOffset, viewportY + lightInfo.viewport.w - uvOffset); - } - - for (var y = -1; y <= 1; y++) { - for (var x = -1; x <= 1; x++) { - let offset = vec2(vec2(x, y)) * oneOverShadowDepthTextureSize; - - visibility += textureSampleCompare( - shadowMapArray, shadowSampler, - shadowPos.xy + offset, index, depth - bias); - } - } - visibility /= 9.0; - var inFrustum = shadowPos.x >= 0.0 && shadowPos.x <= 1.0 && shadowPos.y >= 0.0 && shadowPos.y <= 1.0; - if (!inFrustum || depth > 1.0) { - visibility = 1.0; - } - return visibility; - } - #endif - - #if ${ - defines.ambientLightCount || defines.spotLightsCount || defines.pointLightsCount || defines.dirtectLightsCount - } - struct LightUniforms{ - #if ${defines.ambientLightCount} - ambient:vec4, - #endif - #if ${defines.spotLightsCount} - spotLights:array, - #endif - #if ${defines.pointLightsCount} - pointLights:array, - #endif - #if ${defines.dirtectLightsCount} - dirtectLights:array, - #endif - } - @group(2) @binding(${defines.lightBinding}) var lightUniforms: LightUniforms; - - #if ${defines.openShadow} - #if ${defines.spotLightShadowMapsCount} - struct SpotLightShadow { - shadowCameraVPMatrix: mat4x4, - shadowCameraNear: f32, - shadowCameraFar: f32 - } - #endif - #if ${defines.pointLightShadowMapsCount} - struct PointLightShadow { - shadowCameraVPMatrixArray: array, 6>, - shadowCameraViewportArray: array, 6>, - shadowCameraNear: f32, - shadowCameraFar: f32, - // shadowCameraVPMatrix: mat4x4, - // shadowCameraVPMatrixArray: array, 6>, - // shadowCameraViewportArray: array, 6>, - } - #endif - #if ${defines.directLightShadowMapsCount} - struct DirectLightShadow { - shadowCameraVPMatrix: mat4x4, - } - #endif - struct ShadowUniforms{ - #if ${defines.spotLightShadowMapsCount} - spotLightShadows:array, - #endif - #if ${defines.pointLightShadowMapsCount} - pointLightShadows:array, - #endif - #if ${defines.directLightShadowMapsCount} - directLightShadows:array, - #endif - } - @group(2) @binding(${defines.shadowBinding}) var shadowUniforms: ShadowUniforms; - - #if ${defines.spotLightShadowMapTextureArrayBinding} - @group(2) @binding(${ - defines.spotLightShadowMapTextureArrayBinding - }) var spotLightShadowMapTextureArray: texture_depth_2d_array; - #endif - #if ${defines.pointLightShadowMapTextureArrayBinding} - @group(2) @binding(${ - defines.pointLightShadowMapTextureArrayBinding - }) var pointLightShadowMapTextureArray: texture_depth_2d_array; - #endif - #if ${defines.directLightShadowMapTextureArrayBinding} - @group(2) @binding(${ - defines.directLightShadowMapTextureArrayBinding - }) var directLightShadowMapTextureArray: texture_depth_2d_array; - #endif - @group(2) @binding(${defines.shadowSamplerBinding}) var shadowSampler: sampler_comparison; - #endif - - #endif - #if ${defines.materialPhong} - fn parseLights(geometry:Geometry,shininess:f32)->ReflectedLight { - #elif ${defines.materialPbr} - fn parseLights(geometry:Geometry,material:PhysicalMaterial)->ReflectedLight{ - #endif - var reflectedLight:ReflectedLight; - var shadowValue:f32 = 1.0; - #if ${defines.ambientLightCount > 0} - //处理环境光 - var ambientColor:vec3 = lightUniforms.ambient.xyz * lightUniforms.ambient.w; - reflectedLight.ambient += ambientColor; - #endif - - #if ${defines.spotLightsCount > 0} - //处理聚光灯 - var spotLight:SpotLight; - for (var k = 0u; k < ${defines.spotLightsCount}; k = k + 1u) { - spotLight= lightUniforms.spotLights[k]; - #if ${defines.materialPhong && defines.openShadow && defines.spotLightShadowMapsCount} - if k < textureNumLayers(spotLightShadowMapTextureArray) { - var spotLightShadow:SpotLightShadow = shadowUniforms.spotLightShadows[k]; - var lightPos: vec4 = spotLightShadow.shadowCameraVPMatrix * vec4(geometry.position,1.0); - var lightInfo:LightInfo; - lightInfo.direction = normalize(geometry.position - spotLight.position); - - shadowValue = getShadowValue(spotLightShadowMapTextureArray, shadowSampler, lightPos, geometry, lightInfo, k, false, - spotLightShadow.shadowCameraNear, spotLightShadow.shadowCameraFar); - } - spotLight.color *= shadowValue; - #endif - #if ${defines.materialPhong} - let spReflectedLight=getSpotLightInfo(spotLight,geometry.position,shininess,geometry.normal,geometry.viewDir); - #elif ${defines.materialPbr} - let incidentLight=getSpotLightIncidentLight(spotLight,geometry); - let spReflectedLight=direct_Physical(incidentLight, geometry, material); - #endif - - reflectedLight.directDiffuse+=spReflectedLight.directDiffuse; - reflectedLight.directSpecular+=spReflectedLight.directSpecular; - } - #endif - #if ${defines.pointLightsCount > 0} - //处理点光源 - var pointLight:PointLight; - for (var j = 0u; j < ${defines.pointLightsCount};j = j + 1u) { - pointLight = lightUniforms.pointLights[j]; - #if ${defines.materialPhong && defines.openShadow && defines.pointLightShadowMapsCount} - if j < textureNumLayers(pointLightShadowMapTextureArray) { - var pointLightShadow:PointLightShadow = shadowUniforms.pointLightShadows[j]; - var lightInfo:LightInfo; - lightInfo.direction = normalize(geometry.position - pointLight.position); - var cubeFace = getCubeFace(lightInfo.direction); - var lightPos: vec4 = pointLightShadow.shadowCameraVPMatrixArray[cubeFace] * vec4(geometry.position,1.0); - lightInfo.viewport = pointLightShadow.shadowCameraViewportArray[cubeFace]; - - // var lightPos: vec4 = pointLightShadow.shadowCameraVPMatrix * vec4(geometry.position,1.0); - - shadowValue = getShadowValue(pointLightShadowMapTextureArray, shadowSampler, lightPos, geometry, lightInfo, j, true, - pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar); - - // reflectedLight.testColor = vec3(pointLightShadow.shadowCameraFar / 1000, - // pointLightShadow.shadowCameraVPMatrixArray[5][3][2] / 255, pointLightShadow.shadowCameraVPMatrixArray[5][3][3] / 255); - // reflectedLight.testColor = vec3(pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraNear); - } - pointLight.color *= shadowValue; - #endif - #if ${defines.materialPhong} - let poiReflectedLight=getPointLightInfo(pointLight,geometry.position,shininess,geometry.normal,geometry.viewDir); - #elif ${defines.materialPbr} - let incidentLight=getPointLightIncidentLight(pointLight,geometry); - let poiReflectedLight=direct_Physical(incidentLight, geometry, material); - #endif - - reflectedLight.directDiffuse+=poiReflectedLight.directDiffuse; - reflectedLight.directSpecular+=poiReflectedLight.directSpecular; - } - #endif - #if ${defines.dirtectLightsCount > 0} - //处理方向光 - var directionalLight:DirectionalLight; - for (var i= 0u; i <${defines.dirtectLightsCount}; i = i + 1u) { - directionalLight = lightUniforms.dirtectLights[i]; - #if ${defines.materialPhong && defines.openShadow && defines.directLightShadowMapsCount} - if i < textureNumLayers(directLightShadowMapTextureArray) { - var directLightShadow:DirectLightShadow = shadowUniforms.directLightShadows[i]; - var lightPos: vec4 = directLightShadow.shadowCameraVPMatrix * vec4(geometry.position,1.0); - var lightInfo:LightInfo; - lightInfo.direction = directionalLight.direction; - - shadowValue = getShadowValue(directLightShadowMapTextureArray, shadowSampler, lightPos, geometry, lightInfo, i, false, 0, 0); - } - directionalLight.color *= shadowValue; - #endif - - #if ${defines.materialPhong} - let dirReflectedLight=getDirectLightInfo(directionalLight,shininess,geometry.normal,geometry.viewDir); - #elif ${defines.materialPbr} - let incidentLight=getDirectionalDirectLightIncidentLight(directionalLight,geometry); - let dirReflectedLight=direct_Physical(incidentLight, geometry, material); - #endif - - reflectedLight.directDiffuse+=dirReflectedLight.directDiffuse; - reflectedLight.directSpecular+=dirReflectedLight.directSpecular; - } - #endif - return reflectedLight; - }`; -} - -function lightCommon(defines) { - return wgslParseDefines` - struct ReflectedLight { - directDiffuse:vec3, - directSpecular:vec3, - indirectDiffuse:vec3, - indirectSpecular:vec3, - }; - struct Geometry { - position: vec3, - normal: vec3, - viewDir: vec3, - #if ${defines.USE_CLEARCOAT} - vec3 clearcoatNormal; - #endif - }; - fn getAmbientLightIrradiance(ambientLightColor: vec3) -> vec3 { - let irradiance = ambientLightColor; - return irradiance; - } - fn getDistanceAttenuation(lightDistance: f32, cutoffDistance: f32, decayExponent: f32) -> f32 { - if (cutoffDistance > 0.0 && decayExponent > 0.0) { - let x:f32 = saturate(- lightDistance / cutoffDistance + 1.0); - return pow(x, decayExponent); - } - return 1.0; - } - fn getSpotAttenuation(coneCosine: f32, penumbraCosine: f32, angleCosine: f32) -> f32 { - return smoothstep(coneCosine, penumbraCosine, angleCosine); - } - fn shGetIrradianceAt( normal:vec3, shCoefficients:array,9>)->vec3 { - let x:f32 = normal.x; - let y:f32 = normal.y; - let z:f32 = normal.z; - var result:vec3 = shCoefficients[ 0 ] * 0.886227; - result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y; - result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z; - result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x; - result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y; - result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z; - result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 ); - result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z; - result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y ); - return result; - } - fn inverseTransformDirection( dir:vec3, matrix:mat4x4 )->vec3 { - return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz ); - } - `; -} - -function getNormal(defines) { - return wgslParseDefines` - fn getNormal(input:FragInput)->vec3{ - var normal:vec3; - #if ${defines.HAS_NORMAL} - normal= input.normal; - #else - let pos_dx = dpdx(input.worldPos); - let pos_dy = dpdy(input.worldPos); - normal = normalize( cross(pos_dy, pos_dx) ); - #endif - return normal*(f32(input.frontFacing) * 2.0 - 1.0); - } - `; -} -function getNormalByNormalTexture(defines) { - return wgslParseDefines` - fn getNormalByNormalTexture(input:VertInput)->vec3{ - var n:vec3 = textureSample(normalTexture,normalSampler, input.uv).rgb; - let tbn:mat3x3 =getTBN(input); - n = normalize(tbn * (2.0 * n - vec3(1.0))); - n=n*(f32(input.frontFacing) * 2.0 - 1.0); - return n; - } - `; -} -function getTBN(defines) { - return wgslParseDefines` - fn getTBN(input:VertInput)->mat3x3{ - #if ${defines.HAS_TANGENT} - let tbn:mat3x3 = input.tbn; - #else - let normal:vec3 =normalize(input.normal); - let uv:vec2 = select(-input.uv,input.uv,input.frontFacing); - // ref: http://www.thetenthplanet.de/archives/1180 - // get edge vectors of the pixel triangle - let dp1:vec3 = vec3(dpdx(input.worldPos.x), dpdx(input.worldPos.y), dpdx(input.worldPos.z)); - let dp2:vec3 = vec3(dpdy(input.worldPos.x), dpdy(input.worldPos.y), dpdy(input.worldPos.z)); - let duv1:vec2 = dpdx(uv); - let duv2:vec2 = dpdy(uv); - - // solve the linear system - let dp2perp:vec3 = cross(dp2, normal); - let dp1perp:vec3 = cross(normal, dp1); - let tangent:vec3 = dp2perp * duv1.x + dp1perp * duv2.x; - let binormal:vec3 = dp2perp * duv1.y + dp1perp * duv2.y; - // construct a scale-invariant frame - let result:f32=max(dot(tangent, tangent), dot(binormal, binormal)); - let invmax:f32 = 1.0/sqrt(result); - let tbn:mat3x3 = mat3x3(tangent * invmax, binormal * invmax, normal); - #endif - return tbn; - } - `; -} - -function brdf(defines) { - return wgslParseDefines` - #if ${defines.USE_SHEEN} - fn D_Charlie( roughness:f32,dotNH:f32 )->f32 { - let alpha:f32 = pow2( roughness ); - let invAlpha:f32 = 1.0 / alpha; - let cos2h:f32 = dotNH * dotNH; - let sin2h:f32 = max( 1.0 - cos2h, 0.0078125 ); - return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI ); - } - fn V_Neubelt( dotNV:f32, dotNL:f32 )->f32 { - return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) ); - } - fn BRDF_Sheen(lightDir:vec3, viewDir:vec3, normal:vec3,sheenColor:vec3,sheenRoughness:f32 )->vec3 { - let halfDir:vec3 = normalize( lightDir + viewDir ); - let dotNL:f32 = saturate( dot( normal, lightDir ) ); - let dotNV:f32 = saturate( dot( normal, viewDir ) ); - let dotNH:f32 = saturate( dot( normal, halfDir ) ); - let D:f32 = D_Charlie( sheenRoughness, dotNH ); - let V:f32 = V_Neubelt( dotNV, dotNL ); - return sheenColor * ( D * V ); - } - #endif - fn BRDF_Lambert(diffuseColor:vec3)->vec3 { + #include + #include + #include + #include + #include + #include + #include + #include + struct SystemUniform { + projectionMatrix: mat4x4, + viewMatrix: mat4x4, + inverseViewMatrix: mat4x4, + cameraPosition: vec3, + }; + // uniform vec3 lightProbe[9], +//////////////////////////////////// +struct VertexOutput { + @builtin(position) position: vec4, + @builtin(front_facing) is_front: bool, + @location(0) vUv: vec2, + @location(1) vViewPosition: vec3, // Vector from vertex to camera. + @location(2) vWorldPosition: vec3, + @location(3) vNormal: vec3, + // 可选 + #if ${defines.USE_LIGHTTEXTURE || defines.USE_AOTEXTURE} + @location(${defines.vUv2OutLocation}) vUv2: vec2, + #endif - return RECIPROCAL_PI * diffuseColor; + #if ${defines.USE_COLOR_ALPHA} + @location(${defines.vColorOutLocation}) vColor: vec4, + #elif ${defines.USE_COLOR || defines.USE_INSTANCING_COLOR} + @location(${defines.vColorOutLocation}) vColor: vec3, + #endif - } // validated + #if ${defines.USE_TANGENT} + @location(${defines.vTangentOutLocation}) vTangent: vec3, + @location(${defines.vBitangentOutLocation}) vBitangent: vec3, + #endif +}; + struct PhysicalMaterial { + diffuseColor:vec3, + roughness:f32, + specularColor:vec3, + specularF90:f32, + #if ${defines.USE_CLEARCOAT} + clearcoat:f32, + clearcoatRoughness:f32, + clearcoatF0:vec3, + clearcoatF90:f32, + #endif - fn F_Schlick( f0:vec3, dotVH:f32 )->vec3 { + #if ${defines.USE_IRIDESCENCE} + iridescence:f32, + iridescenceIOR:f32, + iridescenceThickness:f32, + iridescenceFresnel:vec3, + iridescenceF0:vec3, + #endif - // Original approximation by Christophe Schlick '94 - // float fresnel = pow( 1.0 - dotVH, 5.0 ); + #if ${defines.USE_SHEEN} + sheenColor:vec3, + sheenRoughness:f32, + #endif - // Optimized variant (presented by Epic at SIGGRAPH '13) - // https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf - let fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); - return ( 1.0 - f0 ) * fresnel + f0; + #if ${defines.IOR} + ior:f32, + #endif - } // validated + #if ${defines.USE_TRANSMISSION} + transmission:f32, + transmissionAlpha:f32, + thickness:f32, + attenuationDistance:f32, + attenuationColor:vec3, + #endif + }; +@binding(0) @group(0) var materialUniform : MaterialUniform; +@binding(0) @group(1) var systemUniform : SystemUniform; +@fragment +fn main(input:VertexOutput)-> @location(0) vec4 { + var diffuseColor:vec4 = vec4(materialUniform.diffuse, materialUniform.opacity ); + // ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); + var reflectedLight:ReflectedLight; + var totalEmissiveRadiance:vec3 = materialUniform.emissive; + #if ${defines.USE_TEXTURE} + var sampledDiffuseColor:vec4 =textureSample(baseTexture, baseSampler, input.vUv); + #if ${defines.DECODE_VIDEO_TEXTURE} + sampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w ); + #endif - fn Schlick_to_F0(f:vec3, f90:f32, dotVH:f32 )->vec3 { - let x:f32 = clamp( 1.0 - dotVH, 0.0, 1.0 ); - let x2:f32 = x * x; - let x5:f32 = clamp( x * x2 * x2, 0.0, 0.9999 ); + diffuseColor *= sampledDiffuseColor; + #endif - return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 ); - } - fn V_GGX_SmithCorrelated( alpha:f32, dotNL:f32,dotNV:f32 )->f32 { + var roughnessFactor:f32 = materialUniform.roughness; + + #if ${defines.USE_ROUGHNESSTEXTURE} + let texelRoughness:vec4=textureSample(roughnessTexture, baseSampler, input.vUv); + roughnessFactor *= texelRoughness.g; + #endif - let a2 :f32= pow2( alpha ); + var metalnessFactor:f32 = materialUniform.metalness; + + #if ${defines.USE_METALNESSTEXTURE} + let texelMetalness:vec4 =textureSample(metalnessTexture, baseSampler, input.vUv); + metalnessFactor *= texelMetalness.b; + #endif - let gv:f32 = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) ); - let gl:f32 = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) ); + let faceDirection:f32 =select(-1.0,1.0,input.is_front); + #if ${defines.FLAT_SHADED} + let fdx:vec3 = dpdx( input.vViewPosition ); + let fdy:vec3 = dpdy( input.vViewPosition ); + let normal:vec3 = normalize( cross( fdy, fdx ) ); + #else + let normal:vec3 = normalize( input.vNormal ); + #if ${defines.DOUBLE_SIDED} + normal = normal * faceDirection; + #endif + #if ${defines.USE_TANGENT} + let tangent:vec3 = normalize( input.vTangent ); + let bitangent:vec3 = normalize( input.vBitangent ); + #if ${defines.DOUBLE_SIDED} + tangent = tangent * faceDirection; + bitangent = bitangent * faceDirection; + #endif + #if ${defines.TANGENTSPACE_NORMALTEXTURE || defines.USE_CLEARCOAT_NORMALTEXTURE} + let vTBN:mat3x3 = mat3x3( tangent, bitangent, normal ); + #endif + #endif + #endif + + let geometryNormal:vec3 = normal; - return 0.5 / max((gv + gl), 0.000000001 ); + #if ${defines.OBJECTSPACE_NORMALTEXTURE} + normal =textureSample(normalTexture, baseSampler, input.vUv).xyz * 2.0 - 1.0; + #if ${defines.FLIP_SIDED} + normal = - normal; + #endif + #if ${defines.DOUBLE_SIDED} + normal = normal * faceDirection; + #endif - } - fn D_GGX( alpha:f32, dotNH:f32 )->f32 { + normal = normalize(materialUniform.normalMatrix * normal ); - let a2:f32 = pow2( alpha ); + #elif ${defines.TANGENTSPACE_NORMALTEXTURE} + let tempMapN:vec3 =textureSample(normalTexture, baseSampler, input.vUv).xyz * 2.0 - 1.0; + let mapN:vec3 =tempMapN.xy *= materialUniform.normalScale; + #if ${defines.USE_TANGENT} + normal = normalize( vTBN * mapN ); + #else + normal = perturbNormal2Arb( - input.vViewPosition, normal, mapN, faceDirection ); + #endif - let denom:f32 = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0; // avoid alpha = 0 with dotNH = 1 + #elif ${defines.USE_BUMPTEXTURE} - return RECIPROCAL_PI * a2 / pow2( denom ); + normal = perturbNormalArb( - input.vViewPosition, normal, dHdxy_fwd(), faceDirection ); + #endif - } - fn BRDF_GGX( lightDir:vec3, viewDir:vec3, normal:vec3, f0:vec3, roughness:f32 )->vec3 { + #if ${defines.USE_CLEARCOAT} + var clearcoatNormal:vec3 = geometryNormal; + #endif + #if ${defines.USE_CLEARCOAT_NORMALTEXTURE} + var clearcoatMapN:vec3 =textureSample(clearcoatNormalTexture, baseSampler, input.vUv).xyz * 2.0 - 1.0; + clearcoatMapN.xy *= materialUniform.clearcoatNormalScale; + #if ${defines.USE_TANGENT} + clearcoatNormal = normalize( vTBN * clearcoatMapN ); + #else + clearcoatNormal = perturbNormal2Arb( - input.vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection ); + #endif + #endif + #if ${defines.USE_EMISSIVETEXTURE} + let emissiveColor:vec4 =textureSample(emissiveTexture, baseSampler, input.vUv); + totalEmissiveRadiance *= emissiveColor.rgb; + #endif - let alpha:f32 = pow2( roughness ); // UE4's roughness + var material:PhysicalMaterial; + material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor ); + let dxy:vec3 = max( abs( dpdx( geometryNormal ) ), abs( dpdy( geometryNormal ) ) ); + let geometryRoughness:f32 = max( max( dxy.x, dxy.y ), dxy.z ); + material.roughness = max( roughnessFactor, 0.0525 ); + material.roughness += geometryRoughness; + material.roughness = min( material.roughness, 1.0 ); - let halfDir = normalize( lightDir + viewDir ); + #if ${defines.IOR} + material.ior = materialUniform.ior; + #if ${defines.SPECULAR} + let specularIntensityFactor:f32 = materialUniform.specularIntensity; + let specularColorFactor:vec3 = materialUniform.specularColor; + #if ${defines.USE_SPECULARINTENSITYTEXTURE} + specularIntensityFactor *=textureSample(specularIntensityTexture, baseSampler, input.vUv).a; + #endif - let dotNL:f32 = saturate( dot( normal, lightDir ) ); - let dotNV:f32 = saturate( dot( normal, viewDir ) ); - let dotNH:f32 = saturate( dot( normal, halfDir ) ); - let dotVH:f32 = saturate( dot( lightDir, halfDir ) ); + #if ${defines.USE_SPECULARCOLORTEXTURE} + specularColorFactor *=textureSample(specularColorTexture, baseSampler, input.vUv).rgb; + #endif - let F = F_Schlick( f0, dotVH ); + material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor ); + #else + let specularIntensityFactor:f32 = 1.0; + let specularColorFactor:vec3 = vec3( 1.0 ); + material.specularF90 = 1.0; + #endif + material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor ); + #else + material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor ); + material.specularF90 = 1.0; + #endif + #if ${defines.USE_CLEARCOAT} + material.clearcoat = materialUniform.clearcoat; + material.clearcoatRoughness = materialUniform.clearcoatRoughness; + material.clearcoatF0 = vec3( 0.04 ); + material.clearcoatF90 = 1.0; + #if ${defines.USE_CLEARCOATTEXTURE} + material.clearcoat *=textureSample(clearcoatTexture, baseSampler, input.vUv).x; + #endif + #if ${defines.USE_CLEARCOAT_ROUGHNESSTEXTURE} + material.clearcoatRoughness *=textureSample(clearcoatRoughnessTexture, baseSampler, input.vUv).y; + #endif + material.clearcoat = saturate( material.clearcoat ); + material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 ); + material.clearcoatRoughness += geometryRoughness; + material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 ); + #endif + #if ${defines.USE_IRIDESCENCE} + material.iridescence = materialUniform.iridescence; + material.iridescenceIOR = materialUniform.iridescenceIOR; + #if ${defines.USE_IRIDESCENCETEXTURE} + material.iridescence *=textureSample(iridescenceTexture, baseSampler, input.vUv).r; + #endif + #if ${defines.USE_IRIDESCENCE_THICKNESSTEXTURE} + material.iridescenceThickness = (materialUniform.iridescenceThicknessMaximum - materialUniform.iridescenceThicknessMinimum) * textureSample(iridescenceThicknessTexture, baseSampler, input.vUv).g + materialUniform.iridescenceThicknessMinimum; + #else + material.iridescenceThickness = materialUniform.iridescenceThicknessMaximum; + #endif + #endif + #if ${defines.USE_SHEEN} + material.sheenColor = materialUniform.sheenColor; + #if ${defines.USE_SHEENCOLORTEXTURE} + material.sheenColor *=textureSample(sheenColorTexture, baseSampler, input.vUv).rgb; + #endif + material.sheenRoughness = clamp( materialUniform.sheenRoughness, 0.07, 1.0 ); + #if ${defines.USE_SHEENROUGHNESSTEXTURE} + material.sheenRoughness *=textureSample(sheenRoughnessTexture, baseSampler, input.vUv).a; + #endif + #endif + + var geometry:GeometricContext; + geometry.position = - input.vViewPosition; + geometry.normal = normal; + // geometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( input.vViewPosition ); + geometry.viewDir = normalize( input.vViewPosition); - let V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); + #if ${defines.USE_CLEARCOAT} + geometry.clearcoatNormal = clearcoatNormal; + #endif - let D = D_GGX( alpha, dotNH ); + #if ${defines.USE_IRIDESCENCE} + let dotNVi:f32 = saturate( dot( normal, geometry.viewDir ) ); + if ( material.iridescenceThickness == 0.0 ) { + material.iridescence = 0.0; + } + else { + material.iridescence = saturate( material.iridescence ); + } + if ( material.iridescence > 0.0 ) { + material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor ); + material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi ); + } + #endif - return F * ( V * D ); + var iblIrradiance:vec3 = vec3( 0.0 ); + var irradiance:vec3 = getAmbientLightIrradiance(commonLightsParms.ambient); + //irradiance += getLightProbeIrradiance( lightProbe, geometry.normal,systemUniform.viewMatrix ); - } - fn direct_Physical( directLight:IncidentLight, geometry:Geometry,material:PhysicalMaterial)->ReflectedLight { - var reflectedLight:ReflectedLight; - let dotNL:f32 = saturate(dot( geometry.normal,geometry.viewDir)); - let irradiance:vec3 = dotNL * directLight.color*3.1415926; - reflectedLight.directSpecular = irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.roughness ); - reflectedLight.directDiffuse = irradiance * BRDF_Lambert( material.diffuseColor ); - return reflectedLight; - } - `; -} + var radiance:vec3 = vec3( 0.0 ); + var clearcoatRadiance:vec3 = vec3( 0.0 ); -function ibl(defines) { - return wgslParseDefines` - fn getLightProbeRadiance( viewDir:vec3,normal:vec3, roughness:f32 )->vec3{ - var reflectVec:vec3 = reflect( -viewDir, normal ); - reflectVec.x = -reflectVec.x; // TextureCube is left-hand,so x need inverse - let mipCount:f32 = 10.0; // resolution of 256x256 - let lod:f32 = roughness * mipCount; - let specularLight:vec3 = textureSampleLevel(specularEnvTexture,specularEnvSampler, reflectVec, lod).rgb; - return specularLight; - } - fn getLightProbeIrradiance( lightProbe:array,9>, normal:vec3)->vec3 { - var worldNormal:vec3 = normal; - worldNormal.x = -normal.x; - var irradiance:vec3 = lightProbe[0]; - irradiance+=lightProbe[1] * (normal.y); - irradiance+=lightProbe[2] * (normal.z) ; - irradiance+=lightProbe[3] * (normal.x) ; + #if ${defines.USE_LIGHTTEXTURE} + let lightMapTexel:vec4 =textureSample(lightTexture, baseSampler, input.vUv2); + let lightMapIrradiance:vec3 = lightMapTexel.rgb * materialUniform.lightTextureIntensity; + irradiance += lightMapIrradiance; + #endif + //&& defines.STANDARD&&defines.ENVTEXTURE_TYPE_CUBE_UV + #if ${defines.USE_ENVTEXTURE} + iblIrradiance += getIBLIrradiance( geometry.normal,baseSampler,systemUniform.viewMatrix ); + #endif + #if ${defines.USE_ENVTEXTURE} + radiance += getIBLRadiance( geometry.viewDir,baseSampler,systemUniform.viewMatrix, geometry.normal, materialUniform.roughness ); + #if ${defines.USE_CLEARCOAT} + clearcoatRadiance += getIBLRadiance( geometry.viewDir,baseSampler,systemUniform.viewMatrix, geometry.clearcoatNormal, material.clearcoatRoughness ); + #endif + #endif + //直接光照 + let dirReflectedLight:ReflectedLight= parseLights(geometry,material); + reflectedLight.directDiffuse +=dirReflectedLight.directDiffuse; + reflectedLight.directSpecular +=dirReflectedLight.directSpecular; + //间接漫反射 + let indirectDiffuseLight:ReflectedLight= RE_IndirectDiffuse_Physical( irradiance, geometry, material); + reflectedLight.directDiffuse +=indirectDiffuseLight.indirectDiffuse; + reflectedLight.directSpecular +=indirectDiffuseLight.indirectSpecular; + //间接高光 + let indirectSpecularLight:ReflectedLight=RE_IndirectSpecular_Physical( radiance, iblIrradiance, clearcoatRadiance, geometry, material); + reflectedLight.directDiffuse +=indirectSpecularLight.indirectDiffuse; + reflectedLight.directSpecular +=indirectSpecularLight.indirectSpecular; + //环境光遮蔽 + #if ${defines.USE_AOTEXTURE} + let ambientOcclusion:f32 = (textureSample(aoTexture, baseSampler, input.vUv2).r - 1.0 ) * materialUniform.aoTextureIntensity + 1.0; - irradiance+=lightProbe[4] * (normal.y * normal.x) ; - irradiance+=lightProbe[5] * (normal.y * normal.z) ; - irradiance+=lightProbe[6] * (3.0 * normal.z * normal.z - 1.0); - irradiance+=lightProbe[7] * (normal.z * normal.x) ; - irradiance+=lightProbe[8] * (normal.x * normal.x - normal.y * normal.y); + reflectedLight.indirectDiffuse *= ambientOcclusion; + //&&defines.STANDARD + #if ${defines.USE_ENVTEXTURE} + let dotNV:f32 = saturate( dot( geometry.normal, geometry.viewDir ) ); + reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness ); + #endif + #endif - return max(irradiance, vec3(0.0,0.0,0.0)); - } - fn DFGApprox( specularColor:vec3, roughness:f32,dotNV:f32 )->vec3 { - const c0:vec4 = vec4( - 1, - 0.0275, - 0.572, 0.022 ); - let c1:vec4 = vec4( 1, 0.0425, 1.04, - 0.04 ); - let r:vec4 = roughness * c0 + c1; - let a004:f32 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y; - let fab:vec2 = vec2( - 1.04, 1.04 ) * a004 + r.zw; - return specularColor * fab.x + fab.y; - } - //间接光照 - fn indirectDiffuse_Physical(geometry:Geometry, material:PhysicalMaterial )->ReflectedLight { - var reflectedLight:ReflectedLight; - var irradiance:vec3 = lightUniforms.ambient.xyz*lightUniforms.ambient.w; - irradiance *= PI; - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); - return reflectedLight; - } - //间接高光 - fn indirectSpecular_Physical(geometry:Geometry, material:PhysicalMaterial)->ReflectedLight { - var reflectedLight:ReflectedLight; - // IBL specular - let radiance:vec3 = getLightProbeRadiance(geometry.viewDir, geometry.normal, material.roughness); - let radianceAttenuation:f32 = 1.0; - reflectedLight.indirectSpecular += radianceAttenuation * radiance * DFGApprox(material.specularColor, material.roughness, geometry.dotNV ); - return reflectedLight; - } - `; -} + var totalDiffuse:vec3 = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse; + var totalSpecular:vec3 = reflectedLight.directSpecular + reflectedLight.indirectSpecular; + //透射 + #if ${defines.USE_TRANSMISSION} + material.transmission = materialUniform.transmission; + material.transmissionAlpha = 1.0; + material.thickness = materialUniform.thickness; + material.attenuationDistance = materialUniform.attenuationDistance; + material.attenuationColor = materialUniform.attenuationColor; + #if ${defines.USE_TRANSMISSIONTEXTURE} + material.transmission *=textureSample(transmissionTexture, baseSampler, input.vUv).r; + #endif + #if ${defines.USE_THICKNESSTEXTURE} + material.thickness *=textureSample(thicknessTexture, baseSampler, input.vUv).g; + #endif + let pos:vec3 = vWorldPosition; + let v:vec3 = normalize( cameraPosition - pos ); + let n:vec3 = inverseTransformDirection( normal, systemUniform.viewMatrix ); + let transmission:vec4 = getIBLVolumeRefraction( + n, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90, pos, modelMatrix, systemUniform.viewMatrix, systemUniform.projectionMatrix, material.ior, material.thickness, material.attenuationColor, material.attenuationDistance ); + material.transmissionAlpha = mix( material.transmissionAlpha, transmission.a, material.transmission ); + totalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission ); + #endif -function pbrFunction(defines) { - return wgslParseDefines` + let outgoingLight:vec3 = totalDiffuse + totalSpecular + totalEmissiveRadiance; - #if ${defines.DITHERING} - fn dithering(color:vec3 )->vec3 { - let grid_position:f32 = rand( gl_FragCoord.xy ); - let dither_shift_RGB:vec3 = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 ); - dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position ); - return color + dither_shift_RGB; - } - #endif + #if ${defines.USE_SHEEN} + let sheenEnergyComp:f32 = 1.0 - 0.157 * max3( material.sheenColor ); + outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular; + #endif - #if ${defines.USE_IRIDESCENCE} - fn BRDF_GGX_Iridescence( lightDir:vec3, viewDir:vec3,normal:vec3, f0:vec3, f90:f32,iridescence:f32, iridescenceFresnel:vec3,roughness:f32 )->vec3 { - let alpha:f32 = pow2( roughness ); - let halfDir:vec3 = normalize( lightDir + viewDir ); - let dotNL:f32 = saturate( dot( normal, lightDir ) ); - let dotNV:f32 = saturate( dot( normal, viewDir ) ); - let dotNH:f32 = saturate( dot( normal, halfDir ) ); - let dotVH:f32 = saturate( dot( viewDir, halfDir ) ); - let F:vec3 = mix( F_Schlick( f0, f90, dotVH ), iridescenceFresnel, iridescence ); - let V:f32 = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); - let D:f32 = D_GGX( alpha, dotNH ); - return F * ( V * D ); - } - #endif + #if ${defines.USE_CLEARCOAT} + let dotNVcc:f32 = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) ); + let Fcc:vec3 = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc ); + outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat; + #endif - #if ${defines.USE_SHEEN} - fn D_Charlie( roughness:f32,dotNH:f32 )->f32 { - let alpha:f32 = pow2( roughness ); - let invAlpha:f32 = 1.0 / alpha; - let cos2h:f32 = dotNH * dotNH; - let sin2h:f32 = max( 1.0 - cos2h, 0.0078125 ); - return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI ); - } - fn V_Neubelt( dotNV:f32, dotNL:f32 )->f32 { - return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) ); - } - fn BRDF_Sheen(lightDir:vec3, viewDir:vec3, normal:vec3,sheenColor:vec3,sheenRoughness:f32 )->vec3 { - let halfDir:vec3 = normalize( lightDir + viewDir ); - let dotNL:f32 = saturate( dot( normal, lightDir ) ); - let dotNV:f32 = saturate( dot( normal, viewDir ) ); - let dotNH:f32 = saturate( dot( normal, halfDir ) ); - let D:f32 = D_Charlie( sheenRoughness, dotNH ); - let V:f32 = V_Neubelt( dotNV, dotNL ); - return sheenColor * ( D * V ); - } - #endif + #if ${defines.USE_TRANSMISSION} + diffuseColor.a *= material.transmissionAlpha + 0.1; + #endif - #if ${defines.USE_IRIDESCENCE} - let XYZ_TO_REC709: mat3x3 = mat3x3( - 3.2404542, -0.9692660, 0.0556434, -1.5371385, 1.8760108, -0.2040259, -0.4985314, 0.0415560, 1.0572252 - ); - fn Fresnel0ToIor( fresnel0:vec3 )->vec3 { - let sqrtF0:vec3 = sqrt( fresnel0 ); - return ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 ); - } - fn IorToFresnel0(transmittedIor:vec3,incidentIor:f32 )->vec3 { - return pow2Vector( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) ); - } - fn IorToFresnel0(transmittedIor:f32, incidentIor:f32 )->f32 { - return pow2Vector( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor )); - } - fn evalSensitivity(OPD:f32,shift:vec3 )->vec3 { - let phase:f32 = 2.0 * PI * OPD * 1.0e-9; - let val:vec3 = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 ); - let pos:vec3 = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 ); - let vart:vec3 = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 ); - let xyz:vec3 = val * sqrt( 2.0 * PI * vart ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * vart ); - xyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) ); - xyz /= 1.0685e-7; - let rgb:vec3 = XYZ_TO_REC709 * xyz; - return rgb; - } - fn evalIridescence(outsideIOR:f32, eta2:f32,cosTheta1:f32,thinFilmThickness:f32,baseF0:vec3 )->vec3 { - var I:vec3; - let iridescenceIOR:f32 = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) ); - let sinTheta2Sq:f32 = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) ); - let cosTheta2Sq:f32 = 1.0 - sinTheta2Sq; - if ( cosTheta2Sq < 0.0 ) { - return vec3( 1.0 ); - } - let cosTheta2:f32 = sqrt( cosTheta2Sq ); - let R0:f32 = IorToFresnel0( iridescenceIOR, outsideIOR ); - let R12:f32 = F_Schlick( R0, 1.0, cosTheta1 ); - let R21:f32 = R12; - let T121:f32 = 1.0 - R12; - let phi12:f32 = 0.0; - if ( iridescenceIOR < outsideIOR ) phi12 = PI; - let phi21:f32 = PI - phi12; - let baseIOR:vec3 = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) ); - let R1:vec3 = IorToFresnel0( baseIOR, iridescenceIOR ); - let R23:vec3 = F_Schlick( R1, 1.0, cosTheta2 ); - let phi23:vec3 = vec3( 0.0 ); - if ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI; - if ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI; - if ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI; - let OPD:f32 = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2; - let phi:vec3 = vec3( phi21 ) + phi23; - let R123:vec3 = clamp( R12 * R23, 1e-5, 0.9999 ); - let r123:vec3 = sqrt( R123 ); - let Rs:vec3 = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 ); - let C0:vec3 = R12 + Rs; - I = C0; - let Cm:vec3 = Rs - T121; - for ( let m : u32 = 1;m <= 2; ++ m ) { - Cm *= r123; - Sm:vec3 = 2.0 * evalSensitivity( f32( m ) * OPD, f32( m ) * phi ); - I += Cm * Sm; - } - return max( I, vec3( 0.0 ) ); - } - #endif - const clearcoatSpecular:vec3 = vec3( 0.0 ); - const sheenSpecular:vec3 = vec3( 0.0 ); + var finnalColor:vec4; + finnalColor = vec4( outgoingLight, diffuseColor.a ); + #if ${defines.TONE_MAPPING} + finnalColor.rgb = toneMapping( finnalColor.rgb,materialUniform.toneMappingExposure ); + #endif - fn IBLSheenBRDF( normal:vec3, viewDir:vec3, roughness:f32 )->f32 { - let dotNV:f32 = saturate( dot( normal, viewDir ) ); - let r2:f32 = roughness * roughness; - let a:f32 =select(-8.48 * r2 + 14.3 * roughness - 9.95,-339.2 * r2 + 161.4 * roughness - 25.9,roughness < 0.25); - //let a:f32 = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95; - let b:f32=select(1.97 * r2 - 3.27 * roughness + 0.72,44.0 * r2 - 23.7 * roughness + 3.26, roughness < 0.25); - //let b:f32 = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72; - //let DG:f32 = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) ); - let DG:f32 = exp( a * dotNV + b ) + select(0.1 * ( roughness - 0.25 ),0.0,roughness < 0.25); - return saturate( DG * RECIPROCAL_PI ); - } - fn DFGApprox( specularColor:vec3, roughness:f32,dotNV:f32 )->vec3 { - const c0:vec4 = vec4( - 1, - 0.0275, - 0.572, 0.022 ); - let c1:vec4 = vec4( 1, 0.0425, 1.04, - 0.04 ); - let r:vec4 = roughness * c0 + c1; - let a004:f32 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y; - let fab:vec2 = vec2( - 1.04, 1.04 ) * a004 + r.zw; - return specularColor * fab.x + fab.y; - } - fn EnvironmentBRDF( normal:vec3,viewDir:vec3,specularColor:vec3, specularF90:f32,roughness:f32 )->vec3 { - let fab:vec2 = DFGApprox( normal, viewDir, roughness ); - return specularColor * fab.x + specularF90 * fab.y; - } + finnalColor = linearToOutputTexel( finnalColor); + #if ${defines.PREMULTIPLIED_ALPHA} + finnalColor.rgb *= finnalColor.a; + #endif + #if ${defines.DITHERING} + finnalColor.rgb = dithering( finnalColor.rgb ); + #endif + return finnalColor; + }`; +} - fn computeSpecularOcclusion( dotNV:f32, ambientOcclusion:f32, roughness:f32 )->f32 { - return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion ); - } - #if ${defines.USE_TRANSMISSION} +function pbrVert(defines) { + return wgslParseDefines` + #include + struct VertexOutput { + @builtin(position) position: vec4, + @location(0) vUv: vec2, + @location(1) vViewPosition: vec3, // Vector from vertex to camera. + @location(2) vWorldPosition: vec3, + @location(3) vNormal: vec3, + // 可选 + #if ${defines.USE_LIGHTTEXTURE || defines.USE_AOTEXTURE} + @location(${defines.vUv2OutLocation}) vUv2: vec2, + #endif - fn getVolumeTransmissionRay( n:vec3, v:vec3, thickness:f32, ior:f32, modelMatrix:mat4x4:f32)->vec3 { - var refractionVector:vec3 = refract( - v, normalize( n ), 1.0 / ior ); - var modelScale:vec3; - modelScale.x = length( vec3( modelMatrix[0].xyz ) ); - modelScale.y = length( vec3( modelMatrix[1].xyz ) ); - modelScale.z = length( vec3( modelMatrix[2].xyz ) ); - return normalize( refractionVector ) * thickness * modelScale; - } - fn applyIorToRoughness(roughness:f32, ior:f32 )->f32 { - return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 ); - } - fn getTransmissionSample( fragCoord:vec2, roughness:f32,ior:f32 )->vec4 { - let framebufferLod:f32 = log2( materialUniform.transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior ); - return textureSampleLevel(transmissionSamplerTexture,baseSampler,fragCoord.xy, framebufferLod); + #if ${defines.USE_COLOR_ALPHA} + @location(${defines.vColorOutLocation}) vColor: vec4, + #elif ${defines.USE_COLOR || defines.USE_INSTANCING_COLOR} + @location(${defines.vColorOutLocation}) vColor: vec3, + #endif - } - fn applyVolumeAttenuation( radiance:vec3, transmissionDistance:f32,attenuationColor:vec3,attenuationDistance:f32 )->vec3 { - if ( isinf( attenuationDistance ) ) { - return radiance; - } - else { - let attenuationCoefficient:vec3 = -log( attenuationColor ) / attenuationDistance; - let transmittance:vec3 = exp( - attenuationCoefficient * transmissionDistance ); - return transmittance * radiance; - } - - } - fn getIBLVolumeRefraction( n:vec3,v:vec3, roughness:f32, diffuseColor:vec3,specularColor:vec3, specularF90:f32,position:vec3, modelMatrix:mat4x4, viewMatrix:mat4x4,projMatrix:mat4x4,ior:f32, thickness:f32,attenuationColor:vec3,attenuationDistance:f32 )->vec4 { - let transmissionRay:vec3 = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix ); - let refractedRayExit:vec3 = position + transmissionRay; - let ndcPos:vec4 = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); - let refractionCoords:vec2 = ndcPos.xy / ndcPos.w; - refractionCoords += 1.0; - refractionCoords /= 2.0; - let transmittedLight:vec4 = getTransmissionSample( refractionCoords, roughness, ior ); - let attenuatedColor:vec3 = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance ); - let F:vec3 = EnvironmentBRDF( n, v, specularColor, specularF90, roughness ); - return vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a ); - } - #endif + #if ${defines.USE_TANGENT} + @location(${defines.vTangentOutLocation}) vTangent: vec3, + @location(${defines.vBitangentOutLocation}) vBitangent: vec3, + #endif + }; + struct GlobalUniform { + projectionMatrix: mat4x4, + viewMatrix: mat4x4, + inverseViewMatrix: mat4x4, + cameraPosition: vec3, + }; - #if ${defines.USE_BUMPTEXTURE} - fn dHdxy_fwd()->vec2 { - let dSTdx:vec2 = dpdx( vUv ); - let dSTdy:vec2 = dpdy( vUv ); + //texture and sampler + // @group(0) @binding(${defines.samplerBinding}) var baseSampler: sampler; + #if ${defines.USE_SKINNING} + //uniform highp sampler2D boneTexture; + @group(0) @binding(${defines.boneTextureBinding}) var boneTexture: texture_2d; + #endif - let Hll:f32 = materialUniform.bumpScale * textureSample(bumpTexture, baseSampler, vUv).x; - let dBx:f32 = materialUniform.bumpScale * textureSample(bumpTexture, baseSampler, vUv + dSTdx).x - Hll; - let dBy:f32 = materialUniform.bumpScale * textureSample(bumpTexture, baseSampler, vUv + dSTdy).x - Hll; - return vec2( dBx, dBy ); - } - fn perturbNormalArb( surf_pos:vec3, surf_norm:vec3, dHdxy:vec2, faceDirection:f32 )->vec3 { - let vSigmaX:vec3 = dpdx( surf_pos.xyz ); - let vSigmaY:vec3 = dpdy( surf_pos.xyz ); - let vN:vec3 = surf_norm; - let R1:vec3 = cross( vSigmaY, vN ); - let R2:vec3 = cross( vN, vSigmaX ); - let fDet:f32 = dot( vSigmaX, R1 ) * faceDirection; - let vGrad:vec3 = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 ); - return normalize( abs( fDet ) * surf_norm - vGrad ); - } + #if ${defines.USE_DISPLACEMENTTEXTURE} + //uniform sampler2D displacementMap; + @group(0) @binding(${defines.displacementTextureBinding}) var displacementMap: texture_2d; #endif - //! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALTEXTURE ) || defined ( USE_CLEARCOAT_NORMALTEXTURE ) ) - #if ${(!defines.USE_TANGENT && defines.TANGENTSPACE_NORMALTEXTURE) || defines.USE_CLEARCOAT_NORMALTEXTURE} - fn perturbNormal2Arb( eye_pos:vec3, surf_norm:vec3, textureN:vec3, faceDirection:f32 )->vec3 { - let q0:vec3 = dpdx( eye_pos.xyz ); - let q1:vec3 = dpdy( eye_pos.xyz ); - let st0:vec2 = dpdx( vUv.st ); - let st1:vec2 = dpdy( vUv.st ); - let N:vec3 = surf_norm; - let q1perp:vec3 = cross( q1, N ); - let q0perp:vec3 = cross( N, q0 ); - let T:vec3 = q1perp * st0.x + q0perp * st1.x; - let B:vec3 = q1perp * st0.y + q0perp * st1.y; - let det:f32 = max( dot( T, T ), dot( B, B ) ); - let scale:f32 = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det ); - return normalize( T * ( textureN.x * scale ) + B * ( textureN.y * scale ) + N * textureN.z ); - } + #if ${defines.MORPHTARGETS_TEXTURE} + //uniform sampler2DArray morphTargetsTexture; + @group(0) @binding(${defines.morphTargetsTextureBinding}) var morphTargetsTexture: texture_2d_array; #endif - struct MultiAndSingleScatter{ - multiScatter:vec3, - singleScatter:vec3 - } - #if ${defines.USE_IRIDESCENCE} - ////////inout vec3 singleScatter, inout vec3 multiScatter - fn computeMultiscatteringIridescence( normal:vec3, viewDir:vec3, specularColor:vec3, specularF90:f32, iridescence:f32,iridescenceF0:vec3, roughness:f32 )->MultiAndSingleScatter { - #else - ////////inout vec3 singleScatter, inout vec3 multiScatter - fn computeMultiscattering( normal:vec3,viewDir:vec3, specularColor:vec3, specularF90:f32, roughness:f32)->MultiAndSingleScatter { - #endif - let fab:vec2 = DFGApprox( normal, viewDir, roughness ); - var multiAndSingleScatter:MultiAndSingleScatter; + struct VertexInput { + @location(0) position: vec3, - #if ${defines.USE_IRIDESCENCE} - let Fr:vec3 = mix( specularColor, iridescenceF0, iridescence ); - #else - let Fr:vec3 = specularColor; - #endif - let FssEss:vec3 = Fr * fab.x + specularF90 * fab.y; - let Ess:f32 = fab.x + fab.y; - let Ems:f32 = 1.0 - Ess; - let Favg:vec3 = Fr + ( 1.0 - Fr ) * 0.047619; - let Fms:vec3 = FssEss * Favg / ( 1.0 - Ems * Favg ); - // singleScatter += FssEss; - // multiScatter += Fms * Ems; - multiAndSingleScatter.multiScatter=Fms * Ems; - multiAndSingleScatter.singleScatter=FssEss; - return multiAndSingleScatter; - } - //直接光照 - fn RE_Direct_Physical( directLight:IncidentLight, geometry:GeometricContext, material:PhysicalMaterial)->ReflectedLight { - var reflectedLight:ReflectedLight; - let dotNL:f32 = saturate(dot( geometry.normal, directLight.direction)); - let irradiance:vec3 = dotNL * directLight.color; - #if ${defines.USE_CLEARCOAT} - let dotNLcc:f32 = saturate( dot( geometry.clearcoatNormal, directLight.direction ) ); - let ccIrradiance:vec3 = dotNLcc * directLight.color; - clearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness ); - #endif + @location(1) normal: vec3, - #if ${defines.USE_SHEEN} - sheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness ); - #endif + @location(2) uv: vec2, + #if ${defines.USE_LIGHTTEXTURE || defines.USE_AOTEXTURE} + @location(${defines.uv2Location}) uv2:vec2, + #endif + #if ${defines.USE_INSTANCING} + @location(${defines.instanceMatrixLocation}) instanceMatrix:mat4x4, + #endif + #if ${defines.USE_INSTANCING_COLOR} + @location(${defines.instanceColorLocation}) instanceColor:vec3, + #endif + + #if ${defines.USE_TANGENT} + @location(${defines.tangentLocation}) tangent:vec4, + #endif + #if ${defines.USE_COLOR_ALPHA} + @location(${defines.colorLocation}) color:vec4, + #elif ${defines.USE_COLOR} + @location(${defines.colorLocation}) color:vec3, + #endif - #if ${defines.USE_IRIDESCENCE} - reflectedLight.directSpecular = irradiance * BRDF_GGX_Iridescence( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness ); - #else - reflectedLight.directSpecular = irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness ); - #endif - reflectedLight.directDiffuse = irradiance * BRDF_Lambert( material.diffuseColor ); - return reflectedLight; - } - //间接光照 - fn RE_IndirectDiffuse_Physical( irradiance:vec3, geometry:GeometricContext, material:PhysicalMaterial )->ReflectedLight { - var reflectedLight:ReflectedLight; - reflectedLight.indirectDiffuse = irradiance * BRDF_Lambert( material.diffuseColor ); - return reflectedLight; - } - //间接高光 - fn RE_IndirectSpecular_Physical( radiance:vec3, irradiance:vec3, clearcoatRadiance:vec3, geometry:GeometricContext, material:PhysicalMaterial)->ReflectedLight { - var reflectedLight:ReflectedLight; - #if ${defines.USE_CLEARCOAT} - clearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness ); - #endif - #if ${defines.USE_SHEEN} - sheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness ); - #endif - var singleScattering:vec3; - var multiScattering:vec3; - let cosineWeightedIrradiance:vec3 = irradiance * RECIPROCAL_PI; - var tempMultiAndSingleScatter:MultiAndSingleScatter; - #if ${defines.USE_IRIDESCENCE} - tempMultiAndSingleScatter=computeMultiscatteringIridescence( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness ); - #else - tempMultiAndSingleScatter= computeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness ); - #endif - singleScattering=tempMultiAndSingleScatter.singleScatter; - multiScattering=tempMultiAndSingleScatter.multiScatter; - let totalScattering:vec3 = singleScattering + multiScattering; - let diffuse:vec3 = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) ); - reflectedLight.indirectSpecular = radiance * singleScattering; - reflectedLight.indirectSpecular = multiScattering * cosineWeightedIrradiance; - reflectedLight.indirectDiffuse = diffuse * cosineWeightedIrradiance; - return reflectedLight; - } - `; -} + #if ${defines.USE_MORPHTARGETS && !defines.MORPHTARGETS_TEXTURE} + @location(${defines.morphTarget0Location}) morphTarget0:vec3, -function pbrStruct(defines) { - return wgslParseDefines` - struct MaterialUniform{ + @location(${defines.morphTarget1Location}) morphTarget1:vec3, - modelMatrix: mat4x4, - - diffuse:vec3, - - opacity:f32, - - normalMatrix: mat3x3, - - emissive:vec3, - - roughness:f32, - - metalness:f32, - - #if ${defines.TONE_MAPPING} - toneMappingExposure:f32, - #endif - - #if ${defines.SPECULAR} - - specularColor:vec3, - - specularIntensity:f32, - #endif - - #if ${defines.USE_SHEEN} - - sheenColor:vec3, - - sheenRoughness:f32, - #endif + @location(${defines.morphTarget2Location}) morphTarget2:vec3, - #if ${defines.USE_TRANSMISSION} - - attenuationColor:vec3, - - transmission:f32, - - transmissionSamplerSize:vec2, - - thickness:f32, - - attenuationDistance:f32, - - #endif + @location(${defines.morphTarget3Location}) morphTarget3:vec3, + #if ${defines.USE_MORPHNORMALS} + @location(${defines.morphNormal0Location}) morphNormal0:vec3, - #if ${defines.USE_SKINNING} - - bindMatrix:mat4x4, - - bindMatrixInverse:mat4x4, - - boneTextureSize:u32, - #endif + @location(${defines.morphNormal1Location}) morphNormal1:vec3, - #if ${defines.USE_NORMALTEXTURE} - normalScale:vec2, - #endif - - #if ${defines.IOR} - ior:f32, - #endif - - #if ${defines.USE_CLEARCOAT} - - #if ${defines.USE_CLEARCOAT_NORMALTEXTURE} - clearcoatNormalScale:vec2, - #endif - - clearcoat:f32, - - clearcoatRoughness:f32, - #endif - - #if ${defines.USE_IRIDESCENCE} - iridescence:f32, - - iridescenceIOR:f32, - - iridescenceThicknessMinimum:f32, - - iridescenceThicknessMaximum:f32, - - #endif + @location(${defines.morphNormal2Location}) morphNormal2:vec3, - #if ${defines.USE_AOTEXTURE} - aoTextureIntensity:f32, - #endif + @location(${defines.morphNormal3Location}) morphNormal3:vec3, + #else + @location(${defines.morphTarget4Location}) morphTarget4:vec3, + + @location(${defines.morphTarget5Location}) morphTarget5:vec3, - #if ${defines.USE_LIGHTTEXTURE} - lightTextureIntensity:f32, - #endif - - #if ${defines.USE_ENVTEXTURE} - envTextureIntensity:f32, - - flipEnvTexture:f32, - #endif + @location(${defines.morphTarget6Location}) morphTarget6:vec3, - #if ${defines.USE_BUMPTEXTURE} - bumpScale:f32; + @location(${defines.morphTarget7Location}) morphTarget7:vec3, #endif + #endif + #if ${defines.USE_SKINNING} + @location(${defines.skinIndexLocation}) skinIndex:vec4, + @location(${defines.skinWeightLocation}) skinWeight:vec4, + #endif + } - #if ${defines.USE_DISPLACEMENTTEXTURE} - - displacementScale:f32, - - displacementBias:f32, - #endif + #if ${defines.MORPHTARGETS_TEXTURE} + fn getMorph( vertexIndex:u32, morphTargetIndex:u32,offset:u32 )->vec4 { + let texelIndex:u32 = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset; + let y:u32 = texelIndex / materialUniform.morphTargetsTextureSize.x; + let x:u32 = texelIndex - y * materialUniform.morphTargetsTextureSize.x; + let morphUV:vec3 = vec3( x, y, morphTargetIndex ); + //textureLoad + //return texelFetch( morphTargetsTexture, morphUV, 0 ); + return textureLoad( morphTargetsTexture, morphUV, 0 ); + } + #endif + #if ${defines.USE_SKINNING} + fn getBoneMatrix( i:f32 )->mat4x4 { + let j:f32 = i * 4.0; + let x:f32 = j%f32( materialUniform.boneTextureSize ); + let y:f32 = floor( j / f32( materialUniform.boneTextureSize ) ); + let dx:f32 = 1.0 / f32( materialUniform.boneTextureSize ); + let dy:f32 = 1.0 / f32( materialUniform.boneTextureSize ); + y = dy * ( y + 0.5 ); - #if ${defines.USE_MORPHTARGETS} - - morphTargetBaseInfluence:f32, - - #if ${defines.MORPHTARGETS_TEXTURE} - - morphTargetsTextureSize:vec2, - - MORPHTARGETS_COUNT:u32, - - #endif - - morphTargetInfluences:array, - - #endif + let v1:vec4 = textureSample(boneTexture, baseSampler, vec2( dx * ( x + 0.5 ), y ) ); + let v2:vec4 = textureSample(boneTexture, baseSampler, vec2( dx * ( x + 1.5 ), y ) ); + let v3:vec4 = textureSample(boneTexture, baseSampler, vec2( dx * ( x + 2.5 ), y ) ); + let v4:vec4 = textureSample(boneTexture, baseSampler, vec2( dx * ( x + 3.5 ), y ) ); + let bone:mat4x4 = mat4x4( v1, v2, v3, v4 ); + return bone; } + #endif - `; -} - -function pbrTexture(defines) { - return wgslParseDefines` - #if ${defines.USE_BUMPTEXTURE} - @group(0) @binding(${defines.bumpTextureBinding}) var bumpTexture: texture_2d; - #endif - #if ${defines.USE_TRANSMISSION} - #if ${defines.USE_TRANSMISSIONTEXTURE} - @group(0) @binding(${defines.transmissionTextureBinding}) var transmissionTexture: texture_2d; - #endif - #if ${defines.USE_THICKNESSTEXTURE} - @group(0) @binding(${defines.thicknessTextureBinding}) var thicknessTexture: texture_2d; + @binding(0) @group(0) var materialUniform : MaterialUniform; + @binding(0) @group(1) var globalUniform : GlobalUniform; + @vertex + fn main(input:VertexInput)->VertexOutput { + var vertexOutput:VertexOutput; + #if ${defines.USE_TEXTURE} + vertexOutput.vUv = input.uv; + #endif + #if ${defines.USE_LIGHTTEXTURE || defines.USE_AOTEXTURE} + vertexOutput.vUv2 input.uv2; + #endif + #if ${defines.USE_COLOR_ALPHA} + vertexOutput.vColor = vec4( 1.0 ); + #elif ${defines.USE_COLOR || defines.USE_INSTANCING_COLOR} + vertexOutput.vColor = vec3( 1.0 ); + #endif + #if ${defines.USE_COLOR} + vertexOutput.vColor *= input.color; + #endif + #if ${defines.USE_INSTANCING_COLOR} + vertexOutput.vColor.xyz *= input.instanceColor.xyz; + #endif + #if ${defines.USE_MORPHCOLORS && defines.MORPHTARGETS_TEXTURE} + vertexOutput.vColor *= materialUniform.morphTargetBaseInfluence; + for (let i : u32 = 0u; i < materialUniform.MORPHTARGETS_COUNT; i = i + 1u ) { + #if ${defines.USE_COLOR_ALPHA} + if ( materialUniform.morphTargetInfluences[ i ] ! = 0.0 ) vertexOutput.vColor += getMorph( gl_VertexID, i, 2 ) * materialUniform.morphTargetInfluences[ i ]; + #elif ${defines.USE_COLOR} + if ( materialUniform.morphTargetInfluences[ i ] ! = 0.0 ) vertexOutput.vColor += getMorph( gl_VertexID, i, 2 ).rgb * materialUniform.morphTargetInfluences[ i ]; #endif - @group(0) @binding(${defines.transmissionSamplerTextureBinding}) var transmissionSamplerTexture: texture_2d; - #endif - #if ${defines.USE_ENVTEXTURE} - @group(0) @binding(${defines.envTextureBinding}) var envTexture: texture_cube; - #endif - #if ${defines.USE_NORMALTEXTURE} - @group(0) @binding(${defines.normalTextureBinding}) var normalTexture: texture_2d; - #endif - - #if ${defines.USE_CLEARCOATTEXTURE} - @group(0) @binding(${defines.clearcoatTextureBinding}) var clearcoatTexture: texture_2d; - #endif - - #if ${defines.USE_CLEARCOAT_ROUGHNESSTEXTURE} - @group(0) @binding(${defines.clearcoatRclearcoatRoughnessTextureBinding}) var clearcoatRoughnessTexture: texture_2d; - #endif - - #if ${defines.USE_CLEARCOAT_NORMALTEXTURE} - @group(0) @binding(${defines.clearcoatNormalTextureBinding}) var clearcoatNormalTexture: texture_2d; - #endif - - #if ${defines.USE_IRIDESCENCETEXTURE} - @group(0) @binding(${defines.iridescenceTextureBinding}) var iridescenceTexture: texture_2d; - #endif - - #if ${defines.USE_IRIDESCENCE_THICKNESSTEXTURE} - @group(0) @binding(${defines.iridescenceThicknessTextureBinding}) var iridescenceThicknessTexture: texture_2d; + } + #endif + var objectNormal:vec3 = vec3(input.normal); + #if ${defines.USE_TANGENT} + let objectTangent:vec3 = vec3( input.tangent.xyz ); + #endif + #if ${defines.USE_MORPHNORMALS} + objectNormal *= materialUniform.morphTargetBaseInfluence; + #if ${defines.MORPHTARGETS_TEXTURE} + for ( let i : u32 = 0u; i < materialUniform.MORPHTARGETS_COUNT; i = i + 1u) { + if ( materialUniform.morphTargetInfluences[ i ] ! = 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * materialUniform.morphTargetInfluences[ i ]; + } + #else + objectNormal += morphNormal0 * materialUniform.morphTargetInfluences[ 0 ]; + objectNormal += morphNormal1 * materialUniform.morphTargetInfluences[ 1 ]; + objectNormal += morphNormal2 * materialUniform.morphTargetInfluences[ 2 ]; + objectNormal += morphNormal3 * materialUniform.morphTargetInfluences[ 3 ]; #endif - - #if ${defines.USE_ROUGHNESSTEXTURE} - @group(0) @binding(${defines.roughnessTextureBinding}) var roughnessTexture: texture_2d; + #endif + #if ${defines.USE_SKINNING} + let boneMatX:mat4x4 = getBoneMatrix( input.skinIndex.x ); + let boneMatY:mat4x4 = getBoneMatrix( input.skinIndex.y ); + let boneMatZ:mat4x4 = getBoneMatrix( input.skinIndex.z ); + let boneMatW:mat4x4 = getBoneMatrix( input.skinIndex.w ); + #endif + #if ${defines.USE_SKINNING} + let skinMatrix:mat4x4 = mat4x4( 0.0 ); + skinMatrix += input.skinWeight.x * boneMatX; + skinMatrix += input.skinWeight.y * boneMatY; + skinMatrix += input.skinWeight.z * boneMatZ; + skinMatrix += input.skinWeight.w * boneMatW; + skinMatrix = materialUniform.bindMatrixInverse * skinMatrix * materialUniform.bindMatrix; + objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz; + #if ${defines.USE_TANGENT} + objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz; #endif - - #if ${defines.USE_METALNESSTEXTURE} - @group(0) @binding(${defines.metalnessTextureBinding}) var metalnessTexture: texture_2d; + #endif + var transformedNormal:vec3 = objectNormal; + // transformedNormal+=vec3(0.0); + #if ${defines.USE_INSTANCING} + let m:mat3x3 = mat3x3( input.instanceMatrix ); + transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) ); + transformedNormal = m * transformedNormal; + #endif + transformedNormal = materialUniform.normalMatrix * transformedNormal; + #if ${defines.FLIP_SIDED} + transformedNormal = - transformedNormal; + #endif + #if ${defines.USE_TANGENT} + let transformedTangent:vec3 = (globalUniform.viewMatrix*materialUniform.modelMatrix * vec4( objectTangent, 0.0 ) ).xyz; + #if ${defines.FLIP_SIDED} + transformedTangent = - transformedTangent; #endif - - #if ${defines.SPECULAR} - #if ${defines.USE_SPECULARINTENSITYTEXTURE} - @group(0) @binding(${defines.specularIntensityTextureBinding}) var specularIntensityTexture: texture_2d; - #endif - - #if ${defines.USE_SPECULARCOLORTEXTURE} - @group(0) @binding(${defines.specularColorTextureBinding}) var specularColorTexture: texture_2d; - #endif + #endif + vertexOutput.vNormal = normalize( transformedNormal ); + #if ${defines.FLAT_SHADED} + #if ${defines.USE_TANGENT} + vTangent = normalize( transformedTangent ); + vBitangent = normalize( cross( vNormal, vTangent ) * input.tangent.w ); #endif - - #if ${defines.USE_SHEEN} - #if ${defines.USE_SHEENCOLORTEXTURE} - @group(0) @binding(${defines.sheenColorTextureBinding}) var sheenColorTexture: texture_2d; - #endif - #if ${defines.USE_SHEENROUGHNESSTEXTURE} - @group(0) @binding(${defines.sheenRoughnessTextureBinding}) var sheenRoughnessTexture: texture_2d; + #endif + let transformed:vec3 = vec3( input.position ); + #if ${defines.USE_MORPHTARGETS} + transformed *= materialUniform.morphTargetBaseInfluence; + #if ${defines.MORPHTARGETS_TEXTURE} + for ( let i : u32 = 0u; i < materialUniform.MORPHTARGETS_COUNT; i = i + 1u ) { + if ( materialUniform.morphTargetInfluences[ i ] ! = 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ]; + } + #else + transformed += input.morphTarget0 * materialUniform.morphTargetInfluences[ 0 ]; + transformed += input.morphTarget1 * materialUniform.morphTargetInfluences[ 1 ]; + transformed += input.morphTarget2 * materialUniform.morphTargetInfluences[ 2 ]; + transformed += input.morphTarget3 * materialUniform.morphTargetInfluences[ 3 ]; + #if ${defines.USE_MORPHNORMALS} + transformed += input.morphTarget4 * materialUniform.morphTargetInfluences[ 4 ]; + transformed += input.morphTarget5 * materialUniform.morphTargetInfluences[ 5 ]; + transformed += input.morphTarget6 * materialUniform.morphTargetInfluences[ 6 ]; + transformed += input.morphTarget7 * materialUniform.morphTargetInfluences[ 7 ]; #endif #endif - - #if ${defines.USE_TEXTURE} - @group(0) @binding(${defines.baseSamplerBinding}) var baseSampler: sampler; - @group(0) @binding(${defines.baseTextureBinding}) var baseTexture: texture_2d; + #endif + #if ${defines.USE_SKINNING} + let skinVertex:vec4 = materialUniform.bindMatrix * vec4( transformed, 1.0 ); + let skinned:vec4 = vec4( 0.0 ); + skinned += boneMatX * skinVertex * input.skinWeight.x; + skinned += boneMatY * skinVertex * input.skinWeight.y; + skinned += boneMatZ * skinVertex * input.skinWeight.z; + skinned += boneMatW * skinVertex * input.skinWeight.w; + transformed = ( materialUniform.bindMatrixInverse * skinned ).xyz; + #endif + #if ${defines.USE_DISPLACEMENTTEXTURE} + transformed += normalize( objectNormal ) * (textureSample(displacementMap, baseSampler, vUv).x * materialUniform.displacementScale + materialUniform.displacementBias ); + #endif + var mvPosition:vec4 = vec4( transformed, 1.0 ); + #if ${defines.USE_INSTANCING} + mvPosition = input.instanceMatrix * mvPosition; + #endif + mvPosition = globalUniform.viewMatrix*materialUniform.modelMatrix * mvPosition; + vertexOutput.position = globalUniform.projectionMatrix * mvPosition; + vertexOutput.vViewPosition = - mvPosition.xyz/mvPosition.w; + #if ${defines.USE_ENVTEXTURE || defines.DISTANCE || defines.USE_TRANSMISSION} + var worldPosition:vec4 = vec4( transformed, 1.0 ); + #if ${defines.USE_INSTANCING} + worldPosition = input.instanceMatrix * worldPosition; #endif + worldPosition = materialUniform.modelMatrix * worldPosition; + #endif + #if ${defines.USE_TRANSMISSION} + vertexOutput.vWorldPosition = worldPosition.xyz; + #endif + return vertexOutput; + } + `; +} - #if ${defines.USE_ALPHATEXTURE} - @group(0) @binding(${defines.alphaTextureBinding}) var alphaTexture: texture_2d; - #endif +function phongFrag(defines) { + return wgslParseDefines` + struct MaterialUniform { + modelMatrix: mat4x4, + color: vec3, + opacity:f32, + normalMatrix: mat4x4, + emissive:vec3, + shininess:f32, + specular:vec3, + } + #include + #include + #include + #include + @binding(${defines.phongBinding}) @group(0) var materialUniform : MaterialUniform; + @binding(${defines.cameraBinding}) @group(1) var systemUniform : SystemUniform; + @fragment + fn main(input:FragInput) -> @location(0) vec4 { + var totalEmissiveRadiance:vec3 = materialUniform.emissive; + var color:vec4; + #if${defines.USE_COLORTEXTURE} + color= vec4(textureSample(baseColorTexture, baseColorSampler, input.uv).rgb+materialUniform.color,materialUniform.opacity); + #else + color=vec4(materialUniform.color,materialUniform.opacity); + #endif + let V:vec3 = normalize( systemUniform.cameraPosition - input.worldPos); + #if ${defines.USE_NORMALTEXTURE} + let N:vec3 = getNormalByNormalTexture(input); + #else + let N:vec3 = getNormal(input); + #endif + var geometry:Geometry; + geometry.normal=N; + geometry.viewDir=V; + geometry.position=input.worldPos; + let lightColor:ReflectedLight=parseLights(geometry,materialUniform.shininess); + // var finnalColor:vec3=color.xyz + (lightColor.directDiffuse + lightColor.directSpecular + lightColor.ambient); + var finnalColor:vec3=color.xyz * (lightColor.directDiffuse + lightColor.directSpecular + lightColor.ambient); - #if ${defines.USE_AOTEXTURE} - @group(0) @binding(${defines.aoTextureBinding}) var aoTexture: texture_2d; - - #endif - #if ${defines.USE_LIGHTTEXTURE} - @group(0) @binding(${defines.lightTextureBinding}) var lightTexture: texture_2d; - #endif + // finnalColor = lightColor.testColor.xyz; - #if ${defines.USE_EMISSIVETEXTURE} - @group(0) @binding(${defines.emissiveTextureBinding}) var emissiveTexture: texture_2d; - #endif - `; + return vec4(finnalColor,color.a); + }`; } -function pbrUtils(defines) { +function phongVert(defines) { return wgslParseDefines` - const PI:f32= 3.141592653589793; - const PI2:f32= 6.283185307179586; - const PI_HALF:f32= 1.5707963267948966; - const RECIPROCAL_PI:f32= 0.3183098861837907; - const RECIPROCAL_PI2:f32= 0.15915494309189535; - const EPSILON:f32= 1e-6; - - fn pow2(x:f32 )->f32 { - return x*x; - } - fn pow2Vector(x:vec3 )->vec3 { - return x*x; - } - fn pow3( x:f32 )->f32 { - return x*x*x; - } - fn pow4( x:f32 )->f32 { - let x2:f32 = x*x; - return x2*x2; - } - fn max3( v:vec3 )->f32 { - return max( max( v.x, v.y ), v.z ); - } - fn average(v:vec3 )->f32 { - return dot( v, vec3( 0.3333333 ) ); - } - fn rand( uv:vec2 )->f32 { - let a:f32 = 12.9898; - let b:f32 = 78.233; - let c:f32 = 43758.5453; - let dt:f32 = dot( uv.xy, vec2( a, b ) ); - let sn:f32 = dt % PI; - return fract( sin( sn ) * c ); - } - fn transformDirection( dir:vec3, matrix:mat4x4 )->vec3 { - return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); - } + struct MaterialUniform { + modelMatrix: mat4x4, + color: vec3, + opacity:f32, + normalMatrix: mat4x4, + emissive:vec3, + specular:vec3, + shininess:f32, + } + #include + #include + #include + @binding(${defines.phongBinding}) @group(0) var selfUniform : MaterialUniform; + @binding(${defines.cameraBinding}) @group(1) var systemUniform : SystemUniform; + @vertex + fn main(input: VertexInput) -> VertexOutput { + var output: VertexOutput; + #if ${defines.HAS_UV} + output.uv = input.uv; + #endif + let modelPos=selfUniform.modelMatrix *vec4(input.position,1.0); + output.worldPos = modelPos.xyz/modelPos.w; + let vNormalView = selfUniform.normalMatrix * vec4(input.normal,0.0); + output.normal = vNormalView.xyz; + output.view = systemUniform.cameraPosition.xyz - modelPos.xyz; + let viewPosition=systemUniform.viewMatrix * modelPos; + output.viewPosition = -viewPosition.xyz; + output.position = systemUniform.projectionMatrix * systemUniform.viewMatrix * modelPos; + return output; + }`; +} - fn transposeMat3( m:mat3x3 )->mat3x3 { - var tmp:mat3x3; - tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x ); - tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y ); - tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z ); - return tmp; - } - fn luminance( rgb:vec3 )->f32 { - let weights:vec3 = vec3(0.2126729, 0.7151522, 0.0721750 ); - return dot( weights, rgb ); - } - fn LinearToneMapping( color:vec3,toneMappingExposure:f32 )->vec3 { - return toneMappingExposure * color; +function quadFrag(defines) { + return ` + @group(0) @binding(1) var baseSampler: sampler; + @group(0) @binding(0) var colorTexture: texture_2d; + struct VertexOutput { + @builtin(position) position: vec4, + @location(0) uv: vec2, + }; + @fragment + fn main(input:VertexOutput) -> @location(0) vec4 { + return textureSample(colorTexture, baseSampler, vec2(input.uv.x,1.0-input.uv.y)); } + `; +} - fn ReinhardToneMapping( color:vec3,toneMappingExposure:f32 )->vec3 { - var tempColor:vec3; - tempColor=color; - tempColor *= toneMappingExposure; - return saturate( tempColor / ( vec3( 1.0 ) + tempColor ) ); - } - fn CustomToneMapping( color:vec3 )->vec3 { - return color; +function quadVert(defines) { + return ` + struct VertexInput { + @location(${defines.positionLocation}) position: vec2, } - fn toneMapping( color:vec3,toneMappingExposure:f32 )->vec3 { - return ReinhardToneMapping( color,toneMappingExposure ); + struct VertexOutput { + @builtin(position) position: vec4, + @location(0) uv: vec2, + }; + @vertex + fn main(input: VertexInput) -> VertexOutput { + var output:VertexOutput; + output.uv = input.position * 0.5 + 0.5; + output.position = vec4(input.position, 0.0, 1.0);; + return output; } + `; +} - fn LinearToLinear( value:vec4 )->vec4 { - return value; - } +function skyBoxFrag(defines) { + return ` fn lessThanEqual(a:vec3,b:vec3)->vec3{ - let xValue:f32=select(b.x,a.x,a.x<=b.x); - let yValue:f32=select(b.y,a.y,a.y<=b.y); - let zValue:f32=select(b.z,a.z,a.z<=b.z); - return vec3(xValue,yValue,zValue); - } + let xValue:f32=select(b.x,a.x,a.x<=b.x); + let yValue:f32=select(b.y,a.y,a.y<=b.y); + let zValue:f32=select(b.z,a.z,a.z<=b.z); + return vec3(xValue,yValue,zValue); + } fn LinearTosRGB( value:vec4 )->vec4 { return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a ); } - fn linearToOutputTexel(value:vec4 )->vec4 { - return LinearTosRGB( value ); - } - `; + struct FragmentInput { + @location(0) texCoord : vec3 + }; + @group(0) @binding(2) var defaultSampler: sampler; + @group(0) @binding(1) var skyboxTexture: texture_cube; + @fragment + fn main(input : FragmentInput) -> @location(0) vec4 { + let color = textureSample(skyboxTexture, defaultSampler, input.texCoord); + return LinearTosRGB(color); + } +`; } -function blinn_phong(defines) { +function skyBoxVert(defines) { return ` - fn getPointLightInfo(pointLight:PointLight,worldPos:vec3,shininess:f32,N:vec3,V:vec3)->vec3{ - var color=vec3(0.0,0.0,0.0); - var direction:vec3 = worldPos - pointLight.position; - let dist:f32 = length( direction ); - direction = normalize(direction); - let decay = clamp(1.0 - pow(dist / pointLight.distance, 4.0), 0.0, 1.0); - - let d = max( dot( N, -direction ), 0.0 ) * decay; - color += pointLight.color * d; + struct SystemUniform { + projectionMatrix: mat4x4, + viewMatrix: mat4x4, + inverseViewMatrix: mat4x4, + cameraPosition: vec3, + }; + struct MaterialUniform { + modelMatrix: mat4x4, + } + @binding(${defines.skyboxBinding}) @group(0) var selfUniform : MaterialUniform; + @binding(${defines.cameraBinding}) @group(1) var systemUniform : SystemUniform; + struct VertexInput { + @location(${defines.positionLocation}) position : vec3, + }; + struct VertexOutput { + @builtin(position) position : vec4, + @location(0) texCoord : vec3, + }; + @vertex + fn main(input : VertexInput) -> VertexOutput { + var output : VertexOutput; + output.texCoord = input.position.xyz; + var modelView = systemUniform.viewMatrix; + // Drop the translation portion of the modelView matrix + modelView[3] = vec4(0.0, 0.0, 0.0, modelView[3].w); + output.position = systemUniform.projectionMatrix * modelView * vec4(input.position,1.0); + output.position = output.position.xyww; + return output; + } + `; +} - let halfDir:vec3 = normalize( V - direction ); - let s:f32 = pow( clamp( dot( N, halfDir ), 0.0, 1.0 ), shininess ) * decay; - color += pointLight.color * s; - return color; - } - fn getSpotLightInfo(spotLight:SpotLight,worldPos:vec3,shininess:f32,N:vec3,V:vec3)->vec3{ - var color=vec3(0.0,0.0,0.0); - var direction:vec3 = spotLight.position - worldPos; - let lightDistance:f32 = length(direction); - direction = normalize(direction); - let angleCos:f32 = dot( direction, -spotLight.direction ); - let decay:f32 = clamp(1.0 - pow(lightDistance/spotLight.distance, 4.0), 0.0, 1.0); - let spotEffect:f32 = smoothstep( spotLight.penumbraCos, spotLight.coneCos, angleCos ); - let decayTotal:f32 = decay * spotEffect; - let d:f32 = max( dot( N, direction ), 0.0 ) * decayTotal; - color += spotLight.color * d; - let halfDir:vec3 = normalize( V + direction ); - let s:f32 = pow( clamp( dot( N, halfDir ), 0.0, 1.0 ), shininess ) * decayTotal; - color += spotLight.color * s; - return color; - } - struct DirectionalLight { - direction: vec3, - color: vec3, +function blendFrag(defines) { + return ` + struct FragInput { + @location(0) uv: vec2, }; - fn getDirectLightInfo(directionalLight:DirectionalLight,shininess:f32,N:vec3,V:vec3)->vec3{ - var color=vec3(0.0,0.0,0.0); - let d:f32 = max(dot(N, -directionalLight.direction), 0.0); - color += directionalLight.color * d; - - let halfDir:vec3 = normalize( V - directionalLight.direction ); - let s:f32 = pow( clamp( dot( N, halfDir ), 0.0, 1.0 ), shininess ); - color += directionalLight.color * s; - return color; - } + @group(0) @binding({{tDiffuseBinding}}) var tDiffuse: texture_2d; + @group(0) @binding({{baseColorTextureBinding}}) var baseColorTexture: texture_2d; + @group(0) @binding({{tSamplerBinding}}) var tSampler: sampler; + @fragment + fn main(input:FragInput) -> @location(0) vec4 { + let postColor:vec4 = textureSample(tDiffuse, tSampler, input.uv); + let baseColor:vec4 = textureSample(baseColorTexture, tSampler, input.uv); + return baseColor+postColor; + } `; } -function phongFunction(defines) { +function Blur(defines) { return ` - fn G_BlinnPhong_Implicit( )->f32 { - - // geometry term is (n dot l)(n dot v) / 4(n dot l)(n dot v) - return 0.25; - + struct FragInput { + @location(0) uv: vec2, } - fn D_BlinnPhong( shininess:f32, dotNH:f32 )->f32 { - - return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow(dotNH, shininess); - + struct BlurUniforms { + direction:vec2, } - fn BRDF_BlinnPhong( lightDir:vec3, viewDir:vec3, normal:vec3, specularColor:vec3, shininess:f32 )->vec3 { - - let halfDir = normalize( lightDir + viewDir ); - - let dotNH:f32 = saturate( dot( normal, halfDir ) ); - let dotVH:f32 = saturate( dot( viewDir, halfDir ) ); + fn gaussianPdf(x:f32, sigma:f32)->f32 { + return 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma; + } + @group(0) @binding(0) var blurUniforms : BlurUniforms; + @group(0) @binding({{tDiffuseBinding}}) var tDiffuse: texture_2d; + @group(0) @binding({{tSamplerBinding}}) var tSampler: sampler; + @fragment + fn main(input:FragInput) -> @location(0) vec4 { + let invSize:vec2 = vec2(1.0,1.0) / vec2(textureDimensions(tDiffuse)); + let fSigma:f32 =f32(${defines.SIGMA}); + var weightSum:f32 = gaussianPdf(0.0, fSigma); + let baseColor=textureSample(tDiffuse, tSampler, input.uv); + var diffuseSum:vec3 = baseColor.rgb * weightSum; + let uvOffset:vec2 = blurUniforms.direction * invSize; + for( var i : u32 = 1; i < ${defines.KERNEL_RADIUS};i = i + 1 ) { + let x:f32 = f32(i); + let w:f32 = gaussianPdf(x, fSigma); + let sample1:vec3=textureSample(tDiffuse, tSampler, input.uv+ uvOffset*x).rgb; + let sample2:vec3=textureSample(tDiffuse, tSampler, input.uv- uvOffset*x).rgb; + diffuseSum =diffuseSum+ (sample2+sample2)* w; + weightSum += 2.0 * w; + } + diffuseSum/=weightSum; + return vec4(diffuseSum,baseColor.a); + } + `; +} - let F = F_Schlick( specularColor, 1.0, dotVH ); +function LuminosityHigh(defines) { + return ` + struct LuminosityUniforms{ + luminosityThreshold:f32, + smoothWidth:f32, + defaultColor:vec3, + defaultOpacity:f32, + } + struct FragInput { + @location(0) uv: vec2, + }; + @group(0) @binding(0) var luminosityUniforms : LuminosityUniforms; + @group(0) @binding({{tDiffuseBinding}}) var tDiffuse: texture_2d; + @group(0) @binding({{tSamplerBinding}}) var tSampler: sampler; + @fragment + fn main(input:FragInput)-> @location(0) vec4 { - let G:f32 = G_BlinnPhong_Implicit( ); + let texel:vec4 = textureSample(tDiffuse, tSampler, input.uv); - let D = D_BlinnPhong( shininess, dotNH ); + let luma:vec3 = vec3( 0.299,0.587,0.114 ); - return F * ( G * D ); + let v:f32 = dot( texel.xyz, luma ); - } - fn RE_Direct_BlinnPhong( directLight:IncidentLight,geometry:GeometricContext, material:BlinnPhongMaterial )->ReflectedLight{ - var reflectedLight:ReflectedLight; - let dotNL:f32 = saturate(dot(geometry.normal, directLight.direction)); - let irradiance:vec3 = dotNL*directLight.color; + let outputColor:vec4 = vec4( luminosityUniforms.defaultColor.rgb, luminosityUniforms.defaultOpacity ); - reflectedLight.directDiffuse= irradiance * BRDF_Lambert( material.diffuseColor ); + let alpha:f32 = smoothstep( luminosityUniforms.luminosityThreshold, luminosityUniforms.luminosityThreshold + luminosityUniforms.smoothWidth, v ); - reflectedLight.directSpecular= irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength; - return reflectedLight; - } - fn RE_IndirectDiffuse_BlinnPhong( irradiance:vec3, geometry:GeometricContext, material:BlinnPhongMaterial)->ReflectedLight { - var reflectedLight:ReflectedLight; - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); - return reflectedLight; + return mix( outputColor, texel, alpha ); } `; } -function phongUtils(defines) { - return ` - struct BlinnPhongMaterial { - diffuseColor:vec3, - specularColor:vec3, - specularShininess:f32, - specularStrength:f32, - }; - const RECIPROCAL_PI:f32= 0.3183098861837907; - fn pow2( x:f32 )->f32 { return x*x; } - fn pow3( x:f32 )->f32 { return x*x*x; } - fn pow4(x:f32 )->f32 { let x2 = x*x; return x2*x2; } - fn max3( v:vec3 )->f32 { return max( max( v.x, v.y ), v.z ); } - fn average(v:vec3 )->f32 { - let result=vec3( 0.3333333, 0.3333333, 0.3333333); - return dot( v,result ); - } - `; -} - -function skinVertHeader(defines) { - return wgslParseDefines` - #if ${defines.HAS_SKIN} - struct JointsUniform{ - matrixs:array, - } - struct InverseBindMatricesUniform{ - matrixs:array, - } - @binding(${defines.skinJointsBufferBinding}) @group(0) var jointsUniform : JointsUniform; - @binding(${defines.invsBufferBinding}) @group(0) var inverseBindMatricesUniform : InverseBindMatricesUniform; - fn getSkinMatrix(joints: vec4f, weights: vec4f) -> mat4x4 { - let joint0 = jointsUniform.matrixs[u32(joints.x)] * inverseBindMatricesUniform.matrixs[u32(joints.x)]; - let joint1 = jointsUniform.matrixs[u32(joints.y)] * inverseBindMatricesUniform.matrixs[u32(joints.y)]; - let joint2 = jointsUniform.matrixs[u32(joints.z)] * inverseBindMatricesUniform.matrixs[u32(joints.z)]; - let joint3 = jointsUniform.matrixs[u32(joints.w)] * inverseBindMatricesUniform.matrixs[u32(joints.w)]; - - let skinMatrix = joint0 * weights.x + - joint1 * weights.y + - joint2 * weights.z + - joint3 * weights.w; - return skinMatrix; - } - #endif - `; -} -function skinVertMain(defines) { +function FragInput(defines) { return wgslParseDefines` - #if ${defines.HAS_SKIN} - modelMatrix =getSkinMatrix(input.joint0,input.weight0); - vNormalView = normalize((materialUniform.normalMatrix * modelMatrix * vec4(input.normal, 0.0)).xyz); - #endif + struct FragInput { + @builtin(front_facing) frontFacing: bool, + @location(0) worldPos:vec3, + @location(1) normal:vec3, + @location(2) uv:vec2, + @location(3) view: vec3, // Vector from vertex to camera. + @location(4) color: vec4, + @location(5) viewPosition: vec3, + } `; } -function PbrMaterialStruct(defines) { - return wgslParseDefines` - struct MaterialUniform { - modelMatrix: mat4x4, - color: vec3, - opacity:f32, - normalMatrix: mat4x4, - emissive:vec3, - metallic:f32, - roughness:f32, - #if ${defines.USE_NORMALTEXTURE} - normalTextureScale:vec2, - #endif - #if ${defines.USE_AOTEXTURE} - occlusionStrength:f32, - #endif - } - `; -} - -const ShaderChunk = { - light: light, - brdf: brdf, - phongFunction: phongFunction, - phongUtils: phongUtils, - lightCommon: lightCommon, - pbrStruct: pbrStruct, - pbrFunction: pbrFunction, - pbrTexture: pbrTexture, - pbrUtils: pbrUtils, - environment: environment, - blinn_phong: blinn_phong, - getNormal: getNormal, - getTBN: getTBN, - getNormalByNormalTexture: getNormalByNormalTexture, - ibl: ibl, - skinVertMain, - skinVertHeader, - FragInput, - VertexInput, - VertexOutput, - PbrMaterialStruct, - SystemUniform, - instanceVertMain, - instanceVertHeader -}; - -function phongVert(defines) { - return ` - struct VertexOutput { - @builtin(position) position: vec4, - @location(0) uv: vec2, - @location(1) view: vec3, // Vector from vertex to camera. - @location(2) worldPos: vec3, - @location(3) color: vec4, - @location(4) normal: vec3, - @location(5) viewPosition: vec3, - }; - struct MaterialUniform { - modelMatrix: mat4x4, - color: vec3, - opacity:f32, - normalMatrix: mat4x4, - emissive:vec3, - specular:vec3, - shininess:f32, - } - struct SystemUniform { - projectionMatrix: mat4x4, - viewMatrix: mat4x4, - inverseViewMatrix: mat4x4, - cameraPosition: vec3, - }; - - @binding(${defines.phongBinding}) @group(0) var selfUniform : MaterialUniform; - @binding(${defines.cameraBinding}) @group(1) var systemUniform : SystemUniform; - - struct VertexInput { +function VertexInput(defines) { + return wgslParseDefines` + struct VertexInput { @location(${defines.positionLocation}) position: vec3, @location(${defines.normalLocation}) normal: vec3, - @location(${defines.uvLocation}) uv: vec2, - } - @vertex - fn main(input: VertexInput) -> VertexOutput { - var output: VertexOutput; - output.uv = input.uv; - let modelPos=selfUniform.modelMatrix *vec4(input.position,1.0); - output.worldPos = modelPos.xyz/modelPos.w; - let vNormalView = selfUniform.normalMatrix * vec4(input.normal,0.0); - output.normal = vNormalView.xyz; - output.view = systemUniform.cameraPosition.xyz - modelPos.xyz; - let viewPosition=systemUniform.viewMatrix * modelPos; - output.viewPosition = -viewPosition.xyz; - output.position = systemUniform.projectionMatrix * systemUniform.viewMatrix * modelPos; - return output; - }`; + #if${defines.HAS_COLOR} + @location(${defines.colorLocation}) color: vec3, + #endif + #if ${defines.HAS_UV} + @location(${defines.uvLocation}) uv: vec2, + #endif + #if${defines.HAS_SKIN} + @location(${defines.joint0Location}) joint0:vec4, + @location(${defines.weight0Location}) weight0:vec4, + #endif + #if ${defines.USE_INSTANCE} + @builtin(instance_index) instanceIdx : u32 + #endif + } + `; } -function phongFrag(defines) { - return wgslParseDefines` - struct VertInput { - @builtin(position) position: vec4, - @builtin(front_facing) frontFacing: bool, - @location(0) uv: vec2, - @location(1) view: vec3, // Vector from vertex to camera. - @location(2) worldPos: vec3, - @location(3) color: vec4, - @location(4) normal: vec3, - @location(5) viewPosition: vec3, - }; - - struct MaterialUniform { - modelMatrix: mat4x4, - color: vec3, - opacity:f32, - normalMatrix: mat4x4, - emissive:vec3, - shininess:f32, - specular:vec3, - } - struct SystemUniform { - projectionMatrix: mat4x4, - viewMatrix: mat4x4, - inverseViewMatrix: mat4x4, - cameraPosition: vec3, - }; +function VertexOutput(defines) { + return wgslParseDefines` + struct VertexOutput { + @builtin(position) position:vec4, + @location(0) worldPos:vec3, + @location(1) normal:vec3, + @location(2) uv:vec2, + @location(3) view: vec3, // Vector from vertex to camera. + @location(4) color: vec4, + @location(5) viewPosition: vec3, + } + `; +} - #if${defines.USE_COLORTEXTURE} - @group(0) @binding(${defines.baseColorSamplerBinding}) var baseColorSampler: sampler; +function SystemUniform(defines) { + return wgslParseDefines` + struct SystemUniform { + projectionMatrix: mat4x4, + viewMatrix: mat4x4, + inverseViewMatrix: mat4x4, + cameraPosition: vec3, + }; + `; +} + +function TextureAndSamplerDefine(defines) { + return wgslParseDefines` + #if ${defines.USE_IBL} + @group(0) @binding(${defines.specularEnvTextureBinding}) var specularEnvTexture: texture_cube; + @group(0) @binding(${defines.specularEnvSamplerBinding}) var specularEnvSampler: sampler; + #endif + #if ${defines.USE_TEXTURE} @group(0) @binding(${defines.baseColorTextureBinding}) var baseColorTexture: texture_2d; + @group(0) @binding(${defines.baseColorSamplerBinding}) var baseColorSampler: sampler; #endif + // normal map #if ${defines.USE_NORMALTEXTURE} @group(0) @binding(${defines.normalTextureBinding}) var normalTexture: texture_2d; @group(0) @binding(${defines.normalSamplerBinding}) var normalSampler: sampler; #endif - @binding(${defines.phongBinding}) @group(0) var materialUniform : MaterialUniform; - @binding(${defines.cameraBinding}) @group(1) var systemUniform : SystemUniform; + // emmisve map + #if ${defines.USE_EMISSIVETEXTURE} + @group(0) @binding(${defines.emissiveTextureBinding}) var emissiveTexture: texture_2d; + @group(0) @binding(${defines.emissiveSamplerBinding}) var emissiveSampler: sampler; + #endif + + // metal roughness + #if ${defines.USE_METALNESSTEXTURE} + @group(0) @binding(${defines.metalnessRoughnessTextureBinding}) var metalnessRoughnessTexture: texture_2d; + @group(0) @binding(${defines.metalnessRoughnessSamplerBinding}) var metalnessRoughnessSampler: sampler; + #endif + // occlusion texture + #if ${defines.USE_AOTEXTURE} + @group(0) @binding(${defines.aoTextureBinding}) var aoTexture: texture_2d; + @group(0) @binding(${defines.aoSamplerBinding}) var aoSampler: sampler; + #endif #if ${defines.USE_NORMALTEXTURE} #include #include #else - #include + #include #endif - - #include - - @fragment - fn main(input:VertInput) -> @location(0) vec4 { - var totalEmissiveRadiance:vec3 = materialUniform.emissive; - var color:vec4; - #if${defines.USE_COLORTEXTURE} - color= vec4(textureSample(baseColorTexture, baseColorSampler, input.uv).rgb+materialUniform.color,materialUniform.opacity); - #else - color=vec4(materialUniform.color,materialUniform.opacity); - #endif - let V:vec3 = normalize( systemUniform.cameraPosition - input.worldPos); - #if ${defines.USE_NORMALTEXTURE} - let N:vec3 = getNormalByNormalTexture(input); - #else - let N:vec3 = getNormal(input); - #endif - var geometry:Geometry; - geometry.normal=N; - geometry.viewDir=V; - geometry.position=input.worldPos; - let lightColor:ReflectedLight=parseLights(geometry,materialUniform.shininess); - // var finnalColor:vec3=color.xyz + (lightColor.directDiffuse + lightColor.directSpecular + lightColor.ambient); - var finnalColor:vec3=color.xyz * (lightColor.directDiffuse + lightColor.directSpecular + lightColor.ambient); - - // finnalColor = lightColor.testColor.xyz; - - return vec4(finnalColor,color.a); - }`; -} - -// import Color from "../../math/Color"; -function colorFrag(defines) { - return ` - struct VertexOutput { - @builtin(position) position: vec4, - @location(0) color: vec4, - }; - @fragment - fn main(input:VertexOutput) -> @location(0) vec4 { - return input.color; - } - `; + `; } -function colorVert(defines) { - return ` - struct VertexInput { - @location(${defines.positionLocation}) position: vec3, - @location(${defines.colorLocation}) color: vec4, - } - struct VertexOutput { - @builtin(position) position: vec4, - @location(0) color: vec4, - }; - struct SelfUniform { - modelMatrix: mat4x4, - } - struct SystemUniform { - projectionMatrix: mat4x4, - viewMatrix: mat4x4, - inverseViewMatrix: mat4x4, - cameraPosition: vec3, - }; - @binding(${defines.colorBinding}) @group(0) var selfUniform : SelfUniform; - @binding(${defines.cameraBinding}) @group(1) var systemUniform : SystemUniform; - @vertex - fn main(input: VertexInput) -> VertexOutput { - var output:VertexOutput; - output.color=input.color; - output.position = systemUniform.projectionMatrix * systemUniform.viewMatrix *selfUniform.modelMatrix*vec4(input.position,1.0); - return output; - } +function environment(defines) { + return wgslParseDefines` + #if ${defines.ENVTEXTURE_TYPE_CUBE_UV} + const cubeUV_minMipLevel:f32= 4.0; + const cubeUV_minTileSize:f32= 16.0; + const CUBEUV_MAX_MIP:f32=6.0; + const CUBEUV_TEXEL_WIDTH:f32=1.0/256.0; + const CUBEUV_TEXEL_HEIGHT:f32=1.0/256.0; + fn getFace(direction:vec3 )->f32 { + let absDirection:vec3 = abs( direction ); + var face:f32 = - 1.0; + if ( absDirection.x > absDirection.z ) { + if ( absDirection.x > absDirection.y ){ + face =select(3.0,0.0,direction.x > 0.0); + }else{ + face =select(4.0,1.0,direction.y > 0.0); + } + + } + else { + if ( absDirection.z > absDirection.y ){ + face =select(5.0,2.0,direction.z > 0.0); + }else{ + face =select(4.0,1.0,direction.y > 0.0); + } + } + return face; + } + fn getUV( direction:vec3, face:f32 )->vec2 { + var uv:vec2; + if ( face == 0.0 ) { + uv = vec2( direction.z, direction.y ) / abs( direction.x ); + } + else if ( face == 1.0 ) { + uv = vec2( - direction.x, - direction.z ) / abs( direction.y ); + } + else if ( face == 2.0 ) { + uv = vec2( - direction.x, direction.y ) / abs( direction.z ); + } + else if ( face == 3.0 ) { + uv = vec2( - direction.z, direction.y ) / abs( direction.x ); + } + else if ( face == 4.0 ) { + uv = vec2( - direction.x, direction.z ) / abs( direction.y ); + } + else { + uv = vec2( direction.x, direction.y ) / abs( direction.z ); + } + return 0.5 * ( uv + 1.0 ); + } + fn bilinearCubeUV(envTexture:texture_cube,baseSampler:sampler,direction:vec3, mipInt:f32 )->vec3 { + var face:f32 = getFace( direction ); + let filterInt:f32 = max( cubeUV_minMipLevel - mipInt, 0.0 ); + let tempMipInt = max( mipInt, cubeUV_minMipLevel ); + let faceSize:f32 = exp2( tempMipInt ); + var uv:vec2 = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0; + if ( face > 2.0 ) { + uv.y += faceSize; + face -= 3.0; + } + uv.x += face * faceSize; + uv.x += filterInt * 3.0 * cubeUV_minTileSize; + uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize ); + uv.x *= CUBEUV_TEXEL_WIDTH; + uv.y *= CUBEUV_TEXEL_HEIGHT; + return textureSample(envTexture,baseSampler,direction).rgb; + } + const cubeUV_r0:f32= 1.0; + const cubeUV_v0:f32= 0.339; + const cubeUV_m0:f32= - 2.0; + const cubeUV_r1:f32= 0.8; + const cubeUV_v1:f32= 0.276; + const cubeUV_m1:f32= - 1.0; + const cubeUV_r4:f32= 0.4; + const cubeUV_v4:f32= 0.046; + const cubeUV_m4:f32= 2.0; + const cubeUV_r5:f32= 0.305; + const cubeUV_v5:f32= 0.016; + const cubeUV_m5:f32= 3.0; + const cubeUV_r6:f32= 0.21; + const cubeUV_v6:f32= 0.0038; + const cubeUV_m6:f32= 4.0; + fn roughnessToMip( roughness:f32)->f32 { + var mip:f32 = 0.0; + if ( roughness >= cubeUV_r1 ) { + mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0; + } + else if ( roughness >= cubeUV_r4 ) { + mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1; + } + else if ( roughness >= cubeUV_r5 ) { + mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4; + } + else if ( roughness >= cubeUV_r6 ) { + mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5; + } + else { + mip = - 2.0 * log2( 1.16 * roughness ); + } + return mip; + } + fn textureCubeUV(envTexture:texture_cube, baseSampler:sampler,sampleDir:vec3,roughness:f32 )->vec4 { + let mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP ); + let mipF = fract( mip ); + let mipInt = floor( mip ); + let color0:vec3 = bilinearCubeUV( envTexture,baseSampler,sampleDir, mipInt ); + if ( mipF == 0.0 ) { + return vec4(color0, 1.0 ); + } + else { + let color1:vec3 = bilinearCubeUV( envTexture,baseSampler, sampleDir, mipInt + 1.0 ); + return vec4(mix( color0, color1, mipF ), 1.0 ); + } + + } + #endif + #if ${defines.USE_ENVTEXTURE} + fn getIBLIrradiance( normal:vec3,baseSampler:sampler,viewMatrix:mat4x4)->vec3 { + #if ${defines.ENVTEXTURE_TYPE_CUBE_UV} + let worldNormal:vec3 = inverseTransformDirection( normal, viewMatrix ); + let envTextureColor:vec4 = textureCubeUV( envTexture,baseSampler, worldNormal, 1.0 ); + return PI * envTextureColor.rgb * materialUniform.envTextureIntensity; + #else + return vec3( 0.0 ); + #endif + } + fn getIBLRadiance( viewDir:vec3,baseSampler:sampler,viewMatrix:mat4x4,normal:vec3, roughness:f32 )->vec3 { + #if ${defines.ENVTEXTURE_TYPE_CUBE_UV} + var reflectVec:vec3 = reflect( - viewDir, normal ); + reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) ); + reflectVec = inverseTransformDirection( reflectVec, viewMatrix ); + let envTextureColor:vec4 = textureCubeUV( envTexture,baseSampler, reflectVec, roughness ); + return envTextureColor.rgb * materialUniform.envTextureIntensity; + #else + return vec3( 0.0 ); + #endif + } + #endif `; } -function pbrFrag(defines) { +function instanceVertHeader(defines) { return wgslParseDefines` - #include - #include - #include - #include - #include - #include - #include - #include - struct SystemUniform { - projectionMatrix: mat4x4, - viewMatrix: mat4x4, - inverseViewMatrix: mat4x4, - cameraPosition: vec3, - }; - // uniform vec3 lightProbe[9], -//////////////////////////////////// -struct VertexOutput { - @builtin(position) position: vec4, - @builtin(front_facing) is_front: bool, - @location(0) vUv: vec2, - @location(1) vViewPosition: vec3, // Vector from vertex to camera. - @location(2) vWorldPosition: vec3, - @location(3) vNormal: vec3, - // 可选 - #if ${defines.USE_LIGHTTEXTURE || defines.USE_AOTEXTURE} - @location(${defines.vUv2OutLocation}) vUv2: vec2, - #endif - - #if ${defines.USE_COLOR_ALPHA} - @location(${defines.vColorOutLocation}) vColor: vec4, - #elif ${defines.USE_COLOR || defines.USE_INSTANCING_COLOR} - @location(${defines.vColorOutLocation}) vColor: vec3, - #endif - - #if ${defines.USE_TANGENT} - @location(${defines.vTangentOutLocation}) vTangent: vec3, - @location(${defines.vBitangentOutLocation}) vBitangent: vec3, + #if ${defines.USE_INSTANCE} + struct InstancesUniform { + instanceMatrixs: array, ${defines.instanceCount}>, + }; + @group(0) @binding(${defines.instanceMatrixsBufferBinding}) var instancesUniform: InstancesUniform; #endif -}; - struct PhysicalMaterial { - diffuseColor:vec3, - roughness:f32, - specularColor:vec3, - specularF90:f32, - #if ${defines.USE_CLEARCOAT} - clearcoat:f32, - clearcoatRoughness:f32, - clearcoatF0:vec3, - clearcoatF90:f32, - #endif + `; +} +function instanceVertMain(defines) { + return wgslParseDefines` + #if ${defines.USE_INSTANCE} + modelMatrix=instancesUniform.instanceMatrixs[input.instanceIdx]; + #endif + `; +} - #if ${defines.USE_IRIDESCENCE} - iridescence:f32, - iridescenceIOR:f32, - iridescenceThickness:f32, - iridescenceFresnel:vec3, - iridescenceF0:vec3, - #endif +function light(defines) { + return wgslParseDefines` + struct ReflectedLight { + ambient: vec3, + directDiffuse:vec3, + directSpecular:vec3, + indirectDiffuse:vec3, + indirectSpecular:vec3, + testColor: vec3, + }; + struct IncidentLight { + color: vec3, + direction: vec3, + visible: bool, + }; + struct Geometry { + position: vec3, + normal: vec3, + viewDir: vec3, + dotNV:f32, + #if ${defines.USE_CLEARCOAT} + vec3 clearcoatNormal; + #endif + }; - #if ${defines.USE_SHEEN} - sheenColor:vec3, - sheenRoughness:f32, - #endif + #if ${defines.spotLightsCount > 0} + struct SpotLight { + position: vec3, + distance: f32, + direction: vec3, + coneCos: f32, + color: vec3, + penumbraCos: f32, + decay: f32, + }; + fn getSpotLightInfo(spotLight:SpotLight,worldPos:vec3,shininess:f32,N:vec3,V:vec3)->ReflectedLight{ + var direction:vec3 = spotLight.position - worldPos; + var lightColor:ReflectedLight; + let lightDistance:f32 = length(direction); + direction = normalize(direction); + let angleCos:f32 = dot( direction, spotLight.direction ); + let decay:f32 = clamp(1.0 - pow(lightDistance/spotLight.distance, spotLight.decay), 0.0, 1.0); + let spotEffect:f32 = smoothstep( spotLight.penumbraCos, spotLight.coneCos, angleCos ); + let decayTotal:f32 = decay * spotEffect; + let d:f32 = max( dot( N, direction ), 0.0 ) * decayTotal; + lightColor.directDiffuse= spotLight.color * d; + let halfDir:vec3 = normalize( V + direction ); + let s:f32 = pow( clamp( dot( N, halfDir ), 0.0, 1.0 ), shininess ) * decayTotal; + lightColor.directSpecular= spotLight.color * s; + return lightColor; + } + fn getSpotLightIncidentLight(spotLight:SpotLight, geometry:Geometry)->IncidentLight { + var incidentLight:IncidentLight; + let lVector:vec3 = spotLight.position - geometry.position; + incidentLight.direction = normalize( lVector ); + + let lightDistance:f32 = length( lVector ); + let angleCos:f32 = dot( incidentLight.direction, spotLight.direction ); + + let spotEffect:f32 = smoothstep( spotLight.penumbraCos, spotLight.coneCos, angleCos ); + let decayEffect:f32 = clamp(1.0 - pow(lightDistance/spotLight.distance, 4.0), 0.0, 1.0); + + incidentLight.color=spotLight.color*spotEffect * decayEffect; + return incidentLight; + } - #if ${defines.IOR} - ior:f32, - #endif + #endif - #if ${defines.USE_TRANSMISSION} - transmission:f32, - transmissionAlpha:f32, - thickness:f32, - attenuationDistance:f32, - attenuationColor:vec3, - #endif + #if ${defines.pointLightsCount > 0} + struct PointLight { + position: vec3, + distance: f32, + color: vec3, + decay: f32, }; -@binding(0) @group(0) var materialUniform : MaterialUniform; -@binding(0) @group(1) var systemUniform : SystemUniform; -@fragment -fn main(input:VertexOutput)-> @location(0) vec4 { - var diffuseColor:vec4 = vec4(materialUniform.diffuse, materialUniform.opacity ); - // ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - var reflectedLight:ReflectedLight; - var totalEmissiveRadiance:vec3 = materialUniform.emissive; - #if ${defines.USE_TEXTURE} - var sampledDiffuseColor:vec4 =textureSample(baseTexture, baseSampler, input.vUv); - #if ${defines.DECODE_VIDEO_TEXTURE} - sampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w ); - #endif + fn getPointLightInfo(pointLight:PointLight,worldPos:vec3,shininess:f32,N:vec3,V:vec3)->ReflectedLight{ + var lightColor:ReflectedLight; + var direction:vec3 = worldPos - pointLight.position; + let dist:f32 = length( direction ); + direction = normalize(direction); + let decay = clamp(1.0 - pow(dist / pointLight.distance, pointLight.decay), 0.0, 1.0); + + let d = max( dot( N, -direction ), 0.0 ) * decay; + lightColor.directDiffuse = pointLight.color * d; + + let halfDir:vec3 = normalize( V - direction ); + let s:f32 = pow( clamp( dot( N, halfDir ), 0.0, 1.0 ), shininess ) * decay; + lightColor.directSpecular = pointLight.color * s; + return lightColor; + } + fn getPointLightIncidentLight(pointLight:PointLight, geometry:Geometry)->IncidentLight { + var incidentLight:IncidentLight; + let lVector:vec3 = pointLight.position-geometry.position; + incidentLight.direction= normalize( lVector ); + let lightDistance:f32 = length( lVector ); + // let weight:f32=1.0 - pow(lightDistance/pointLight.distance, 4.0); + incidentLight.color=pointLight.color*clamp(1.0 - pow(lightDistance/pointLight.distance, 4.0), 0.0, 1.0); + return incidentLight; + } + #endif + #if ${defines.dirtectLightsCount > 0} + struct DirectionalLight { + direction: vec3, + color: vec3, + }; + fn getDirectLightInfo(directionalLight:DirectionalLight,shininess:f32,N:vec3,V:vec3)->ReflectedLight{ + var lightColor:ReflectedLight; + let d:f32 = max(dot(N, -directionalLight.direction), 0.0); + lightColor.directDiffuse += directionalLight.color * d; + + let halfDir:vec3 = normalize( V - directionalLight.direction ); + let s:f32 = pow( clamp( dot( N, halfDir ), 0.0, 1.0 ), shininess ); + lightColor.directSpecular += directionalLight.color * s; + return lightColor; + } + fn getDirectionalDirectLightIncidentLight(directionalLight:DirectionalLight,geometry:Geometry)->IncidentLight { + var incidentLight:IncidentLight; + incidentLight.color = directionalLight.color; + incidentLight.direction = normalize(directionalLight.direction); + return incidentLight; + } + #endif - diffuseColor *= sampledDiffuseColor; - #endif + #if ${defines.openShadow} + struct LightInfo { + direction: vec3, + viewport: vec4, + }; + + fn linearizeDepth(depth: f32, near: f32, far: f32)->f32 { + return 2 * (near * far) / (far + near - depth * (far - near)); + } - var roughnessFactor:f32 = materialUniform.roughness; - - #if ${defines.USE_ROUGHNESSTEXTURE} - let texelRoughness:vec4=textureSample(roughnessTexture, baseSampler, input.vUv); - roughnessFactor *= texelRoughness.g; - #endif + fn getCubeFace(v : vec3) -> i32{ + let vAbs = abs(v); + + if (vAbs.z >= vAbs.x && vAbs.z >= vAbs.y) { + if (v.z < 0.0) { + return 3; + } + return 2; + } + + if (vAbs.y >= vAbs.x) { + if (v.y < 0.0) { + return 5; + } + return 4; + } + + if (v.x < 0.0) { + return 1; + } + return 0; + } - var metalnessFactor:f32 = materialUniform.metalness; - - #if ${defines.USE_METALNESSTEXTURE} - let texelMetalness:vec4 =textureSample(metalnessTexture, baseSampler, input.vUv); - metalnessFactor *= texelMetalness.b; - #endif + fn getShadowValue(shadowMapArray:texture_depth_2d_array, shadowSampler:sampler_comparison, lightPos:vec4, geometry:Geometry, lightInfo:LightInfo, index:u32, isPointLight: bool, near: f32, far: f32)->f32 { + var visibility = 0.0; + var projectPos: vec3 = lightPos.xyz / lightPos.w; + var shadowPos: vec3 = vec3(projectPos.xy * vec2(0.5, -0.5) + vec2(0.5), projectPos.z); + var d:f32 = dot(geometry.normal, -lightInfo.direction); + var bias = max(0.012 * (1.0 - d), 0.001) / lightPos.w; + let oneOverShadowDepthTextureSize = 1.0 / 1024.0; + // var depth = select(shadowPos.z, (linearizeDepth(shadowPos.z, near, far) - near) / (far- near), isPerspectiveCamera); + var depth = shadowPos.z; - let faceDirection:f32 =select(-1.0,1.0,input.is_front); - #if ${defines.FLAT_SHADED} - let fdx:vec3 = dpdx( input.vViewPosition ); - let fdy:vec3 = dpdy( input.vViewPosition ); - let normal:vec3 = normalize( cross( fdy, fdx ) ); - #else - let normal:vec3 = normalize( input.vNormal ); - #if ${defines.DOUBLE_SIDED} - normal = normal * faceDirection; + if (isPointLight) { + shadowPos.x = shadowPos.x * lightInfo.viewport.z; + shadowPos.y = shadowPos.y * lightInfo.viewport.w; + var viewportX = lightInfo.viewport.x * lightInfo.viewport.z; + var viewportY = lightInfo.viewport.y * lightInfo.viewport.w; + var uvOffset = 1.5 / 1024.0; + shadowPos.x = clamp(shadowPos.x + viewportX, viewportX + uvOffset, viewportX + lightInfo.viewport.z - uvOffset); + shadowPos.y = clamp(shadowPos.y + viewportY, viewportY + uvOffset, viewportY + lightInfo.viewport.w - uvOffset); + } + + for (var y = -1; y <= 1; y++) { + for (var x = -1; x <= 1; x++) { + let offset = vec2(vec2(x, y)) * oneOverShadowDepthTextureSize; + + visibility += textureSampleCompare( + shadowMapArray, shadowSampler, + shadowPos.xy + offset, index, depth - bias); + } + } + visibility /= 9.0; + var inFrustum = shadowPos.x >= 0.0 && shadowPos.x <= 1.0 && shadowPos.y >= 0.0 && shadowPos.y <= 1.0; + if (!inFrustum || depth > 1.0) { + visibility = 1.0; + } + return visibility; + } + #endif + + #if ${ + defines.ambientLightCount || defines.spotLightsCount || defines.pointLightsCount || defines.dirtectLightsCount + } + struct LightUniforms{ + #if ${defines.ambientLightCount} + ambient:vec4, #endif - #if ${defines.USE_TANGENT} - let tangent:vec3 = normalize( input.vTangent ); - let bitangent:vec3 = normalize( input.vBitangent ); - #if ${defines.DOUBLE_SIDED} - tangent = tangent * faceDirection; - bitangent = bitangent * faceDirection; - #endif - #if ${defines.TANGENTSPACE_NORMALTEXTURE || defines.USE_CLEARCOAT_NORMALTEXTURE} - let vTBN:mat3x3 = mat3x3( tangent, bitangent, normal ); - #endif + #if ${defines.spotLightsCount} + spotLights:array, #endif - #endif - - let geometryNormal:vec3 = normal; - - #if ${defines.OBJECTSPACE_NORMALTEXTURE} - normal =textureSample(normalTexture, baseSampler, input.vUv).xyz * 2.0 - 1.0; - #if ${defines.FLIP_SIDED} - normal = - normal; + #if ${defines.pointLightsCount} + pointLights:array, #endif - #if ${defines.DOUBLE_SIDED} - normal = normal * faceDirection; + #if ${defines.dirtectLightsCount} + dirtectLights:array, #endif + } + @group(2) @binding(${defines.lightBinding}) var lightUniforms: LightUniforms; - normal = normalize(materialUniform.normalMatrix * normal ); - - #elif ${defines.TANGENTSPACE_NORMALTEXTURE} - let tempMapN:vec3 =textureSample(normalTexture, baseSampler, input.vUv).xyz * 2.0 - 1.0; - let mapN:vec3 =tempMapN.xy *= materialUniform.normalScale; - #if ${defines.USE_TANGENT} - normal = normalize( vTBN * mapN ); - #else - normal = perturbNormal2Arb( - input.vViewPosition, normal, mapN, faceDirection ); + #if ${defines.openShadow} + #if ${defines.spotLightShadowMapsCount} + struct SpotLightShadow { + shadowCameraVPMatrix: mat4x4, + shadowCameraNear: f32, + shadowCameraFar: f32 + } #endif - - #elif ${defines.USE_BUMPTEXTURE} - - normal = perturbNormalArb( - input.vViewPosition, normal, dHdxy_fwd(), faceDirection ); - #endif - - #if ${defines.USE_CLEARCOAT} - var clearcoatNormal:vec3 = geometryNormal; - #endif - #if ${defines.USE_CLEARCOAT_NORMALTEXTURE} - var clearcoatMapN:vec3 =textureSample(clearcoatNormalTexture, baseSampler, input.vUv).xyz * 2.0 - 1.0; - clearcoatMapN.xy *= materialUniform.clearcoatNormalScale; - #if ${defines.USE_TANGENT} - clearcoatNormal = normalize( vTBN * clearcoatMapN ); - #else - clearcoatNormal = perturbNormal2Arb( - input.vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection ); + #if ${defines.pointLightShadowMapsCount} + struct PointLightShadow { + shadowCameraVPMatrixArray: array, 6>, + shadowCameraViewportArray: array, 6>, + shadowCameraNear: f32, + shadowCameraFar: f32, + // shadowCameraVPMatrix: mat4x4, + // shadowCameraVPMatrixArray: array, 6>, + // shadowCameraViewportArray: array, 6>, + } #endif - #endif - #if ${defines.USE_EMISSIVETEXTURE} - let emissiveColor:vec4 =textureSample(emissiveTexture, baseSampler, input.vUv); - totalEmissiveRadiance *= emissiveColor.rgb; - #endif - - var material:PhysicalMaterial; - material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor ); - let dxy:vec3 = max( abs( dpdx( geometryNormal ) ), abs( dpdy( geometryNormal ) ) ); - let geometryRoughness:f32 = max( max( dxy.x, dxy.y ), dxy.z ); - material.roughness = max( roughnessFactor, 0.0525 ); - material.roughness += geometryRoughness; - material.roughness = min( material.roughness, 1.0 ); - - #if ${defines.IOR} - material.ior = materialUniform.ior; - #if ${defines.SPECULAR} - let specularIntensityFactor:f32 = materialUniform.specularIntensity; - let specularColorFactor:vec3 = materialUniform.specularColor; - #if ${defines.USE_SPECULARINTENSITYTEXTURE} - specularIntensityFactor *=textureSample(specularIntensityTexture, baseSampler, input.vUv).a; + #if ${defines.directLightShadowMapsCount} + struct DirectLightShadow { + shadowCameraVPMatrix: mat4x4, + } + #endif + struct ShadowUniforms{ + #if ${defines.spotLightShadowMapsCount} + spotLightShadows:array, #endif - - #if ${defines.USE_SPECULARCOLORTEXTURE} - specularColorFactor *=textureSample(specularColorTexture, baseSampler, input.vUv).rgb; + #if ${defines.pointLightShadowMapsCount} + pointLightShadows:array, + #endif + #if ${defines.directLightShadowMapsCount} + directLightShadows:array, #endif + } + @group(2) @binding(${defines.shadowBinding}) var shadowUniforms: ShadowUniforms; - material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor ); - #else - let specularIntensityFactor:f32 = 1.0; - let specularColorFactor:vec3 = vec3( 1.0 ); - material.specularF90 = 1.0; - #endif - material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor ); - #else - material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor ); - material.specularF90 = 1.0; - #endif - #if ${defines.USE_CLEARCOAT} - material.clearcoat = materialUniform.clearcoat; - material.clearcoatRoughness = materialUniform.clearcoatRoughness; - material.clearcoatF0 = vec3( 0.04 ); - material.clearcoatF90 = 1.0; - #if ${defines.USE_CLEARCOATTEXTURE} - material.clearcoat *=textureSample(clearcoatTexture, baseSampler, input.vUv).x; - #endif - #if ${defines.USE_CLEARCOAT_ROUGHNESSTEXTURE} - material.clearcoatRoughness *=textureSample(clearcoatRoughnessTexture, baseSampler, input.vUv).y; - #endif - material.clearcoat = saturate( material.clearcoat ); - material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 ); - material.clearcoatRoughness += geometryRoughness; - material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 ); - #endif - #if ${defines.USE_IRIDESCENCE} - material.iridescence = materialUniform.iridescence; - material.iridescenceIOR = materialUniform.iridescenceIOR; - #if ${defines.USE_IRIDESCENCETEXTURE} - material.iridescence *=textureSample(iridescenceTexture, baseSampler, input.vUv).r; - #endif - #if ${defines.USE_IRIDESCENCE_THICKNESSTEXTURE} - material.iridescenceThickness = (materialUniform.iridescenceThicknessMaximum - materialUniform.iridescenceThicknessMinimum) * textureSample(iridescenceThicknessTexture, baseSampler, input.vUv).g + materialUniform.iridescenceThicknessMinimum; - #else - material.iridescenceThickness = materialUniform.iridescenceThicknessMaximum; + #if ${defines.spotLightShadowMapTextureArrayBinding} + @group(2) @binding(${ + defines.spotLightShadowMapTextureArrayBinding + }) var spotLightShadowMapTextureArray: texture_depth_2d_array; #endif - #endif - #if ${defines.USE_SHEEN} - material.sheenColor = materialUniform.sheenColor; - #if ${defines.USE_SHEENCOLORTEXTURE} - material.sheenColor *=textureSample(sheenColorTexture, baseSampler, input.vUv).rgb; + #if ${defines.pointLightShadowMapTextureArrayBinding} + @group(2) @binding(${ + defines.pointLightShadowMapTextureArrayBinding + }) var pointLightShadowMapTextureArray: texture_depth_2d_array; #endif - material.sheenRoughness = clamp( materialUniform.sheenRoughness, 0.07, 1.0 ); - #if ${defines.USE_SHEENROUGHNESSTEXTURE} - material.sheenRoughness *=textureSample(sheenRoughnessTexture, baseSampler, input.vUv).a; + #if ${defines.directLightShadowMapTextureArrayBinding} + @group(2) @binding(${ + defines.directLightShadowMapTextureArrayBinding + }) var directLightShadowMapTextureArray: texture_depth_2d_array; #endif + @group(2) @binding(${defines.shadowSamplerBinding}) var shadowSampler: sampler_comparison; #endif - - var geometry:GeometricContext; - geometry.position = - input.vViewPosition; - geometry.normal = normal; - // geometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( input.vViewPosition ); - geometry.viewDir = normalize( input.vViewPosition); - #if ${defines.USE_CLEARCOAT} - geometry.clearcoatNormal = clearcoatNormal; + #endif + #if ${defines.materialPhong} + fn parseLights(geometry:Geometry,shininess:f32)->ReflectedLight { + #elif ${defines.materialPbr} + fn parseLights(geometry:Geometry,material:PhysicalMaterial)->ReflectedLight{ + #endif + var reflectedLight:ReflectedLight; + var shadowValue:f32 = 1.0; + #if ${defines.ambientLightCount > 0} + //处理环境光 + var ambientColor:vec3 = lightUniforms.ambient.xyz * lightUniforms.ambient.w; + reflectedLight.ambient += ambientColor; #endif - #if ${defines.USE_IRIDESCENCE} - let dotNVi:f32 = saturate( dot( normal, geometry.viewDir ) ); - if ( material.iridescenceThickness == 0.0 ) { - material.iridescence = 0.0; - } - else { - material.iridescence = saturate( material.iridescence ); - } - if ( material.iridescence > 0.0 ) { - material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor ); - material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi ); + #if ${defines.spotLightsCount > 0} + //处理聚光灯 + var spotLight:SpotLight; + for (var k = 0u; k < ${defines.spotLightsCount}; k = k + 1u) { + spotLight= lightUniforms.spotLights[k]; + #if ${defines.materialPhong && defines.openShadow && defines.spotLightShadowMapsCount} + if k < textureNumLayers(spotLightShadowMapTextureArray) { + var spotLightShadow:SpotLightShadow = shadowUniforms.spotLightShadows[k]; + var lightPos: vec4 = spotLightShadow.shadowCameraVPMatrix * vec4(geometry.position,1.0); + var lightInfo:LightInfo; + lightInfo.direction = normalize(geometry.position - spotLight.position); + + shadowValue = getShadowValue(spotLightShadowMapTextureArray, shadowSampler, lightPos, geometry, lightInfo, k, false, + spotLightShadow.shadowCameraNear, spotLightShadow.shadowCameraFar); + } + spotLight.color *= shadowValue; + #endif + #if ${defines.materialPhong} + let spReflectedLight=getSpotLightInfo(spotLight,geometry.position,shininess,geometry.normal,geometry.viewDir); + #elif ${defines.materialPbr} + let incidentLight=getSpotLightIncidentLight(spotLight,geometry); + let spReflectedLight=direct_Physical(incidentLight, geometry, material); + #endif + + reflectedLight.directDiffuse+=spReflectedLight.directDiffuse; + reflectedLight.directSpecular+=spReflectedLight.directSpecular; } #endif + #if ${defines.pointLightsCount > 0} + //处理点光源 + var pointLight:PointLight; + for (var j = 0u; j < ${defines.pointLightsCount};j = j + 1u) { + pointLight = lightUniforms.pointLights[j]; + #if ${defines.materialPhong && defines.openShadow && defines.pointLightShadowMapsCount} + if j < textureNumLayers(pointLightShadowMapTextureArray) { + var pointLightShadow:PointLightShadow = shadowUniforms.pointLightShadows[j]; + var lightInfo:LightInfo; + lightInfo.direction = normalize(geometry.position - pointLight.position); + var cubeFace = getCubeFace(lightInfo.direction); + var lightPos: vec4 = pointLightShadow.shadowCameraVPMatrixArray[cubeFace] * vec4(geometry.position,1.0); + lightInfo.viewport = pointLightShadow.shadowCameraViewportArray[cubeFace]; - var iblIrradiance:vec3 = vec3( 0.0 ); - var irradiance:vec3 = getAmbientLightIrradiance(commonLightsParms.ambient); - //irradiance += getLightProbeIrradiance( lightProbe, geometry.normal,systemUniform.viewMatrix ); + // var lightPos: vec4 = pointLightShadow.shadowCameraVPMatrix * vec4(geometry.position,1.0); - var radiance:vec3 = vec3( 0.0 ); - var clearcoatRadiance:vec3 = vec3( 0.0 ); + shadowValue = getShadowValue(pointLightShadowMapTextureArray, shadowSampler, lightPos, geometry, lightInfo, j, true, + pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar); + + // reflectedLight.testColor = vec3(pointLightShadow.shadowCameraFar / 1000, + // pointLightShadow.shadowCameraVPMatrixArray[5][3][2] / 255, pointLightShadow.shadowCameraVPMatrixArray[5][3][3] / 255); + // reflectedLight.testColor = vec3(pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraNear); + } + pointLight.color *= shadowValue; + #endif + #if ${defines.materialPhong} + let poiReflectedLight=getPointLightInfo(pointLight,geometry.position,shininess,geometry.normal,geometry.viewDir); + #elif ${defines.materialPbr} + let incidentLight=getPointLightIncidentLight(pointLight,geometry); + let poiReflectedLight=direct_Physical(incidentLight, geometry, material); + #endif - #if ${defines.USE_LIGHTTEXTURE} - let lightMapTexel:vec4 =textureSample(lightTexture, baseSampler, input.vUv2); - let lightMapIrradiance:vec3 = lightMapTexel.rgb * materialUniform.lightTextureIntensity; - irradiance += lightMapIrradiance; + reflectedLight.directDiffuse+=poiReflectedLight.directDiffuse; + reflectedLight.directSpecular+=poiReflectedLight.directSpecular; + } #endif - //&& defines.STANDARD&&defines.ENVTEXTURE_TYPE_CUBE_UV - #if ${defines.USE_ENVTEXTURE} - iblIrradiance += getIBLIrradiance( geometry.normal,baseSampler,systemUniform.viewMatrix ); + #if ${defines.dirtectLightsCount > 0} + //处理方向光 + var directionalLight:DirectionalLight; + for (var i= 0u; i <${defines.dirtectLightsCount}; i = i + 1u) { + directionalLight = lightUniforms.dirtectLights[i]; + #if ${defines.materialPhong && defines.openShadow && defines.directLightShadowMapsCount} + if i < textureNumLayers(directLightShadowMapTextureArray) { + var directLightShadow:DirectLightShadow = shadowUniforms.directLightShadows[i]; + var lightPos: vec4 = directLightShadow.shadowCameraVPMatrix * vec4(geometry.position,1.0); + var lightInfo:LightInfo; + lightInfo.direction = directionalLight.direction; + + shadowValue = getShadowValue(directLightShadowMapTextureArray, shadowSampler, lightPos, geometry, lightInfo, i, false, 0, 0); + } + directionalLight.color *= shadowValue; + #endif + + #if ${defines.materialPhong} + let dirReflectedLight=getDirectLightInfo(directionalLight,shininess,geometry.normal,geometry.viewDir); + #elif ${defines.materialPbr} + let incidentLight=getDirectionalDirectLightIncidentLight(directionalLight,geometry); + let dirReflectedLight=direct_Physical(incidentLight, geometry, material); + #endif + + reflectedLight.directDiffuse+=dirReflectedLight.directDiffuse; + reflectedLight.directSpecular+=dirReflectedLight.directSpecular; + } #endif - #if ${defines.USE_ENVTEXTURE} - radiance += getIBLRadiance( geometry.viewDir,baseSampler,systemUniform.viewMatrix, geometry.normal, materialUniform.roughness ); - #if ${defines.USE_CLEARCOAT} - clearcoatRadiance += getIBLRadiance( geometry.viewDir,baseSampler,systemUniform.viewMatrix, geometry.clearcoatNormal, material.clearcoatRoughness ); - #endif + return reflectedLight; + }`; +} + +function lightCommon(defines) { + return wgslParseDefines` + struct ReflectedLight { + directDiffuse:vec3, + directSpecular:vec3, + indirectDiffuse:vec3, + indirectSpecular:vec3, + }; + struct Geometry { + position: vec3, + normal: vec3, + viewDir: vec3, + #if ${defines.USE_CLEARCOAT} + vec3 clearcoatNormal; #endif - //直接光照 - let dirReflectedLight:ReflectedLight= parseLights(geometry,material); - reflectedLight.directDiffuse +=dirReflectedLight.directDiffuse; - reflectedLight.directSpecular +=dirReflectedLight.directSpecular; - //间接漫反射 - let indirectDiffuseLight:ReflectedLight= RE_IndirectDiffuse_Physical( irradiance, geometry, material); - reflectedLight.directDiffuse +=indirectDiffuseLight.indirectDiffuse; - reflectedLight.directSpecular +=indirectDiffuseLight.indirectSpecular; - //间接高光 - let indirectSpecularLight:ReflectedLight=RE_IndirectSpecular_Physical( radiance, iblIrradiance, clearcoatRadiance, geometry, material); - reflectedLight.directDiffuse +=indirectSpecularLight.indirectDiffuse; - reflectedLight.directSpecular +=indirectSpecularLight.indirectSpecular; - //环境光遮蔽 - #if ${defines.USE_AOTEXTURE} - let ambientOcclusion:f32 = (textureSample(aoTexture, baseSampler, input.vUv2).r - 1.0 ) * materialUniform.aoTextureIntensity + 1.0; + }; + fn getAmbientLightIrradiance(ambientLightColor: vec3) -> vec3 { + let irradiance = ambientLightColor; + return irradiance; + } + fn getDistanceAttenuation(lightDistance: f32, cutoffDistance: f32, decayExponent: f32) -> f32 { + if (cutoffDistance > 0.0 && decayExponent > 0.0) { + let x:f32 = saturate(- lightDistance / cutoffDistance + 1.0); + return pow(x, decayExponent); + } + return 1.0; + } + fn getSpotAttenuation(coneCosine: f32, penumbraCosine: f32, angleCosine: f32) -> f32 { + return smoothstep(coneCosine, penumbraCosine, angleCosine); + } + fn shGetIrradianceAt( normal:vec3, shCoefficients:array,9>)->vec3 { + let x:f32 = normal.x; + let y:f32 = normal.y; + let z:f32 = normal.z; + var result:vec3 = shCoefficients[ 0 ] * 0.886227; + result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y; + result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z; + result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x; + result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y; + result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z; + result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 ); + result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z; + result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y ); + return result; + } + fn inverseTransformDirection( dir:vec3, matrix:mat4x4 )->vec3 { + return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz ); + } + `; +} - reflectedLight.indirectDiffuse *= ambientOcclusion; - //&&defines.STANDARD - #if ${defines.USE_ENVTEXTURE} - let dotNV:f32 = saturate( dot( geometry.normal, geometry.viewDir ) ); - reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness ); - #endif +function getNormal(defines) { + return wgslParseDefines` + fn getNormal(input:FragInput)->vec3{ + var normal:vec3; + #if ${defines.HAS_NORMAL} + normal= input.normal; + #else + let pos_dx = dpdx(input.worldPos); + let pos_dy = dpdy(input.worldPos); + normal = normalize( cross(pos_dy, pos_dx) ); + #endif + return normal*(f32(input.frontFacing) * 2.0 - 1.0); + } + `; +} +function getNormalByNormalTexture(defines) { + return wgslParseDefines` + fn getNormalByNormalTexture(input:FragInput)->vec3{ + var n:vec3 = textureSample(normalTexture,normalSampler, input.uv).rgb; + let tbn:mat3x3 =getTBN(input); + n = normalize(tbn * (2.0 * n - vec3(1.0))); + n=n*(f32(input.frontFacing) * 2.0 - 1.0); + return n; + } + `; +} +function getTBN(defines) { + return wgslParseDefines` + fn getTBN(input:FragInput)->mat3x3{ + #if ${defines.HAS_TANGENT} + let tbn:mat3x3 = input.tbn; + #else + let normal:vec3 =normalize(input.normal); + let uv:vec2 = select(-input.uv,input.uv,input.frontFacing); + // ref: http://www.thetenthplanet.de/archives/1180 + // get edge vectors of the pixel triangle + let dp1:vec3 = vec3(dpdx(input.worldPos.x), dpdx(input.worldPos.y), dpdx(input.worldPos.z)); + let dp2:vec3 = vec3(dpdy(input.worldPos.x), dpdy(input.worldPos.y), dpdy(input.worldPos.z)); + let duv1:vec2 = dpdx(uv); + let duv2:vec2 = dpdy(uv); + + // solve the linear system + let dp2perp:vec3 = cross(dp2, normal); + let dp1perp:vec3 = cross(normal, dp1); + let tangent:vec3 = dp2perp * duv1.x + dp1perp * duv2.x; + let binormal:vec3 = dp2perp * duv1.y + dp1perp * duv2.y; + // construct a scale-invariant frame + let result:f32=max(dot(tangent, tangent), dot(binormal, binormal)); + let invmax:f32 = 1.0/sqrt(result); + let tbn:mat3x3 = mat3x3(tangent * invmax, binormal * invmax, normal); #endif + return tbn; + } + `; +} - var totalDiffuse:vec3 = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse; - var totalSpecular:vec3 = reflectedLight.directSpecular + reflectedLight.indirectSpecular; - //透射 - #if ${defines.USE_TRANSMISSION} - material.transmission = materialUniform.transmission; - material.transmissionAlpha = 1.0; - material.thickness = materialUniform.thickness; - material.attenuationDistance = materialUniform.attenuationDistance; - material.attenuationColor = materialUniform.attenuationColor; - #if ${defines.USE_TRANSMISSIONTEXTURE} - material.transmission *=textureSample(transmissionTexture, baseSampler, input.vUv).r; - #endif - #if ${defines.USE_THICKNESSTEXTURE} - material.thickness *=textureSample(thicknessTexture, baseSampler, input.vUv).g; - #endif - let pos:vec3 = vWorldPosition; - let v:vec3 = normalize( cameraPosition - pos ); - let n:vec3 = inverseTransformDirection( normal, systemUniform.viewMatrix ); - let transmission:vec4 = getIBLVolumeRefraction( - n, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90, pos, modelMatrix, systemUniform.viewMatrix, systemUniform.projectionMatrix, material.ior, material.thickness, material.attenuationColor, material.attenuationDistance ); - material.transmissionAlpha = mix( material.transmissionAlpha, transmission.a, material.transmission ); - totalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission ); +function brdf(defines) { + return wgslParseDefines` + #if ${defines.USE_SHEEN} + fn D_Charlie( roughness:f32,dotNH:f32 )->f32 { + let alpha:f32 = pow2( roughness ); + let invAlpha:f32 = 1.0 / alpha; + let cos2h:f32 = dotNH * dotNH; + let sin2h:f32 = max( 1.0 - cos2h, 0.0078125 ); + return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI ); + } + fn V_Neubelt( dotNV:f32, dotNL:f32 )->f32 { + return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) ); + } + fn BRDF_Sheen(lightDir:vec3, viewDir:vec3, normal:vec3,sheenColor:vec3,sheenRoughness:f32 )->vec3 { + let halfDir:vec3 = normalize( lightDir + viewDir ); + let dotNL:f32 = saturate( dot( normal, lightDir ) ); + let dotNV:f32 = saturate( dot( normal, viewDir ) ); + let dotNH:f32 = saturate( dot( normal, halfDir ) ); + let D:f32 = D_Charlie( sheenRoughness, dotNH ); + let V:f32 = V_Neubelt( dotNV, dotNL ); + return sheenColor * ( D * V ); + } #endif + fn BRDF_Lambert(diffuseColor:vec3)->vec3 { - let outgoingLight:vec3 = totalDiffuse + totalSpecular + totalEmissiveRadiance; + return RECIPROCAL_PI * diffuseColor; - #if ${defines.USE_SHEEN} - let sheenEnergyComp:f32 = 1.0 - 0.157 * max3( material.sheenColor ); - outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular; - #endif + } // validated - #if ${defines.USE_CLEARCOAT} - let dotNVcc:f32 = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) ); - let Fcc:vec3 = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc ); - outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat; - #endif + fn F_Schlick( f0:vec3, dotVH:f32 )->vec3 { - #if ${defines.USE_TRANSMISSION} - diffuseColor.a *= material.transmissionAlpha + 0.1; - #endif + // Original approximation by Christophe Schlick '94 + // float fresnel = pow( 1.0 - dotVH, 5.0 ); - var finnalColor:vec4; - finnalColor = vec4( outgoingLight, diffuseColor.a ); - #if ${defines.TONE_MAPPING} - finnalColor.rgb = toneMapping( finnalColor.rgb,materialUniform.toneMappingExposure ); - #endif + // Optimized variant (presented by Epic at SIGGRAPH '13) + // https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf + let fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); + return ( 1.0 - f0 ) * fresnel + f0; - finnalColor = linearToOutputTexel( finnalColor); + } // validated - #if ${defines.PREMULTIPLIED_ALPHA} - finnalColor.rgb *= finnalColor.a; - #endif - #if ${defines.DITHERING} - finnalColor.rgb = dithering( finnalColor.rgb ); - #endif - return finnalColor; - }`; -} + fn Schlick_to_F0(f:vec3, f90:f32, dotVH:f32 )->vec3 { + let x:f32 = clamp( 1.0 - dotVH, 0.0, 1.0 ); + let x2:f32 = x * x; + let x5:f32 = clamp( x * x2 * x2, 0.0, 0.9999 ); -function pbrVert(defines) { - return wgslParseDefines` - #include - struct VertexOutput { - @builtin(position) position: vec4, - @location(0) vUv: vec2, - @location(1) vViewPosition: vec3, // Vector from vertex to camera. - @location(2) vWorldPosition: vec3, - @location(3) vNormal: vec3, - // 可选 - #if ${defines.USE_LIGHTTEXTURE || defines.USE_AOTEXTURE} - @location(${defines.vUv2OutLocation}) vUv2: vec2, - #endif + return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 ); + } + fn V_GGX_SmithCorrelated( alpha:f32, dotNL:f32,dotNV:f32 )->f32 { - #if ${defines.USE_COLOR_ALPHA} - @location(${defines.vColorOutLocation}) vColor: vec4, - #elif ${defines.USE_COLOR || defines.USE_INSTANCING_COLOR} - @location(${defines.vColorOutLocation}) vColor: vec3, - #endif + let a2 :f32= pow2( alpha ); - #if ${defines.USE_TANGENT} - @location(${defines.vTangentOutLocation}) vTangent: vec3, - @location(${defines.vBitangentOutLocation}) vBitangent: vec3, - #endif - }; - struct GlobalUniform { - projectionMatrix: mat4x4, - viewMatrix: mat4x4, - inverseViewMatrix: mat4x4, - cameraPosition: vec3, - }; + let gv:f32 = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) ); + let gl:f32 = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) ); - //texture and sampler - // @group(0) @binding(${defines.samplerBinding}) var baseSampler: sampler; - #if ${defines.USE_SKINNING} - //uniform highp sampler2D boneTexture; - @group(0) @binding(${defines.boneTextureBinding}) var boneTexture: texture_2d; - #endif + return 0.5 / max((gv + gl), 0.000000001 ); - #if ${defines.USE_DISPLACEMENTTEXTURE} - //uniform sampler2D displacementMap; - @group(0) @binding(${defines.displacementTextureBinding}) var displacementMap: texture_2d; - #endif + } + fn D_GGX( alpha:f32, dotNH:f32 )->f32 { - #if ${defines.MORPHTARGETS_TEXTURE} - //uniform sampler2DArray morphTargetsTexture; - @group(0) @binding(${defines.morphTargetsTextureBinding}) var morphTargetsTexture: texture_2d_array; - #endif + let a2:f32 = pow2( alpha ); - struct VertexInput { - @location(0) position: vec3, + let denom:f32 = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0; // avoid alpha = 0 with dotNH = 1 - @location(1) normal: vec3, + return RECIPROCAL_PI * a2 / pow2( denom ); - @location(2) uv: vec2, - #if ${defines.USE_LIGHTTEXTURE || defines.USE_AOTEXTURE} - @location(${defines.uv2Location}) uv2:vec2, - #endif - #if ${defines.USE_INSTANCING} - @location(${defines.instanceMatrixLocation}) instanceMatrix:mat4x4, - #endif - #if ${defines.USE_INSTANCING_COLOR} - @location(${defines.instanceColorLocation}) instanceColor:vec3, - #endif - - #if ${defines.USE_TANGENT} - @location(${defines.tangentLocation}) tangent:vec4, - #endif - #if ${defines.USE_COLOR_ALPHA} - @location(${defines.colorLocation}) color:vec4, - #elif ${defines.USE_COLOR} - @location(${defines.colorLocation}) color:vec3, - #endif + } + fn BRDF_GGX( lightDir:vec3, viewDir:vec3, normal:vec3, f0:vec3, roughness:f32 )->vec3 { - #if ${defines.USE_MORPHTARGETS && !defines.MORPHTARGETS_TEXTURE} - @location(${defines.morphTarget0Location}) morphTarget0:vec3, + let alpha:f32 = pow2( roughness ); // UE4's roughness - @location(${defines.morphTarget1Location}) morphTarget1:vec3, + let halfDir = normalize( lightDir + viewDir ); - @location(${defines.morphTarget2Location}) morphTarget2:vec3, + let dotNL:f32 = saturate( dot( normal, lightDir ) ); + let dotNV:f32 = saturate( dot( normal, viewDir ) ); + let dotNH:f32 = saturate( dot( normal, halfDir ) ); + let dotVH:f32 = saturate( dot( lightDir, halfDir ) ); - @location(${defines.morphTarget3Location}) morphTarget3:vec3, - #if ${defines.USE_MORPHNORMALS} - @location(${defines.morphNormal0Location}) morphNormal0:vec3, + let F = F_Schlick( f0, dotVH ); - @location(${defines.morphNormal1Location}) morphNormal1:vec3, + let V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); - @location(${defines.morphNormal2Location}) morphNormal2:vec3, + let D = D_GGX( alpha, dotNH ); - @location(${defines.morphNormal3Location}) morphNormal3:vec3, - #else - @location(${defines.morphTarget4Location}) morphTarget4:vec3, + return F * ( V * D ); - @location(${defines.morphTarget5Location}) morphTarget5:vec3, + } + fn direct_Physical( directLight:IncidentLight, geometry:Geometry,material:PhysicalMaterial)->ReflectedLight { + var reflectedLight:ReflectedLight; + let dotNL:f32 = saturate(dot( geometry.normal,geometry.viewDir)); + let irradiance:vec3 = dotNL * directLight.color*3.1415926; + reflectedLight.directSpecular = irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.roughness ); + reflectedLight.directDiffuse = irradiance * BRDF_Lambert( material.diffuseColor ); + return reflectedLight; + } + `; +} + +function ibl(defines) { + return wgslParseDefines` + fn getLightProbeRadiance( viewDir:vec3,normal:vec3, roughness:f32 )->vec3{ + var reflectVec:vec3 = reflect( -viewDir, normal ); + reflectVec.x = -reflectVec.x; // TextureCube is left-hand,so x need inverse + let mipCount:f32 = 10.0; // resolution of 256x256 + let lod:f32 = roughness * mipCount; + let specularLight:vec3 = textureSampleLevel(specularEnvTexture,specularEnvSampler, reflectVec, lod).rgb; + return specularLight; + } + fn getLightProbeIrradiance( lightProbe:array,9>, normal:vec3)->vec3 { + var worldNormal:vec3 = normal; + worldNormal.x = -normal.x; + var irradiance:vec3 = lightProbe[0]; + irradiance+=lightProbe[1] * (normal.y); + irradiance+=lightProbe[2] * (normal.z) ; + irradiance+=lightProbe[3] * (normal.x) ; + + irradiance+=lightProbe[4] * (normal.y * normal.x) ; + irradiance+=lightProbe[5] * (normal.y * normal.z) ; + irradiance+=lightProbe[6] * (3.0 * normal.z * normal.z - 1.0); + irradiance+=lightProbe[7] * (normal.z * normal.x) ; + irradiance+=lightProbe[8] * (normal.x * normal.x - normal.y * normal.y); + + return max(irradiance, vec3(0.0,0.0,0.0)); + } + fn DFGApprox( specularColor:vec3, roughness:f32,dotNV:f32 )->vec3 { + const c0:vec4 = vec4( - 1, - 0.0275, - 0.572, 0.022 ); + let c1:vec4 = vec4( 1, 0.0425, 1.04, - 0.04 ); + let r:vec4 = roughness * c0 + c1; + let a004:f32 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y; + let fab:vec2 = vec2( - 1.04, 1.04 ) * a004 + r.zw; + return specularColor * fab.x + fab.y; + } + //间接光照 + fn indirectDiffuse_Physical(geometry:Geometry, material:PhysicalMaterial )->ReflectedLight { + var reflectedLight:ReflectedLight; + var irradiance:vec3 = lightUniforms.ambient.xyz*lightUniforms.ambient.w; + irradiance *= PI; + reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); + return reflectedLight; + } + //间接高光 + fn indirectSpecular_Physical(geometry:Geometry, material:PhysicalMaterial)->ReflectedLight { + var reflectedLight:ReflectedLight; + // IBL specular + let radiance:vec3 = getLightProbeRadiance(geometry.viewDir, geometry.normal, material.roughness); + let radianceAttenuation:f32 = 1.0; + reflectedLight.indirectSpecular += radianceAttenuation * radiance * DFGApprox(material.specularColor, material.roughness, geometry.dotNV ); + return reflectedLight; + } + `; +} - @location(${defines.morphTarget6Location}) morphTarget6:vec3, +function pbrFunction(defines) { + return wgslParseDefines` - @location(${defines.morphTarget7Location}) morphTarget7:vec3, - #endif - #endif - #if ${defines.USE_SKINNING} - @location(${defines.skinIndexLocation}) skinIndex:vec4, - @location(${defines.skinWeightLocation}) skinWeight:vec4, - #endif - } + #if ${defines.DITHERING} + fn dithering(color:vec3 )->vec3 { + let grid_position:f32 = rand( gl_FragCoord.xy ); + let dither_shift_RGB:vec3 = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 ); + dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position ); + return color + dither_shift_RGB; + } + #endif - #if ${defines.MORPHTARGETS_TEXTURE} - fn getMorph( vertexIndex:u32, morphTargetIndex:u32,offset:u32 )->vec4 { - let texelIndex:u32 = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset; - let y:u32 = texelIndex / materialUniform.morphTargetsTextureSize.x; - let x:u32 = texelIndex - y * materialUniform.morphTargetsTextureSize.x; - let morphUV:vec3 = vec3( x, y, morphTargetIndex ); - //textureLoad - //return texelFetch( morphTargetsTexture, morphUV, 0 ); - return textureLoad( morphTargetsTexture, morphUV, 0 ); + #if ${defines.USE_IRIDESCENCE} + fn BRDF_GGX_Iridescence( lightDir:vec3, viewDir:vec3,normal:vec3, f0:vec3, f90:f32,iridescence:f32, iridescenceFresnel:vec3,roughness:f32 )->vec3 { + let alpha:f32 = pow2( roughness ); + let halfDir:vec3 = normalize( lightDir + viewDir ); + let dotNL:f32 = saturate( dot( normal, lightDir ) ); + let dotNV:f32 = saturate( dot( normal, viewDir ) ); + let dotNH:f32 = saturate( dot( normal, halfDir ) ); + let dotVH:f32 = saturate( dot( viewDir, halfDir ) ); + let F:vec3 = mix( F_Schlick( f0, f90, dotVH ), iridescenceFresnel, iridescence ); + let V:f32 = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); + let D:f32 = D_GGX( alpha, dotNH ); + return F * ( V * D ); } #endif - #if ${defines.USE_SKINNING} - fn getBoneMatrix( i:f32 )->mat4x4 { - let j:f32 = i * 4.0; - let x:f32 = j%f32( materialUniform.boneTextureSize ); - let y:f32 = floor( j / f32( materialUniform.boneTextureSize ) ); - let dx:f32 = 1.0 / f32( materialUniform.boneTextureSize ); - let dy:f32 = 1.0 / f32( materialUniform.boneTextureSize ); - y = dy * ( y + 0.5 ); - - let v1:vec4 = textureSample(boneTexture, baseSampler, vec2( dx * ( x + 0.5 ), y ) ); - let v2:vec4 = textureSample(boneTexture, baseSampler, vec2( dx * ( x + 1.5 ), y ) ); - let v3:vec4 = textureSample(boneTexture, baseSampler, vec2( dx * ( x + 2.5 ), y ) ); - let v4:vec4 = textureSample(boneTexture, baseSampler, vec2( dx * ( x + 3.5 ), y ) ); - let bone:mat4x4 = mat4x4( v1, v2, v3, v4 ); - return bone; + + #if ${defines.USE_SHEEN} + fn D_Charlie( roughness:f32,dotNH:f32 )->f32 { + let alpha:f32 = pow2( roughness ); + let invAlpha:f32 = 1.0 / alpha; + let cos2h:f32 = dotNH * dotNH; + let sin2h:f32 = max( 1.0 - cos2h, 0.0078125 ); + return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI ); + } + fn V_Neubelt( dotNV:f32, dotNL:f32 )->f32 { + return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) ); + } + fn BRDF_Sheen(lightDir:vec3, viewDir:vec3, normal:vec3,sheenColor:vec3,sheenRoughness:f32 )->vec3 { + let halfDir:vec3 = normalize( lightDir + viewDir ); + let dotNL:f32 = saturate( dot( normal, lightDir ) ); + let dotNV:f32 = saturate( dot( normal, viewDir ) ); + let dotNH:f32 = saturate( dot( normal, halfDir ) ); + let D:f32 = D_Charlie( sheenRoughness, dotNH ); + let V:f32 = V_Neubelt( dotNV, dotNL ); + return sheenColor * ( D * V ); } #endif - @binding(0) @group(0) var materialUniform : MaterialUniform; - @binding(0) @group(1) var globalUniform : GlobalUniform; - @vertex - fn main(input:VertexInput)->VertexOutput { - var vertexOutput:VertexOutput; - #if ${defines.USE_TEXTURE} - vertexOutput.vUv = input.uv; - #endif - #if ${defines.USE_LIGHTTEXTURE || defines.USE_AOTEXTURE} - vertexOutput.vUv2 input.uv2; - #endif - #if ${defines.USE_COLOR_ALPHA} - vertexOutput.vColor = vec4( 1.0 ); - #elif ${defines.USE_COLOR || defines.USE_INSTANCING_COLOR} - vertexOutput.vColor = vec3( 1.0 ); - #endif - #if ${defines.USE_COLOR} - vertexOutput.vColor *= input.color; - #endif - #if ${defines.USE_INSTANCING_COLOR} - vertexOutput.vColor.xyz *= input.instanceColor.xyz; - #endif - #if ${defines.USE_MORPHCOLORS && defines.MORPHTARGETS_TEXTURE} - vertexOutput.vColor *= materialUniform.morphTargetBaseInfluence; - for (let i : u32 = 0u; i < materialUniform.MORPHTARGETS_COUNT; i = i + 1u ) { - #if ${defines.USE_COLOR_ALPHA} - if ( materialUniform.morphTargetInfluences[ i ] ! = 0.0 ) vertexOutput.vColor += getMorph( gl_VertexID, i, 2 ) * materialUniform.morphTargetInfluences[ i ]; - #elif ${defines.USE_COLOR} - if ( materialUniform.morphTargetInfluences[ i ] ! = 0.0 ) vertexOutput.vColor += getMorph( gl_VertexID, i, 2 ).rgb * materialUniform.morphTargetInfluences[ i ]; - #endif + #if ${defines.USE_IRIDESCENCE} + let XYZ_TO_REC709: mat3x3 = mat3x3( + 3.2404542, -0.9692660, 0.0556434, -1.5371385, 1.8760108, -0.2040259, -0.4985314, 0.0415560, 1.0572252 + ); + fn Fresnel0ToIor( fresnel0:vec3 )->vec3 { + let sqrtF0:vec3 = sqrt( fresnel0 ); + return ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 ); + } + fn IorToFresnel0(transmittedIor:vec3,incidentIor:f32 )->vec3 { + return pow2Vector( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) ); + } + fn IorToFresnel0(transmittedIor:f32, incidentIor:f32 )->f32 { + return pow2Vector( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor )); + } + fn evalSensitivity(OPD:f32,shift:vec3 )->vec3 { + let phase:f32 = 2.0 * PI * OPD * 1.0e-9; + let val:vec3 = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 ); + let pos:vec3 = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 ); + let vart:vec3 = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 ); + let xyz:vec3 = val * sqrt( 2.0 * PI * vart ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * vart ); + xyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) ); + xyz /= 1.0685e-7; + let rgb:vec3 = XYZ_TO_REC709 * xyz; + return rgb; + } + fn evalIridescence(outsideIOR:f32, eta2:f32,cosTheta1:f32,thinFilmThickness:f32,baseF0:vec3 )->vec3 { + var I:vec3; + let iridescenceIOR:f32 = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) ); + let sinTheta2Sq:f32 = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) ); + let cosTheta2Sq:f32 = 1.0 - sinTheta2Sq; + if ( cosTheta2Sq < 0.0 ) { + return vec3( 1.0 ); } - #endif - var objectNormal:vec3 = vec3(input.normal); - #if ${defines.USE_TANGENT} - let objectTangent:vec3 = vec3( input.tangent.xyz ); - #endif - #if ${defines.USE_MORPHNORMALS} - objectNormal *= materialUniform.morphTargetBaseInfluence; - #if ${defines.MORPHTARGETS_TEXTURE} - for ( let i : u32 = 0u; i < materialUniform.MORPHTARGETS_COUNT; i = i + 1u) { - if ( materialUniform.morphTargetInfluences[ i ] ! = 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * materialUniform.morphTargetInfluences[ i ]; - } - #else - objectNormal += morphNormal0 * materialUniform.morphTargetInfluences[ 0 ]; - objectNormal += morphNormal1 * materialUniform.morphTargetInfluences[ 1 ]; - objectNormal += morphNormal2 * materialUniform.morphTargetInfluences[ 2 ]; - objectNormal += morphNormal3 * materialUniform.morphTargetInfluences[ 3 ]; - #endif - #endif - #if ${defines.USE_SKINNING} - let boneMatX:mat4x4 = getBoneMatrix( input.skinIndex.x ); - let boneMatY:mat4x4 = getBoneMatrix( input.skinIndex.y ); - let boneMatZ:mat4x4 = getBoneMatrix( input.skinIndex.z ); - let boneMatW:mat4x4 = getBoneMatrix( input.skinIndex.w ); - #endif - #if ${defines.USE_SKINNING} - let skinMatrix:mat4x4 = mat4x4( 0.0 ); - skinMatrix += input.skinWeight.x * boneMatX; - skinMatrix += input.skinWeight.y * boneMatY; - skinMatrix += input.skinWeight.z * boneMatZ; - skinMatrix += input.skinWeight.w * boneMatW; - skinMatrix = materialUniform.bindMatrixInverse * skinMatrix * materialUniform.bindMatrix; - objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz; - #if ${defines.USE_TANGENT} - objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz; - #endif - #endif - var transformedNormal:vec3 = objectNormal; - // transformedNormal+=vec3(0.0); - #if ${defines.USE_INSTANCING} - let m:mat3x3 = mat3x3( input.instanceMatrix ); - transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) ); - transformedNormal = m * transformedNormal; - #endif - transformedNormal = materialUniform.normalMatrix * transformedNormal; - #if ${defines.FLIP_SIDED} - transformedNormal = - transformedNormal; - #endif - #if ${defines.USE_TANGENT} - let transformedTangent:vec3 = (globalUniform.viewMatrix*materialUniform.modelMatrix * vec4( objectTangent, 0.0 ) ).xyz; - #if ${defines.FLIP_SIDED} - transformedTangent = - transformedTangent; - #endif - #endif - vertexOutput.vNormal = normalize( transformedNormal ); - #if ${defines.FLAT_SHADED} - #if ${defines.USE_TANGENT} - vTangent = normalize( transformedTangent ); - vBitangent = normalize( cross( vNormal, vTangent ) * input.tangent.w ); - #endif - #endif - let transformed:vec3 = vec3( input.position ); - #if ${defines.USE_MORPHTARGETS} - transformed *= materialUniform.morphTargetBaseInfluence; - #if ${defines.MORPHTARGETS_TEXTURE} - for ( let i : u32 = 0u; i < materialUniform.MORPHTARGETS_COUNT; i = i + 1u ) { - if ( materialUniform.morphTargetInfluences[ i ] ! = 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ]; - } - #else - transformed += input.morphTarget0 * materialUniform.morphTargetInfluences[ 0 ]; - transformed += input.morphTarget1 * materialUniform.morphTargetInfluences[ 1 ]; - transformed += input.morphTarget2 * materialUniform.morphTargetInfluences[ 2 ]; - transformed += input.morphTarget3 * materialUniform.morphTargetInfluences[ 3 ]; - #if ${defines.USE_MORPHNORMALS} - transformed += input.morphTarget4 * materialUniform.morphTargetInfluences[ 4 ]; - transformed += input.morphTarget5 * materialUniform.morphTargetInfluences[ 5 ]; - transformed += input.morphTarget6 * materialUniform.morphTargetInfluences[ 6 ]; - transformed += input.morphTarget7 * materialUniform.morphTargetInfluences[ 7 ]; - #endif - #endif - #endif - #if ${defines.USE_SKINNING} - let skinVertex:vec4 = materialUniform.bindMatrix * vec4( transformed, 1.0 ); - let skinned:vec4 = vec4( 0.0 ); - skinned += boneMatX * skinVertex * input.skinWeight.x; - skinned += boneMatY * skinVertex * input.skinWeight.y; - skinned += boneMatZ * skinVertex * input.skinWeight.z; - skinned += boneMatW * skinVertex * input.skinWeight.w; - transformed = ( materialUniform.bindMatrixInverse * skinned ).xyz; - #endif - #if ${defines.USE_DISPLACEMENTTEXTURE} - transformed += normalize( objectNormal ) * (textureSample(displacementMap, baseSampler, vUv).x * materialUniform.displacementScale + materialUniform.displacementBias ); - #endif - var mvPosition:vec4 = vec4( transformed, 1.0 ); - #if ${defines.USE_INSTANCING} - mvPosition = input.instanceMatrix * mvPosition; - #endif - mvPosition = globalUniform.viewMatrix*materialUniform.modelMatrix * mvPosition; - vertexOutput.position = globalUniform.projectionMatrix * mvPosition; - vertexOutput.vViewPosition = - mvPosition.xyz/mvPosition.w; - #if ${defines.USE_ENVTEXTURE || defines.DISTANCE || defines.USE_TRANSMISSION} - var worldPosition:vec4 = vec4( transformed, 1.0 ); - #if ${defines.USE_INSTANCING} - worldPosition = input.instanceMatrix * worldPosition; - #endif - worldPosition = materialUniform.modelMatrix * worldPosition; - #endif - #if ${defines.USE_TRANSMISSION} - vertexOutput.vWorldPosition = worldPosition.xyz; - #endif - return vertexOutput; + let cosTheta2:f32 = sqrt( cosTheta2Sq ); + let R0:f32 = IorToFresnel0( iridescenceIOR, outsideIOR ); + let R12:f32 = F_Schlick( R0, 1.0, cosTheta1 ); + let R21:f32 = R12; + let T121:f32 = 1.0 - R12; + let phi12:f32 = 0.0; + if ( iridescenceIOR < outsideIOR ) phi12 = PI; + let phi21:f32 = PI - phi12; + let baseIOR:vec3 = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) ); + let R1:vec3 = IorToFresnel0( baseIOR, iridescenceIOR ); + let R23:vec3 = F_Schlick( R1, 1.0, cosTheta2 ); + let phi23:vec3 = vec3( 0.0 ); + if ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI; + if ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI; + if ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI; + let OPD:f32 = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2; + let phi:vec3 = vec3( phi21 ) + phi23; + let R123:vec3 = clamp( R12 * R23, 1e-5, 0.9999 ); + let r123:vec3 = sqrt( R123 ); + let Rs:vec3 = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 ); + let C0:vec3 = R12 + Rs; + I = C0; + let Cm:vec3 = Rs - T121; + for ( let m : u32 = 1;m <= 2; ++ m ) { + Cm *= r123; + Sm:vec3 = 2.0 * evalSensitivity( f32( m ) * OPD, f32( m ) * phi ); + I += Cm * Sm; + } + return max( I, vec3( 0.0 ) ); + } + #endif + const clearcoatSpecular:vec3 = vec3( 0.0 ); + const sheenSpecular:vec3 = vec3( 0.0 ); + + fn IBLSheenBRDF( normal:vec3, viewDir:vec3, roughness:f32 )->f32 { + let dotNV:f32 = saturate( dot( normal, viewDir ) ); + let r2:f32 = roughness * roughness; + let a:f32 =select(-8.48 * r2 + 14.3 * roughness - 9.95,-339.2 * r2 + 161.4 * roughness - 25.9,roughness < 0.25); + //let a:f32 = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95; + let b:f32=select(1.97 * r2 - 3.27 * roughness + 0.72,44.0 * r2 - 23.7 * roughness + 3.26, roughness < 0.25); + //let b:f32 = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72; + //let DG:f32 = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) ); + let DG:f32 = exp( a * dotNV + b ) + select(0.1 * ( roughness - 0.25 ),0.0,roughness < 0.25); + return saturate( DG * RECIPROCAL_PI ); + } + fn DFGApprox( specularColor:vec3, roughness:f32,dotNV:f32 )->vec3 { + const c0:vec4 = vec4( - 1, - 0.0275, - 0.572, 0.022 ); + let c1:vec4 = vec4( 1, 0.0425, 1.04, - 0.04 ); + let r:vec4 = roughness * c0 + c1; + let a004:f32 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y; + let fab:vec2 = vec2( - 1.04, 1.04 ) * a004 + r.zw; + return specularColor * fab.x + fab.y; + } + fn EnvironmentBRDF( normal:vec3,viewDir:vec3,specularColor:vec3, specularF90:f32,roughness:f32 )->vec3 { + let fab:vec2 = DFGApprox( normal, viewDir, roughness ); + return specularColor * fab.x + specularF90 * fab.y; } - `; -} -function skyBoxFrag(defines) { - return ` - fn lessThanEqual(a:vec3,b:vec3)->vec3{ - let xValue:f32=select(b.x,a.x,a.x<=b.x); - let yValue:f32=select(b.y,a.y,a.y<=b.y); - let zValue:f32=select(b.z,a.z,a.z<=b.z); - return vec3(xValue,yValue,zValue); - } - fn LinearTosRGB( value:vec4 )->vec4 { - return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a ); + + fn computeSpecularOcclusion( dotNV:f32, ambientOcclusion:f32, roughness:f32 )->f32 { + return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion ); } - struct FragmentInput { - @location(0) texCoord : vec3 - }; - @group(0) @binding(2) var defaultSampler: sampler; - @group(0) @binding(1) var skyboxTexture: texture_cube; - @fragment - fn main(input : FragmentInput) -> @location(0) vec4 { - let color = textureSample(skyboxTexture, defaultSampler, input.texCoord); - return LinearTosRGB(color); - } -`; -} + #if ${defines.USE_TRANSMISSION} -function skyBoxVert(defines) { - return ` - struct SystemUniform { - projectionMatrix: mat4x4, - viewMatrix: mat4x4, - inverseViewMatrix: mat4x4, - cameraPosition: vec3, - }; - struct MaterialUniform { - modelMatrix: mat4x4, - } - @binding(${defines.skyboxBinding}) @group(0) var selfUniform : MaterialUniform; - @binding(${defines.cameraBinding}) @group(1) var systemUniform : SystemUniform; - struct VertexInput { - @location(${defines.positionLocation}) position : vec3, - }; - struct VertexOutput { - @builtin(position) position : vec4, - @location(0) texCoord : vec3, - }; - @vertex - fn main(input : VertexInput) -> VertexOutput { - var output : VertexOutput; - output.texCoord = input.position.xyz; - var modelView = systemUniform.viewMatrix; - // Drop the translation portion of the modelView matrix - modelView[3] = vec4(0.0, 0.0, 0.0, modelView[3].w); - output.position = systemUniform.projectionMatrix * modelView * vec4(input.position,1.0); - output.position = output.position.xyww; - return output; - } - `; -} + fn getVolumeTransmissionRay( n:vec3, v:vec3, thickness:f32, ior:f32, modelMatrix:mat4x4:f32)->vec3 { + var refractionVector:vec3 = refract( - v, normalize( n ), 1.0 / ior ); + var modelScale:vec3; + modelScale.x = length( vec3( modelMatrix[0].xyz ) ); + modelScale.y = length( vec3( modelMatrix[1].xyz ) ); + modelScale.z = length( vec3( modelMatrix[2].xyz ) ); + return normalize( refractionVector ) * thickness * modelScale; + } + fn applyIorToRoughness(roughness:f32, ior:f32 )->f32 { + return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 ); + } + fn getTransmissionSample( fragCoord:vec2, roughness:f32,ior:f32 )->vec4 { + let framebufferLod:f32 = log2( materialUniform.transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior ); + return textureSampleLevel(transmissionSamplerTexture,baseSampler,fragCoord.xy, framebufferLod); -function quadFrag(defines) { - return ` - @group(0) @binding(1) var baseSampler: sampler; - @group(0) @binding(0) var colorTexture: texture_2d; - struct VertexOutput { - @builtin(position) position: vec4, - @location(0) uv: vec2, - }; - @fragment - fn main(input:VertexOutput) -> @location(0) vec4 { - return textureSample(colorTexture, baseSampler, vec2(input.uv.x,1.0-input.uv.y)); } - `; -} + fn applyVolumeAttenuation( radiance:vec3, transmissionDistance:f32,attenuationColor:vec3,attenuationDistance:f32 )->vec3 { + if ( isinf( attenuationDistance ) ) { + return radiance; + } + else { + let attenuationCoefficient:vec3 = -log( attenuationColor ) / attenuationDistance; + let transmittance:vec3 = exp( - attenuationCoefficient * transmissionDistance ); + return transmittance * radiance; + } + + } + fn getIBLVolumeRefraction( n:vec3,v:vec3, roughness:f32, diffuseColor:vec3,specularColor:vec3, specularF90:f32,position:vec3, modelMatrix:mat4x4, viewMatrix:mat4x4,projMatrix:mat4x4,ior:f32, thickness:f32,attenuationColor:vec3,attenuationDistance:f32 )->vec4 { + let transmissionRay:vec3 = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix ); + let refractedRayExit:vec3 = position + transmissionRay; + let ndcPos:vec4 = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); + let refractionCoords:vec2 = ndcPos.xy / ndcPos.w; + refractionCoords += 1.0; + refractionCoords /= 2.0; + let transmittedLight:vec4 = getTransmissionSample( refractionCoords, roughness, ior ); + let attenuatedColor:vec3 = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance ); + let F:vec3 = EnvironmentBRDF( n, v, specularColor, specularF90, roughness ); + return vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a ); + } + #endif -function quadVert(defines) { - return ` - struct VertexInput { - @location(${defines.positionLocation}) position: vec2, + #if ${defines.USE_BUMPTEXTURE} + fn dHdxy_fwd()->vec2 { + let dSTdx:vec2 = dpdx( vUv ); + let dSTdy:vec2 = dpdy( vUv ); + + let Hll:f32 = materialUniform.bumpScale * textureSample(bumpTexture, baseSampler, vUv).x; + let dBx:f32 = materialUniform.bumpScale * textureSample(bumpTexture, baseSampler, vUv + dSTdx).x - Hll; + let dBy:f32 = materialUniform.bumpScale * textureSample(bumpTexture, baseSampler, vUv + dSTdy).x - Hll; + return vec2( dBx, dBy ); + } + fn perturbNormalArb( surf_pos:vec3, surf_norm:vec3, dHdxy:vec2, faceDirection:f32 )->vec3 { + let vSigmaX:vec3 = dpdx( surf_pos.xyz ); + let vSigmaY:vec3 = dpdy( surf_pos.xyz ); + let vN:vec3 = surf_norm; + let R1:vec3 = cross( vSigmaY, vN ); + let R2:vec3 = cross( vN, vSigmaX ); + let fDet:f32 = dot( vSigmaX, R1 ) * faceDirection; + let vGrad:vec3 = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 ); + return normalize( abs( fDet ) * surf_norm - vGrad ); + } + #endif + + //! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALTEXTURE ) || defined ( USE_CLEARCOAT_NORMALTEXTURE ) ) + #if ${(!defines.USE_TANGENT && defines.TANGENTSPACE_NORMALTEXTURE) || defines.USE_CLEARCOAT_NORMALTEXTURE} + fn perturbNormal2Arb( eye_pos:vec3, surf_norm:vec3, textureN:vec3, faceDirection:f32 )->vec3 { + let q0:vec3 = dpdx( eye_pos.xyz ); + let q1:vec3 = dpdy( eye_pos.xyz ); + let st0:vec2 = dpdx( vUv.st ); + let st1:vec2 = dpdy( vUv.st ); + let N:vec3 = surf_norm; + let q1perp:vec3 = cross( q1, N ); + let q0perp:vec3 = cross( N, q0 ); + let T:vec3 = q1perp * st0.x + q0perp * st1.x; + let B:vec3 = q1perp * st0.y + q0perp * st1.y; + let det:f32 = max( dot( T, T ), dot( B, B ) ); + let scale:f32 = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det ); + return normalize( T * ( textureN.x * scale ) + B * ( textureN.y * scale ) + N * textureN.z ); } - struct VertexOutput { - @builtin(position) position: vec4, - @location(0) uv: vec2, - }; - @vertex - fn main(input: VertexInput) -> VertexOutput { - var output:VertexOutput; - output.uv = input.position * 0.5 + 0.5; - output.position = vec4(input.position, 0.0, 1.0);; - return output; + #endif + struct MultiAndSingleScatter{ + multiScatter:vec3, + singleScatter:vec3 } - `; -} + #if ${defines.USE_IRIDESCENCE} + ////////inout vec3 singleScatter, inout vec3 multiScatter + fn computeMultiscatteringIridescence( normal:vec3, viewDir:vec3, specularColor:vec3, specularF90:f32, iridescence:f32,iridescenceF0:vec3, roughness:f32 )->MultiAndSingleScatter { + #else + ////////inout vec3 singleScatter, inout vec3 multiScatter + fn computeMultiscattering( normal:vec3,viewDir:vec3, specularColor:vec3, specularF90:f32, roughness:f32)->MultiAndSingleScatter { + #endif + let fab:vec2 = DFGApprox( normal, viewDir, roughness ); + + var multiAndSingleScatter:MultiAndSingleScatter; + + #if ${defines.USE_IRIDESCENCE} + let Fr:vec3 = mix( specularColor, iridescenceF0, iridescence ); + #else + let Fr:vec3 = specularColor; + #endif + let FssEss:vec3 = Fr * fab.x + specularF90 * fab.y; + let Ess:f32 = fab.x + fab.y; + let Ems:f32 = 1.0 - Ess; + let Favg:vec3 = Fr + ( 1.0 - Fr ) * 0.047619; + let Fms:vec3 = FssEss * Favg / ( 1.0 - Ems * Favg ); + // singleScatter += FssEss; + // multiScatter += Fms * Ems; + multiAndSingleScatter.multiScatter=Fms * Ems; + multiAndSingleScatter.singleScatter=FssEss; + return multiAndSingleScatter; + } + //直接光照 + fn RE_Direct_Physical( directLight:IncidentLight, geometry:GeometricContext, material:PhysicalMaterial)->ReflectedLight { + var reflectedLight:ReflectedLight; + let dotNL:f32 = saturate(dot( geometry.normal, directLight.direction)); + let irradiance:vec3 = dotNL * directLight.color; + #if ${defines.USE_CLEARCOAT} + let dotNLcc:f32 = saturate( dot( geometry.clearcoatNormal, directLight.direction ) ); + let ccIrradiance:vec3 = dotNLcc * directLight.color; + clearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness ); + #endif -function pbr_vs(defines) { - return wgslParseDefines` - #include - #include - #include - #include - #include - #include - @binding(${defines.pbrBinding}) @group(0) var materialUniform : MaterialUniform; - @binding(${defines.cameraBinding}) @group(1) var systemUniform : SystemUniform; - @vertex - fn main(input: VertexInput)-> VertexOutput - { - var output: VertexOutput; - #if ${defines.HAS_UV} - output.uv = input.uv; - #endif - var modelMatrix:mat4x4; - var vNormalView:vec3; - vNormalView = normalize(materialUniform.normalMatrix * vec4(input.normal,0.0)).xyz; - modelMatrix=materialUniform.modelMatrix; - #include - #include - output.normal = vNormalView.xyz; - output.position = systemUniform.projectionMatrix * systemUniform.viewMatrix *modelMatrix* vec4(input.position, 1.0); - let modelPos=modelMatrix *vec4(input.position,1.0); - output.worldPos = modelPos.xyz/modelPos.w; - return output; + #if ${defines.USE_SHEEN} + sheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness ); + #endif + + #if ${defines.USE_IRIDESCENCE} + reflectedLight.directSpecular = irradiance * BRDF_GGX_Iridescence( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness ); + #else + reflectedLight.directSpecular = irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness ); + #endif + reflectedLight.directDiffuse = irradiance * BRDF_Lambert( material.diffuseColor ); + return reflectedLight; + } + //间接光照 + fn RE_IndirectDiffuse_Physical( irradiance:vec3, geometry:GeometricContext, material:PhysicalMaterial )->ReflectedLight { + var reflectedLight:ReflectedLight; + reflectedLight.indirectDiffuse = irradiance * BRDF_Lambert( material.diffuseColor ); + return reflectedLight; + } + //间接高光 + fn RE_IndirectSpecular_Physical( radiance:vec3, irradiance:vec3, clearcoatRadiance:vec3, geometry:GeometricContext, material:PhysicalMaterial)->ReflectedLight { + var reflectedLight:ReflectedLight; + #if ${defines.USE_CLEARCOAT} + clearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness ); + #endif + #if ${defines.USE_SHEEN} + sheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness ); + #endif + var singleScattering:vec3; + var multiScattering:vec3; + let cosineWeightedIrradiance:vec3 = irradiance * RECIPROCAL_PI; + var tempMultiAndSingleScatter:MultiAndSingleScatter; + #if ${defines.USE_IRIDESCENCE} + tempMultiAndSingleScatter=computeMultiscatteringIridescence( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness ); + #else + tempMultiAndSingleScatter= computeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness ); + #endif + singleScattering=tempMultiAndSingleScatter.singleScatter; + multiScattering=tempMultiAndSingleScatter.multiScatter; + let totalScattering:vec3 = singleScattering + multiScattering; + let diffuse:vec3 = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) ); + reflectedLight.indirectSpecular = radiance * singleScattering; + reflectedLight.indirectSpecular = multiScattering * cosineWeightedIrradiance; + reflectedLight.indirectDiffuse = diffuse * cosineWeightedIrradiance; + return reflectedLight; } `; } -function pbr_fs(defines) { +function pbrStruct(defines) { return wgslParseDefines` - // reference: https://github.com/KhronosGroup/glTF-WebGL-PBR/blob/master/shaders/pbr-frag.glsl - #include - #include - #include - #include - #include - #include - struct PhysicalMaterial { - diffuseColor:vec3, + struct MaterialUniform{ + + modelMatrix: mat4x4, + + diffuse:vec3, + + opacity:f32, + + normalMatrix: mat3x3, + + emissive:vec3, + roughness:f32, - specularColor:vec3, - #if ${defines.USE_CLEARCOAT} - clearcoat:f32, - clearcoatRoughness:f32, - clearcoatF0:vec3, - clearcoatF90:f32, - #endif + + metalness:f32, + + #if ${defines.TONE_MAPPING} + toneMappingExposure:f32, + #endif + + #if ${defines.SPECULAR} + + specularColor:vec3, + + specularIntensity:f32, + #endif + + #if ${defines.USE_SHEEN} + + sheenColor:vec3, + + sheenRoughness:f32, + #endif - #if ${defines.USE_IRIDESCENCE} - iridescence:f32, - iridescenceIOR:f32, - iridescenceThickness:f32, - iridescenceFresnel:vec3, - iridescenceF0:vec3, - #endif + #if ${defines.USE_TRANSMISSION} + + attenuationColor:vec3, + + transmission:f32, + + transmissionSamplerSize:vec2, + + thickness:f32, + + attenuationDistance:f32, + + #endif - #if ${defines.USE_SHEEN} - sheenColor:vec3, - sheenRoughness:f32, - #endif + #if ${defines.USE_SKINNING} + + bindMatrix:mat4x4, + + bindMatrixInverse:mat4x4, + + boneTextureSize:u32, + #endif - #if ${defines.IOR} + #if ${defines.USE_NORMALTEXTURE} + normalScale:vec2, + #endif + + #if ${defines.IOR} ior:f32, - #endif + #endif + + #if ${defines.USE_CLEARCOAT} + + #if ${defines.USE_CLEARCOAT_NORMALTEXTURE} + clearcoatNormalScale:vec2, + #endif + + clearcoat:f32, + + clearcoatRoughness:f32, + #endif + + #if ${defines.USE_IRIDESCENCE} + iridescence:f32, + + iridescenceIOR:f32, + + iridescenceThicknessMinimum:f32, + + iridescenceThicknessMaximum:f32, + + #endif - #if ${defines.USE_TRANSMISSION} - transmission:f32, - transmissionAlpha:f32, - thickness:f32, - attenuationDistance:f32, - attenuationColor:vec3, - #endif - }; - const M_PI:f32 = 3.141592653589793; - const c_MinRoughness:f32 = 0.04; - @binding(${defines.pbrBinding}) @group(0) var materialUniform : MaterialUniform; - @binding(${defines.cameraBinding}) @group(1) var systemUniform : SystemUniform; - // IBL - #if ${defines.USE_IBL} - @group(0) @binding(${defines.specularEnvTextureBinding}) var specularEnvTexture: texture_cube; - @group(0) @binding(${defines.specularEnvSamplerBinding}) var specularEnvSampler: sampler; - #endif - #if ${defines.USE_TEXTURE} - @group(0) @binding(${defines.baseColorTextureBinding}) var baseColorTexture: texture_2d; - @group(0) @binding(${defines.baseColorSamplerBinding}) var baseColorSampler: sampler; - #endif - // normal map - #if ${defines.USE_NORMALTEXTURE} - @group(0) @binding(${defines.normalTextureBinding}) var normalTexture: texture_2d; - @group(0) @binding(${defines.normalSamplerBinding}) var normalSampler: sampler; - #endif - // emmisve map - #if ${defines.USE_EMISSIVETEXTURE} - @group(0) @binding(${defines.emissiveTextureBinding}) var emissiveTexture: texture_2d; - @group(0) @binding(${defines.emissiveSamplerBinding}) var emissiveSampler: sampler; - #endif + #if ${defines.USE_AOTEXTURE} + aoTextureIntensity:f32, + #endif - // metal roughness - #if ${defines.USE_METALNESSTEXTURE} - @group(0) @binding(${ - defines.metalnessRoughnessTextureBinding - }) var metalnessRoughnessTexture: texture_2d; - @group(0) @binding(${defines.metalnessRoughnessSamplerBinding}) var metalnessRoughnessSampler: sampler; - #endif - // occlusion texture - #if ${defines.USE_AOTEXTURE} - @group(0) @binding(${defines.aoTextureBinding}) var aoTexture: texture_2d; - @group(0) @binding(${defines.aoSamplerBinding}) var aoSampler: sampler; - #endif - #if ${defines.USE_NORMALTEXTURE} - #include - #include - #else - #include - #endif - #if ${defines.USE_IBL} - #include - #endif - @fragment - fn main(input:FragInput) -> @location(0) vec4 - { - var perceptualRoughness:f32 = materialUniform.roughness; - var metallic:f32 = materialUniform.metallic; + #if ${defines.USE_LIGHTTEXTURE} + lightTextureIntensity:f32, + #endif + + #if ${defines.USE_ENVTEXTURE} + envTextureIntensity:f32, + + flipEnvTexture:f32, + #endif + + #if ${defines.USE_BUMPTEXTURE} + bumpScale:f32; + #endif + + #if ${defines.USE_DISPLACEMENTTEXTURE} + + displacementScale:f32, + + displacementBias:f32, + #endif + + #if ${defines.USE_MORPHTARGETS} + + morphTargetBaseInfluence:f32, + + #if ${defines.MORPHTARGETS_TEXTURE} + + morphTargetsTextureSize:vec2, + + MORPHTARGETS_COUNT:u32, + + #endif + + morphTargetInfluences:array, + + #endif + } + + `; +} +function pbrTexture(defines) { + return wgslParseDefines` + #if ${defines.USE_BUMPTEXTURE} + @group(0) @binding(${defines.bumpTextureBinding}) var bumpTexture: texture_2d; + #endif + #if ${defines.USE_TRANSMISSION} + #if ${defines.USE_TRANSMISSIONTEXTURE} + @group(0) @binding(${defines.transmissionTextureBinding}) var transmissionTexture: texture_2d; + #endif + #if ${defines.USE_THICKNESSTEXTURE} + @group(0) @binding(${defines.thicknessTextureBinding}) var thicknessTexture: texture_2d; + #endif + @group(0) @binding(${defines.transmissionSamplerTextureBinding}) var transmissionSamplerTexture: texture_2d; + #endif + #if ${defines.USE_ENVTEXTURE} + @group(0) @binding(${defines.envTextureBinding}) var envTexture: texture_cube; + #endif + #if ${defines.USE_NORMALTEXTURE} + @group(0) @binding(${defines.normalTextureBinding}) var normalTexture: texture_2d; + #endif + + #if ${defines.USE_CLEARCOATTEXTURE} + @group(0) @binding(${defines.clearcoatTextureBinding}) var clearcoatTexture: texture_2d; + #endif + + #if ${defines.USE_CLEARCOAT_ROUGHNESSTEXTURE} + @group(0) @binding(${defines.clearcoatRclearcoatRoughnessTextureBinding}) var clearcoatRoughnessTexture: texture_2d; + #endif + + #if ${defines.USE_CLEARCOAT_NORMALTEXTURE} + @group(0) @binding(${defines.clearcoatNormalTextureBinding}) var clearcoatNormalTexture: texture_2d; + #endif + + #if ${defines.USE_IRIDESCENCETEXTURE} + @group(0) @binding(${defines.iridescenceTextureBinding}) var iridescenceTexture: texture_2d; + #endif + + #if ${defines.USE_IRIDESCENCE_THICKNESSTEXTURE} + @group(0) @binding(${defines.iridescenceThicknessTextureBinding}) var iridescenceThicknessTexture: texture_2d; + #endif + + #if ${defines.USE_ROUGHNESSTEXTURE} + @group(0) @binding(${defines.roughnessTextureBinding}) var roughnessTexture: texture_2d; + #endif + #if ${defines.USE_METALNESSTEXTURE} - let mrSample:vec4 = textureSample(metalnessRoughnessTexture,metalnessRoughnessSampler, input.uv); - perceptualRoughness = mrSample.g * perceptualRoughness; - metallic = mrSample.b * metallic; + @group(0) @binding(${defines.metalnessTextureBinding}) var metalnessTexture: texture_2d; #endif - perceptualRoughness = clamp(perceptualRoughness, c_MinRoughness, 1.0); - metallic = clamp(metallic, 0.0, 1.0); - let alphaRoughness:f32 = perceptualRoughness * perceptualRoughness; + #if ${defines.SPECULAR} + #if ${defines.USE_SPECULARINTENSITYTEXTURE} + @group(0) @binding(${defines.specularIntensityTextureBinding}) var specularIntensityTexture: texture_2d; + #endif - // The albedo may be defined from a base texture or a flat color - #if ${defines.USE_TEXTURE} - let baseColor:vec4 = textureSample(baseColorTexture,baseColorSampler, input.uv) ; - #else - let baseColor:vec4 = vec4(materialUniform.color,1.0); + #if ${defines.USE_SPECULARCOLORTEXTURE} + @group(0) @binding(${defines.specularColorTextureBinding}) var specularColorTexture: texture_2d; + #endif #endif - #if ${defines.USE_NORMALTEXTURE} - let n:vec3 = getNormalByNormalTexture(input); - #else - let n:vec3 = getNormal(input); + #if ${defines.USE_SHEEN} + #if ${defines.USE_SHEENCOLORTEXTURE} + @group(0) @binding(${defines.sheenColorTextureBinding}) var sheenColorTexture: texture_2d; + #endif + #if ${defines.USE_SHEENROUGHNESSTEXTURE} + @group(0) @binding(${defines.sheenRoughnessTextureBinding}) var sheenRoughnessTexture: texture_2d; + #endif #endif - var material:PhysicalMaterial; - material.diffuseColor=baseColor.rgb*( 1.0 - metallic ); - material.roughness=perceptualRoughness; - material.specularColor=mix( vec3( 0.04), baseColor.rgb, metallic ); - var geometry:Geometry; - geometry.normal=n; - geometry.viewDir=normalize(systemUniform.cameraPosition - input.worldPos); - geometry.position=input.worldPos; - geometry.dotNV = saturate(dot(geometry.normal, geometry.viewDir) ); - //light shading - var reflectedLight=parseLights(geometry,material); - var color=reflectedLight.directDiffuse+reflectedLight.directSpecular; - //IBL - #if ${defines.USE_IBL && defines.HAS_UV} - var reflectedLightDiffuse=indirectDiffuse_Physical(geometry,material); - var reflectedLightSpecular=indirectSpecular_Physical(geometry,material); - color+=reflectedLightDiffuse.indirectDiffuse; - color+=reflectedLightSpecular.indirectSpecular; + + #if ${defines.USE_TEXTURE} + @group(0) @binding(${defines.baseSamplerBinding}) var baseSampler: sampler; + @group(0) @binding(${defines.baseTextureBinding}) var baseTexture: texture_2d; + #endif + + #if ${defines.USE_ALPHATEXTURE} + @group(0) @binding(${defines.alphaTextureBinding}) var alphaTexture: texture_2d; #endif + #if ${defines.USE_AOTEXTURE} - let ao:f32 = textureSample(aoTexture,aoSampler, input.uv).r; - color = mix(color, color * ao, materialUniform.occlusionStrength); + @group(0) @binding(${defines.aoTextureBinding}) var aoTexture: texture_2d; + + #endif + #if ${defines.USE_LIGHTTEXTURE} + @group(0) @binding(${defines.lightTextureBinding}) var lightTexture: texture_2d; #endif #if ${defines.USE_EMISSIVETEXTURE} - let emissive:vec3 = textureSample(emissiveTexture, emissiveSampler,input.uv).rgb ; - color += emissive; + @group(0) @binding(${defines.emissiveTextureBinding}) var emissiveTexture: texture_2d; #endif - return vec4(color, baseColor.a); + `; +} + +function pbrUtils(defines) { + return wgslParseDefines` + const PI:f32= 3.141592653589793; + const PI2:f32= 6.283185307179586; + const PI_HALF:f32= 1.5707963267948966; + const RECIPROCAL_PI:f32= 0.3183098861837907; + const RECIPROCAL_PI2:f32= 0.15915494309189535; + const EPSILON:f32= 1e-6; + + fn pow2(x:f32 )->f32 { + return x*x; } - `; + fn pow2Vector(x:vec3 )->vec3 { + return x*x; + } + fn pow3( x:f32 )->f32 { + return x*x*x; + } + fn pow4( x:f32 )->f32 { + let x2:f32 = x*x; + return x2*x2; + } + fn max3( v:vec3 )->f32 { + return max( max( v.x, v.y ), v.z ); + } + fn average(v:vec3 )->f32 { + return dot( v, vec3( 0.3333333 ) ); + } + fn rand( uv:vec2 )->f32 { + let a:f32 = 12.9898; + let b:f32 = 78.233; + let c:f32 = 43758.5453; + let dt:f32 = dot( uv.xy, vec2( a, b ) ); + let sn:f32 = dt % PI; + return fract( sin( sn ) * c ); + } + fn transformDirection( dir:vec3, matrix:mat4x4 )->vec3 { + return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); + } + + fn transposeMat3( m:mat3x3 )->mat3x3 { + var tmp:mat3x3; + tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x ); + tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y ); + tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z ); + return tmp; + } + fn luminance( rgb:vec3 )->f32 { + let weights:vec3 = vec3(0.2126729, 0.7151522, 0.0721750 ); + return dot( weights, rgb ); + } + fn LinearToneMapping( color:vec3,toneMappingExposure:f32 )->vec3 { + return toneMappingExposure * color; + } + + fn ReinhardToneMapping( color:vec3,toneMappingExposure:f32 )->vec3 { + var tempColor:vec3; + tempColor=color; + tempColor *= toneMappingExposure; + return saturate( tempColor / ( vec3( 1.0 ) + tempColor ) ); + } + fn CustomToneMapping( color:vec3 )->vec3 { + return color; + } + fn toneMapping( color:vec3,toneMappingExposure:f32 )->vec3 { + return ReinhardToneMapping( color,toneMappingExposure ); + } + + fn LinearToLinear( value:vec4 )->vec4 { + return value; + } + fn lessThanEqual(a:vec3,b:vec3)->vec3{ + let xValue:f32=select(b.x,a.x,a.x<=b.x); + let yValue:f32=select(b.y,a.y,a.y<=b.y); + let zValue:f32=select(b.z,a.z,a.z<=b.z); + return vec3(xValue,yValue,zValue); + } + fn LinearTosRGB( value:vec4 )->vec4 { + return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a ); + } + fn linearToOutputTexel(value:vec4 )->vec4 { + return LinearTosRGB( value ); + } + `; +} + +function blinn_phong(defines) { + return ` + fn getPointLightInfo(pointLight:PointLight,worldPos:vec3,shininess:f32,N:vec3,V:vec3)->vec3{ + var color=vec3(0.0,0.0,0.0); + var direction:vec3 = worldPos - pointLight.position; + let dist:f32 = length( direction ); + direction = normalize(direction); + let decay = clamp(1.0 - pow(dist / pointLight.distance, 4.0), 0.0, 1.0); + + let d = max( dot( N, -direction ), 0.0 ) * decay; + color += pointLight.color * d; + + let halfDir:vec3 = normalize( V - direction ); + let s:f32 = pow( clamp( dot( N, halfDir ), 0.0, 1.0 ), shininess ) * decay; + color += pointLight.color * s; + return color; + } + fn getSpotLightInfo(spotLight:SpotLight,worldPos:vec3,shininess:f32,N:vec3,V:vec3)->vec3{ + var color=vec3(0.0,0.0,0.0); + var direction:vec3 = spotLight.position - worldPos; + let lightDistance:f32 = length(direction); + direction = normalize(direction); + let angleCos:f32 = dot( direction, -spotLight.direction ); + let decay:f32 = clamp(1.0 - pow(lightDistance/spotLight.distance, 4.0), 0.0, 1.0); + let spotEffect:f32 = smoothstep( spotLight.penumbraCos, spotLight.coneCos, angleCos ); + let decayTotal:f32 = decay * spotEffect; + let d:f32 = max( dot( N, direction ), 0.0 ) * decayTotal; + color += spotLight.color * d; + let halfDir:vec3 = normalize( V + direction ); + let s:f32 = pow( clamp( dot( N, halfDir ), 0.0, 1.0 ), shininess ) * decayTotal; + color += spotLight.color * s; + return color; + } + struct DirectionalLight { + direction: vec3, + color: vec3, + }; + fn getDirectLightInfo(directionalLight:DirectionalLight,shininess:f32,N:vec3,V:vec3)->vec3{ + var color=vec3(0.0,0.0,0.0); + let d:f32 = max(dot(N, -directionalLight.direction), 0.0); + color += directionalLight.color * d; + + let halfDir:vec3 = normalize( V - directionalLight.direction ); + let s:f32 = pow( clamp( dot( N, halfDir ), 0.0, 1.0 ), shininess ); + color += directionalLight.color * s; + return color; + } + `; } -function Blur(defines) { +function phongFunction(defines) { return ` - struct FragInput { - @location(0) uv: vec2, - } - struct BlurUniforms { - direction:vec2, - } - fn gaussianPdf(x:f32, sigma:f32)->f32 { - return 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma; - } - @group(0) @binding(0) var blurUniforms : BlurUniforms; - @group(0) @binding({{tDiffuseBinding}}) var tDiffuse: texture_2d; - @group(0) @binding({{tSamplerBinding}}) var tSampler: sampler; - @fragment - fn main(input:FragInput) -> @location(0) vec4 { - let invSize:vec2 = vec2(1.0,1.0) / vec2(textureDimensions(tDiffuse)); - let fSigma:f32 =f32(${defines.SIGMA}); - var weightSum:f32 = gaussianPdf(0.0, fSigma); - let baseColor=textureSample(tDiffuse, tSampler, input.uv); - var diffuseSum:vec3 = baseColor.rgb * weightSum; - let uvOffset:vec2 = blurUniforms.direction * invSize; - for( var i : u32 = 1; i < ${defines.KERNEL_RADIUS};i = i + 1 ) { - let x:f32 = f32(i); - let w:f32 = gaussianPdf(x, fSigma); - let sample1:vec3=textureSample(tDiffuse, tSampler, input.uv+ uvOffset*x).rgb; - let sample2:vec3=textureSample(tDiffuse, tSampler, input.uv- uvOffset*x).rgb; - diffuseSum =diffuseSum+ (sample2+sample2)* w; - weightSum += 2.0 * w; - } - diffuseSum/=weightSum; - return vec4(diffuseSum,baseColor.a); + fn G_BlinnPhong_Implicit( )->f32 { + + // geometry term is (n dot l)(n dot v) / 4(n dot l)(n dot v) + return 0.25; + } - `; -} + fn D_BlinnPhong( shininess:f32, dotNH:f32 )->f32 { + + return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow(dotNH, shininess); -function LuminosityHigh(defines) { - return ` - struct LuminosityUniforms{ - luminosityThreshold:f32, - smoothWidth:f32, - defaultColor:vec3, - defaultOpacity:f32, } - struct FragInput { - @location(0) uv: vec2, - }; - @group(0) @binding(0) var luminosityUniforms : LuminosityUniforms; - @group(0) @binding({{tDiffuseBinding}}) var tDiffuse: texture_2d; - @group(0) @binding({{tSamplerBinding}}) var tSampler: sampler; - @fragment - fn main(input:FragInput)-> @location(0) vec4 { + fn BRDF_BlinnPhong( lightDir:vec3, viewDir:vec3, normal:vec3, specularColor:vec3, shininess:f32 )->vec3 { - let texel:vec4 = textureSample(tDiffuse, tSampler, input.uv); + let halfDir = normalize( lightDir + viewDir ); - let luma:vec3 = vec3( 0.299,0.587,0.114 ); + let dotNH:f32 = saturate( dot( normal, halfDir ) ); + let dotVH:f32 = saturate( dot( viewDir, halfDir ) ); - let v:f32 = dot( texel.xyz, luma ); + let F = F_Schlick( specularColor, 1.0, dotVH ); - let outputColor:vec4 = vec4( luminosityUniforms.defaultColor.rgb, luminosityUniforms.defaultOpacity ); + let G:f32 = G_BlinnPhong_Implicit( ); - let alpha:f32 = smoothstep( luminosityUniforms.luminosityThreshold, luminosityUniforms.luminosityThreshold + luminosityUniforms.smoothWidth, v ); + let D = D_BlinnPhong( shininess, dotNH ); - return mix( outputColor, texel, alpha ); + return F * ( G * D ); + + } + fn RE_Direct_BlinnPhong( directLight:IncidentLight,geometry:GeometricContext, material:BlinnPhongMaterial )->ReflectedLight{ + var reflectedLight:ReflectedLight; + let dotNL:f32 = saturate(dot(geometry.normal, directLight.direction)); + let irradiance:vec3 = dotNL*directLight.color; + + reflectedLight.directDiffuse= irradiance * BRDF_Lambert( material.diffuseColor ); + + reflectedLight.directSpecular= irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength; + return reflectedLight; + } + fn RE_IndirectDiffuse_BlinnPhong( irradiance:vec3, geometry:GeometricContext, material:BlinnPhongMaterial)->ReflectedLight { + var reflectedLight:ReflectedLight; + reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); + return reflectedLight; } `; } -function blendFrag(defines) { +function phongUtils(defines) { return ` - struct FragInput { - @location(0) uv: vec2, + struct BlinnPhongMaterial { + diffuseColor:vec3, + specularColor:vec3, + specularShininess:f32, + specularStrength:f32, }; - @group(0) @binding({{tDiffuseBinding}}) var tDiffuse: texture_2d; - @group(0) @binding({{baseColorTextureBinding}}) var baseColorTexture: texture_2d; - @group(0) @binding({{tSamplerBinding}}) var tSampler: sampler; - @fragment - fn main(input:FragInput) -> @location(0) vec4 { - let postColor:vec4 = textureSample(tDiffuse, tSampler, input.uv); - let baseColor:vec4 = textureSample(baseColorTexture, tSampler, input.uv); - return baseColor+postColor; - } - `; + const RECIPROCAL_PI:f32= 0.3183098861837907; + fn pow2( x:f32 )->f32 { return x*x; } + fn pow3( x:f32 )->f32 { return x*x*x; } + fn pow4(x:f32 )->f32 { let x2 = x*x; return x2*x2; } + fn max3( v:vec3 )->f32 { return max( max( v.x, v.y ), v.z ); } + fn average(v:vec3 )->f32 { + let result=vec3( 0.3333333, 0.3333333, 0.3333333); + return dot( v,result ); + } + `; +} + +function skinVertHeader(defines) { + return wgslParseDefines` + #if ${defines.HAS_SKIN} + struct JointsUniform{ + matrixs:array, + } + struct InverseBindMatricesUniform{ + matrixs:array, + } + @binding(${defines.skinJointsBufferBinding}) @group(0) var jointsUniform : JointsUniform; + @binding(${defines.invsBufferBinding}) @group(0) var inverseBindMatricesUniform : InverseBindMatricesUniform; + fn getSkinMatrix(joints: vec4f, weights: vec4f) -> mat4x4 { + let joint0 = jointsUniform.matrixs[u32(joints.x)] * inverseBindMatricesUniform.matrixs[u32(joints.x)]; + let joint1 = jointsUniform.matrixs[u32(joints.y)] * inverseBindMatricesUniform.matrixs[u32(joints.y)]; + let joint2 = jointsUniform.matrixs[u32(joints.z)] * inverseBindMatricesUniform.matrixs[u32(joints.z)]; + let joint3 = jointsUniform.matrixs[u32(joints.w)] * inverseBindMatricesUniform.matrixs[u32(joints.w)]; + + let skinMatrix = joint0 * weights.x + + joint1 * weights.y + + joint2 * weights.z + + joint3 * weights.w; + return skinMatrix; + } + #endif + `; +} +function skinVertMain(defines) { + return wgslParseDefines` + #if ${defines.HAS_SKIN} + modelMatrix =getSkinMatrix(input.joint0,input.weight0); + vNormalView = normalize((materialUniform.normalMatrix * modelMatrix * vec4(input.normal, 0.0)).xyz); + #endif + `; +} + +function PbrMaterialStruct(defines) { + return wgslParseDefines` + struct MaterialUniform { + modelMatrix: mat4x4, + color: vec3, + opacity:f32, + normalMatrix: mat4x4, + emissive:vec3, + metallic:f32, + roughness:f32, + #if ${defines.USE_NORMALTEXTURE} + normalTextureScale:vec2, + #endif + #if ${defines.USE_AOTEXTURE} + occlusionStrength:f32, + #endif + } + `; } +const ShaderChunk = { + light: light, + brdf: brdf, + phongFunction: phongFunction, + phongUtils: phongUtils, + lightCommon: lightCommon, + pbrStruct: pbrStruct, + pbrFunction: pbrFunction, + pbrTexture: pbrTexture, + pbrUtils: pbrUtils, + environment: environment, + blinn_phong: blinn_phong, + getNormal: getNormal, + getTBN: getTBN, + getNormalByNormalTexture: getNormalByNormalTexture, + ibl: ibl, + skinVertMain, + skinVertHeader, + FragInput, + VertexInput, + VertexOutput, + PbrMaterialStruct, + SystemUniform, + instanceVertMain, + instanceVertHeader, + TextureAndSamplerDefine +}; + function shadowMapDebuggerFrag(defines) { return ` @group(0) @binding(1) var shadowSampler: sampler; @@ -10360,6 +10378,20 @@ function shadowMapDebuggerVert(defines) { `; } +// import Color from "../../math/Color"; +function shadowMapFrag(defines) { + return ` + struct VertexOutput { + @builtin(position) position: vec4, + @location(0) color: vec4, + }; + @fragment + fn main(input:VertexOutput) -> @location(0) vec4 { + return input.color; + } + `; +} + function shadowMapVert(defines) { return wgslParseDefines` struct VertexInput { @@ -10402,22 +10434,8 @@ function shadowMapVert(defines) { `; } -// import Color from "../../math/Color"; -function shadowMapFrag(defines) { - return ` - struct VertexOutput { - @builtin(position) position: vec4, - @location(0) color: vec4, - }; - @fragment - fn main(input:VertexOutput) -> @location(0) vec4 { - return input.color; - } - `; -} - function reduceComma(shader) { - //对所有的include处理 + // 对所有的include处理 const str = resolveIncludes(shader); return str; } @@ -10467,6 +10485,10 @@ const shaders = { shadowMap: { vert: shadowMapVert, frag: shadowMapFrag + }, + billboard: { + vert: billboard_vs, + frag: billboard_fs } }; function resolveIncludes(string) { @@ -10604,7 +10626,7 @@ function checkContainFloatType(uniforms) { hasArraytype }; } -function addUniformToShaderData(name, uniform, uniforms, shaderData, uniformBuffer) { +function addUniformToShaderData(name, uniform, uniforms, shaderData, mesh, uniformBuffer) { switch (uniform.type) { case "float": uniformBuffer.setUniform( @@ -10650,6 +10672,7 @@ function addUniformToShaderData(name, uniform, uniforms, shaderData, uniformBuff }, UniformEnum.FloatVec4 ); + break; case "mat2": uniformBuffer.setUniform( name, @@ -10667,11 +10690,16 @@ function addUniformToShaderData(name, uniform, uniforms, shaderData, uniformBuff }, UniformEnum.Mat3 ); + break; case "mat4": uniformBuffer.setUniform( name, () => { - return uniforms[name].value; + return name == "modelMatrix" + ? mesh?.modelMatrix + : name === "normalMatrix" + ? mesh.normalMatrix + : uniforms[name].value; }, UniformEnum.Mat4 ); @@ -11028,13 +11056,19 @@ class Material { set opacity(v) { this._opacity = v; } - onBeforeRender() {} - onBeforeCompile() {} + onBeforeRender() { + // callback + } + onBeforeCompile() { + // callback + } clone() { return null; } - update(frameState, mesh) {} - createShaderData(mesh, frameState) { + update(frameState, mesh) { + // update material + } + createShaderData() { if (this.shaderData) this.shaderData.destroy(); this.shaderData = new ShaderData(this.type, 0); this.ready = true; @@ -11083,7 +11117,7 @@ class ShaderMaterial extends Material { return new ShaderMaterial(this.shaderMaterialParms); } createShaderData(mesh) { - super.createShaderData(mesh); + super.createShaderData(); const result = checkContainFloatType(this.uniforms); if (result.hasFloat) { this.uniformBuffer = result.hasArraytype @@ -11102,6 +11136,7 @@ class ShaderMaterial extends Material { this.uniforms[uniformsName], this.uniforms, this.shaderData, + mesh, this.uniformBuffer ); }); @@ -11123,6 +11158,7 @@ class Mesh extends RenderObject { this.geometry = geometry; this.material = material; this.type = RenderObjectType.Mesh; + this.frustumCull = true; this.uid = createGuid(); this.subCommands = {}; } @@ -11152,12 +11188,16 @@ class Mesh extends RenderObject { frameState.renderQueue.opaque.push(this); } } - beforeRender() {} - afterRender() {} + beforeRender() { + // before render + } + afterRender() { + // after render + } getDrawCommand(overrideMaterial, commandSubType, lightManger) { if (!this.drawCommand || this.material.dirty) { this.material.shaderSource.setDefines( - Object.assign(this.material.shaderData.defines, this.geometry.defines) + Object.assign({}, this.material.shaderData.defines, this.geometry.defines) ); if (this.material.dirty) this.material.dirty = false; this.drawCommand = new DrawCommand({ @@ -11177,8 +11217,7 @@ class Mesh extends RenderObject { if (overrideMaterial) { if (!this.subCommands[commandSubType]) { const copyMat = overrideMaterial.clone(); - overrideMaterial.update(); - copyMat.update(); + copyMat.update(undefined, this); if (copyMat.dirty) copyMat.dirty = false; this.subCommands[commandSubType] = this.drawCommand.shallowClone(copyMat); } @@ -11255,12 +11294,12 @@ class ColorMaterial extends Material { }); } update(frameState, mesh) { - if (!this.shaderData || this.dirty) this.createShaderData(mesh); + if (!this.shaderData || this.dirty) this.createShaderData(); const uniformBuffer = new UniformBuffer({ label: "color" }); uniformBuffer.setUniform( "modelMatrix", () => { - return null; + return mesh.modelMatrix; }, UniformEnum.Mat4 ); @@ -11495,12 +11534,12 @@ class SkyBoxMaterial extends Material { } } createShaderData(mesh) { - super.createShaderData(mesh); + super.createShaderData(); const uniformBuffer = new UniformBuffer({ label: "skybox" }); uniformBuffer.setUniform( "modelMatrix", () => { - return null; + return mesh.modelMatrix; }, UniformEnum.Mat4 ); @@ -11553,11 +11592,10 @@ class InstanceMesh extends Mesh { this.hasAddInstances = false; } update(frameState, camera) { - // create - this.geometry.update(frameState); - this.material.update(frameState, this); // update instances visiblity this.checkInstancesVisiblity({ frameState, camera }); + this.geometry.update(frameState); + this.material.update(frameState, this); if (!this.hasAddInstances) this.addUniformsToMaterial(); this.instanceCount = this.renderInstances.length; if (this.renderInstances.length < 1) return; @@ -11579,11 +11617,16 @@ class InstanceMesh extends Mesh { } checkInstancesVisiblity(options) { const { frameState, camera } = options; + const preFrameInstanceCount = this.renderInstances.length; + this.renderInstances = []; this.instances.forEach((instance) => { instance.updateMatrix(this?.parent?.modelMatrix); instance.visiblity = this.getInstanceVisiblity({ instance, frameState, camera }); if (instance.visiblity) this.renderInstances.push(instance); }); + this.material.dirty = this.renderInstances.length === preFrameInstanceCount; + // rebuild instanceMatrixsBuffer + if (this.material.dirty) this.hasAddInstances = false; } getInstanceVisiblity(options) { const { instance, frameState, camera } = options; @@ -12066,12 +12109,12 @@ class BlinnPhongMaterial extends Material { if (!this.shaderData || this.dirty) this.createShaderData(mesh); } createShaderData(mesh) { - super.createShaderData(mesh); + super.createShaderData(); const uniformBuffer = new UniformBuffer({ label: "phong" }); uniformBuffer.setUniform( "modelMatrix", () => { - return null; + return mesh.modelMatrix; }, UniformEnum.Mat4 ); @@ -12163,11 +12206,11 @@ class PbrMaterial extends Material { update(frameState, mesh) { if (!textureCache.getTexture("specular")) return; if (!this.shaderData || this.dirty) { - this.createShaderData(mesh, frameState); + this.createShaderData(mesh); } } - createShaderData(mesh, frameState) { - super.createShaderData(mesh); + createShaderData(mesh) { + super.createShaderData(); const uniformBuffer = new UniformBuffer({ label: "pbr" }); uniformBuffer.setUniform( "modelMatrix", @@ -15898,4 +15941,4 @@ export { loadGLTF, loadTexture }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3JlL1dlYkdQVUNvbnN0YW50LnRzIiwiLi4vc3JjL3JlbmRlci9CdWZmZXIudHMiLCIuLi9zcmMvcmVuZGVyL1BpcGVsaW5lTGF5b3V0LnRzIiwiLi4vc3JjL3JlbmRlci9QaXBlbGluZS50cyIsIi4uL3NyYy9yZW5kZXIvRHJhd0NvbW1hbmQudHMiLCIuLi9zcmMvY29yZS9XZWJHUFVUeXBlcy50cyIsIi4uL3NyYy91dGlscy9NaXBtYXBHZW5lcmF0b3IudHMiLCIuLi9zcmMvdXRpbHMvZGVmYXVsdFZhbHVlLnRzIiwiLi4vc3JjL3JlbmRlci9SZW5kZXJTdGF0ZS50cyIsIi4uL3NyYy9yZW5kZXIvQ29udGV4dC50cyIsIi4uL3NyYy9yZW5kZXIvVGV4dHVyZS50cyIsIi4uL3NyYy9yZW5kZXIvU2FtcGxlci50cyIsIi4uL3NyYy9yZW5kZXIvQXR0YWNobWVudC50cyIsIi4uL3NyYy91dGlscy9kZWZpbmVkLnRzIiwiLi4vbm9kZV9tb2R1bGVzL21lcnNlbm5lLXR3aXN0ZXIvc3JjL21lcnNlbm5lLXR3aXN0ZXIuanMiLCIuLi9zcmMvbWF0aC9NYXRoLnRzIiwiLi4vc3JjL21hdGgvVmVjdG9yMi50cyIsIi4uL3NyYy9tYXRoL1ZlY3RvcjMudHMiLCIuLi9zcmMvcmVuZGVyL0F0dHJpYnV0ZS50cyIsIi4uL3NyYy9yZW5kZXIvQmluZEdyb3VwLnRzIiwiLi4vc3JjL3JlbmRlci9CaW5kR3JvdXBFbnRpdHkudHMiLCIuLi9zcmMvbWF0aC9NYXRyaXgzLnRzIiwiLi4vc3JjL21hdGgvVmVjdG9yNC50cyIsIi4uL3NyYy9tYXRoL01hdHJpeDQudHMiLCIuLi9zcmMvY29yZS9Cb3VuZGluZ1NwaGVyZS50cyIsIi4uL3NyYy9yZW5kZXIvSW5kZXhCdWZmZXIudHMiLCIuLi9zcmMvcmVuZGVyL0F0dHJpYnV0ZXMudHMiLCIuLi9zcmMvcmVuZGVyL1ZlcnRleHRCdWZmZXIudHMiLCIuLi9zcmMvdXRpbHMvY29tYmluZS50cyIsIi4uL3NyYy9nZW9tZXRyeS9HZW9tZXRyeS50cyIsIi4uL3NyYy9nZW9tZXRyeS9QbGFuZUdlb21ldHJ5LnRzIiwiLi4vc3JjL21hdGgvUXVhdGVybmlvbi50cyIsIi4uL3NyYy9jb3JlL1JlbmRlck9iamVjdC50cyIsIi4uL3NyYy9saWdodC9MaWdodC50cyIsIi4uL3NyYy9tYXRoL0NvbG9yLnRzIiwiLi4vc3JjL21hdGgvTWF0cml4Mi50cyIsIi4uL3NyYy9yZW5kZXIvVW5pZm9ybXMudHMiLCIuLi9zcmMvcmVuZGVyL1VuaWZvcm1CdWZmZXIudHMiLCIuLi9zcmMvc2hhZGVyL1dnc2xQcmVwcm9jZXNzb3IudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL2F0dHJpYnV0ZS9GcmFnSW5wdXQudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL2F0dHJpYnV0ZS9WZXJ0ZXhJbnB1dC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvYXR0cmlidXRlL1ZlcnRleE91dHB1dC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvY29tbW9uL1N5c3RlbVVuaWZvcm0udHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL2Vudmlyb25tZW50L2Vudmlyb25tZW50LnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9pbnN0YW5jZS9JbnN0YW5jZS50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvbGlnaHQvbGlnaHQudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL2xpZ2h0L2xpZ2h0Q29tbW9uLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9ub3JtYWwvZ2V0Tm9ybWFsQmFja1VwLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9wYnIvYnJkZi50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvcGJyL2libC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvcGJyL3BickZ1bmN0aW9uLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9wYnIvcGJyU3RydWN0LnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9wYnIvcGJyVGV4dHVyZS50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvcGJyL3BiclV0aWxzLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9waG9uZy9ibGlubl9waG9uZy50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvcGhvbmcvcGhvbmdGdW5jdGlvbi50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvcGhvbmcvcGhvbmdVdGlscy50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvc2tpbi9Ta2luVmVydC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvc3RydWN0L1Bick1hdGVyaWFsU3RydWN0LnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9TaGFkZXJDaHVuay50cyIsIi4uL3NyYy9zaGFkZXIvbWF0ZXJpYWwvcGhvbmdWZXJ0LnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9waG9uZ0ZyYWcudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL2NvbG9yRnJhZy50cyIsIi4uL3NyYy9zaGFkZXIvbWF0ZXJpYWwvY29sb3JWZXJ0LnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9wYnJGcmFnLnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9wYnJWZXJ0LnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9za3lCb3hGcmFnLnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9za3lCb3hWZXJ0LnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9xdWFkRnJhZy50cyIsIi4uL3NyYy9zaGFkZXIvbWF0ZXJpYWwvcXVhZFZlcnQudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL3Bicl92cy50cyIsIi4uL3NyYy9zaGFkZXIvbWF0ZXJpYWwvcGJyX2ZzLnRzIiwiLi4vc3JjL3NoYWRlci9wb3N0UHJvY2Vzcy9ibG9vbS9CbHVyLnRzIiwiLi4vc3JjL3NoYWRlci9wb3N0UHJvY2Vzcy9ibG9vbS9MdW1pbm9zaXR5SGlnaC50cyIsIi4uL3NyYy9zaGFkZXIvcG9zdFByb2Nlc3MvYmxlbmQvYmxlbmRGcmFnLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9zaGFkb3cvc2hhZG93TWFwRGVidWdnZXJGcmFnLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9zaGFkb3cvc2hhZG93TWFwRGVidWdnZXJWZXJ0LnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9zaGFkb3cvc2hhZG93TWFwVmVydC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvc2hhZG93L3NoYWRvd01hcEZyYWcudHMiLCIuLi9zcmMvc2hhZGVyL1NoYWRlcnMudHMiLCIuLi9zcmMvc2hhZGVyL1NoYWRlclNvdXJjZS50cyIsIi4uL3NyYy91dGlscy91bmlmb3JtVXRpbHMudHMiLCIuLi9zcmMvcmVuZGVyL0JpbmRHcm91cExheW91dC50cyIsIi4uL3NyYy9yZW5kZXIvQmluZEdyb3VwTGF5b3V0RW50cnkudHMiLCIuLi9zcmMvcmVuZGVyL1NoYWRlckRhdGEudHMiLCIuLi9zcmMvbWF0ZXJpYWwvTWF0ZXJpYWwudHMiLCIuLi9zcmMvbWF0ZXJpYWwvU2hhZGVyTWF0ZXJpYWwudHMiLCIuLi9zcmMvdXRpbHMvY3JlYXRlR3VpZC50cyIsIi4uL3NyYy9tZXNoL01lc2gudHMiLCIuLi9zcmMvaGVscGVyL1NoYWRvd01hcERlYnVnZ2VyLnRzIiwiLi4vc3JjL21hdGVyaWFsL0NvbG9yTWF0ZXJpYWwudHMiLCIuLi9zcmMvbWVzaC9BeGVzLnRzIiwiLi4vc3JjL2dlb21ldHJ5L1NreUJveEdlb21ldHJ5LnRzIiwiLi4vc3JjL3V0aWxzL2Rlc3Ryb3lPYmplY3QudHMiLCIuLi9zcmMvY29yZS9UZXh0dXJlQ2FjaGUudHMiLCIuLi9zcmMvbG9hZGVyL0N1YmVUZXh0dXJlTG9hZGVyLnRzIiwiLi4vc3JjL21hdGVyaWFsL1NreUJveE1hdGVyaWFsLnRzIiwiLi4vc3JjL21lc2gvU2t5Qm94LnRzIiwiLi4vc3JjL21lc2gvSW5zdGFuY2UudHMiLCIuLi9zcmMvbWVzaC9JbnN0YW5jZU1lc2gudHMiLCIuLi9zcmMvdXRpbHMvR2VvbWV0cnlVdGlscy50cyIsIi4uL3NyYy9nZW9tZXRyeS9TcGhlcmVHZW9tZXRyeS50cyIsIi4uL3NyYy9nZW9tZXRyeS9Cb3hHZW9tZXRyeS50cyIsIi4uL3NyYy9nZW9tZXRyeS9Ub3J1c0tub3RHZW9tZXRyeS50cyIsIi4uL3NyYy9tYXRlcmlhbC9CbGlublBob25nTWF0ZXJpYWwudHMiLCIuLi9zcmMvbWF0ZXJpYWwvUGJyTWF0ZXJpYWwudHMiLCIuLi9zcmMvY29yZS9FdmVudERpc3BhdGNoZXIudHMiLCIuLi9zcmMvY29yZS9SZW5kZXJRdWV1ZS50cyIsIi4uL3NyYy9jb3JlL0ZyYW1lU3RhdGUudHMiLCIuLi9zcmMvbGlnaHQvQW1iaWVudExpZ2h0LnRzIiwiLi4vc3JjL2NvcmUvTGlnaHRNYW5nZXIudHMiLCIuLi9zcmMvY29yZS9NZXNoTWFuZ2VyLnRzIiwiLi4vc3JjL3JlbmRlci9SZW5kZXJUYXJnZXQudHMiLCIuLi9zcmMvcG9zdC1wcm9jZXNzL1Jlc29sdmVGcmFtZS50cyIsIi4uL3NyYy9wb3N0LXByb2Nlc3MvUG9zdEVmZmVjdENvbGxlY3Rpb24udHMiLCIuLi9zcmMvcGFzcy9QYXNzLnRzIiwiLi4vc3JjL3Bhc3MvQmFzaWNQYXNzLnRzIiwiLi4vc3JjL21hdGgvUGxhbmUudHMiLCIuLi9zcmMvY29yZS9DdWxsaW5nVm9sdW1lLnRzIiwiLi4vc3JjL2NhbWVyYS9DYW1lcmEudHMiLCIuLi9zcmMvY2FtZXJhL1BlcnNwZWN0aXZlQ2FtZXJhLnRzIiwiLi4vc3JjL2NhbWVyYS9Qb2ludExpZ2h0U2hhZG93Q2FtZXJhLnRzIiwiLi4vc3JjL2xpZ2h0L3NoYWRvd3MvQmFzZVNoYWRvdy50cyIsIi4uL3NyYy9saWdodC9zaGFkb3dzL1BvaW50TGlnaHRTaGFkb3cudHMiLCIuLi9zcmMvbGlnaHQvUG9pbnRMaWdodC50cyIsIi4uL3NyYy9wYXNzL1NoYWRvd1Bhc3MudHMiLCIuLi9zcmMvcmVuZGVycGlwZWxpbmUvRm9yd2FyZFJlbmRlckxpbmUudHMiLCIuLi9zcmMvU2NlbmUudHMiLCIuLi9zcmMvcG9zdC1wcm9jZXNzL1Bvc3RFZmZlY3QudHMiLCIuLi9zcmMvcG9zdC1wcm9jZXNzL0Jsb29tUG9zdEVmZmVjdC50cyIsIi4uL3NyYy9jYW1lcmEvT3J0aG9ncmFwaGljQ2FtZXJhLnRzIiwiLi4vc3JjL2xpZ2h0L3NoYWRvd3MvU3BvdExpZ2h0U2hhZG93LnRzIiwiLi4vc3JjL2xpZ2h0L1Nwb3RMaWdodC50cyIsIi4uL3NyYy9saWdodC9zaGFkb3dzL0RpcmVjdGlvbmFsTGlnaHRTaGFkb3cudHMiLCIuLi9zcmMvbGlnaHQvRGlyZWN0aW9uYWxMaWdodC50cyIsIi4uL3NyYy9tZXNoL05vZGUudHMiLCIuLi9zcmMvbWVzaC9TS2luTWVzaC50cyIsIi4uL3NyYy91dGlscy9nbHRmVXRpbHMudHMiLCIuLi9zcmMvbG9hZGVyL2dsdGYvbGlicy9BY2Nlc3Nvci50cyIsIi4uL3NyYy9sb2FkZXIvZ2x0Zi9saWJzL0FuaW1hdGlvbi50cyIsIi4uL3NyYy9sb2FkZXIvZ2x0Zi9saWJzL0FuaW1hdGlvbkNoYW5uZWwudHMiLCIuLi9zcmMvbG9hZGVyL2dsdGYvbGlicy9BbmltYXRpb25DaGFubmVsVGFyZ2V0LnRzIiwiLi4vc3JjL2xvYWRlci9nbHRmL3R5cGVzL2dsdGZUeXBlLnRzIiwiLi4vc3JjL2xvYWRlci9nbHRmL2xpYnMvQW5pbWF0aW9uU2FtcGxlci50cyIsIi4uL3NyYy9sb2FkZXIvR0xURkxvYWRlci50cyIsIi4uL3NyYy91dGlscy91dGlscy50cyIsIi4uL3NyYy9tYXRoL1NwaGVyaWNhbC50cyIsIi4uL3NyYy9jb250cm9sL09yYml0Q29udHJvbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBQcmVkZWZpbmVkQ29sb3JTcGFjZSB7XG5cdFNSR0IgPSBcInNyZ2JcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBQb3dlclByZWZlcmVuY2Uge1xuXHRMb3dQb3dlciA9IFwibG93LXBvd2VyXCIsXG5cdEhpZ2hQZXJmb3JtYW5jZSA9IFwiaGlnaC1wZXJmb3JtYW5jZVwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEZlYXR1cmVOYW1lIHtcblx0RGVwdGhDbGlwQ29udHJvbCA9IFwiZGVwdGgtY2xpcC1jb250cm9sXCIsXG5cdERlcHRoMjRVbm9ybVN0ZW5jaWw4ID0gXCJkZXB0aDI0dW5vcm0tc3RlbmNpbDhcIixcblx0RGVwdGgzMkZsb2F0U3RlbmNpbDggPSBcImRlcHRoMzJmbG9hdC1zdGVuY2lsOFwiLFxuXHRUZXh0dXJlQ29tcHJlc3Npb25CQyA9IFwidGV4dHVyZS1jb21wcmVzc2lvbi1iY1wiLFxuXHRUZXh0dXJlQ29tcHJlc3Npb25FVEMyID0gXCJ0ZXh0dXJlLWNvbXByZXNzaW9uLWV0YzJcIixcblx0VGV4dHVyZUNvbXByZXNzaW9uQVNUQyA9IFwidGV4dHVyZS1jb21wcmVzc2lvbi1hc3RjXCIsXG5cdFRpbWVzdGFtcFF1ZXJ5ID0gXCJ0aW1lc3RhbXAtcXVlcnlcIixcblx0SW5kaXJlY3RGaXJzdEluc3RhbmNlID0gXCJpbmRpcmVjdC1maXJzdC1pbnN0YW5jZVwiLFxuXHRTaGFkZXJGMTYgPSBcInNoYWRlci1mMTZcIixcblx0QkdSQThVbm9ybVN0b3JhZ2UgPSBcImJncmE4dW5vcm0tc3RvcmFnZVwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEJ1ZmZlclVzYWdlIHtcblx0TWFwUmVhZCA9IDEsXG5cdE1hcFdyaXRlID0gMixcblx0Q29weVNyYyA9IDQsXG5cdENvcHlEc3QgPSA4LFxuXHRJbmRleCA9IDE2LFxuXHRWZXJ0ZXggPSAzMixcblx0VW5pZm9ybSA9IDY0LFxuXHRTdG9yYWdlID0gMTI4LFxuXHRJbmRpcmVjdCA9IDI1Nixcblx0UXVlcnlSZXNvbHZlID0gNTEyXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIE1hcE1vZGUge1xuXHRSZWFkID0gMSxcblx0V3JpdGUgPSAyXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFRleHR1cmVEaW1lbnNpb24ge1xuXHRFMWQgPSBcIjFkXCIsXG5cdEUyZCA9IFwiMmRcIixcblx0RTNkID0gXCIzZFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFRleHR1cmVVc2FnZSB7XG5cdENvcHlTcmMgPSAxLFxuXHRDb3B5RHN0ID0gMixcblx0VGV4dHVyZUJpbmRpbmcgPSA0LFxuXHRTdG9yYWdlQmluZGluZyA9IDgsXG5cdFJlbmRlckF0dGFjaG1lbnQgPSAxNlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBUZXh0dXJlVmlld0RpbWVuc2lvbiB7XG5cdEUxZCA9IFwiMWRcIixcblx0RTJkID0gXCIyZFwiLFxuXHRFMmRBcnJheSA9IFwiMmQtYXJyYXlcIixcblx0Q3ViZSA9IFwiY3ViZVwiLFxuXHRDdWJlQXJyYXkgPSBcImN1YmUtYXJyYXlcIixcblx0RTNkID0gXCIzZFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFRleHR1cmVBc3BlY3Qge1xuXHRBbGwgPSBcImFsbFwiLFxuXHRTdGVuY2lsT25seSA9IFwic3RlbmNpbC1vbmx5XCIsXG5cdERlcHRoT25seSA9IFwiZGVwdGgtb25seVwiXG59XG5cbi8qKlxuICogQ29tbWVudHMgdGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZ2Z4LXJzL3dncHUvYmxvYi9tYXN0ZXIvd2dwdS10eXBlcy9zcmMvbGliLnJzXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGVudW0gVGV4dHVyZUZvcm1hdCB7XG5cdC8vIDgtYml0IGZvcm1hdHNcblx0UjhVbm9ybSA9IFwicjh1bm9ybVwiLCAvLyBSZWQgY2hhbm5lbCBvbmx5LiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBbMCwgMjU1XSBjb252ZXJ0ZWQgdG8vZnJvbSBmbG9hdCBbMCwgMV0gaW4gc2hhZGVyLlxuXHRSOFNub3JtID0gXCJyOHNub3JtXCIsIC8vIFJlZCBjaGFubmVsIG9ubHkuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFstMTI3LCAxMjddIGNvbnZlcnRlZCB0by9mcm9tIGZsb2F0IFstMSwgMV0gaW4gc2hhZGVyLlxuXHRSOFVpbnQgPSBcInI4dWludFwiLCAvLyBSZWQgY2hhbm5lbCBvbmx5LiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBVbnNpZ25lZCBpbiBzaGFkZXIuXG5cdFI4U2ludCA9IFwicjhzaW50XCIsIC8vIFJlZCBjaGFubmVsIG9ubHkuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFNpZ25lZCBpbiBzaGFkZXIuXG5cblx0Ly8gMTYtYml0IGZvcm1hdHNcblx0UjE2VWludCA9IFwicjE2dWludFwiLCAvLyBSZWQgY2hhbm5lbCBvbmx5LiAxNiBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gVW5zaWduZWQgaW4gc2hhZGVyLlxuXHRSMTZTaW50ID0gXCJyMTZzaW50XCIsIC8vIFJlZCBjaGFubmVsIG9ubHkuIDE2IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBTaWduZWQgaW4gc2hhZGVyLlxuXHRSMTZGbG9hdCA9IFwicjE2ZmxvYXRcIiwgLy8gUmVkIGNoYW5uZWwgb25seS4gMTYgYml0IGZsb2F0IHBlciBjaGFubmVsLiBGbG9hdCBpbiBzaGFkZXIuXG5cdFJHOFVub3JtID0gXCJyZzh1bm9ybVwiLCAvLyBSZWQgYW5kIGdyZWVuIGNoYW5uZWxzLiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBbMCwgMjU1XSBjb252ZXJ0ZWQgdG8vZnJvbSBmbG9hdCBbMCwgMV0gaW4gc2hhZGVyLlxuXHRSRzhTbm9ybSA9IFwicmc4c25vcm1cIiwgLy8gUmVkIGFuZCBncmVlbiBjaGFubmVscy4gOCBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gWy0xMjcsIDEyN10gY29udmVydGVkIHRvL2Zyb20gZmxvYXQgWy0xLCAxXSBpbiBzaGFkZXIuXG5cdFJHOFVpbnQgPSBcInJnOHVpbnRcIiwgLy8gUmVkIGFuZCBncmVlbiBjaGFubmVscy4gOCBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gVW5zaWduZWQgaW4gc2hhZGVyLlxuXHRSRzhTaW50ID0gXCJyZzhzaW50XCIsIC8vIFJlZCBhbmQgZ3JlZW4gY2hhbm5lbHMuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFNpZ25lZCBpbiBzaGFkZXIuXG5cblx0Ly8gMzItYml0IGZvcm1hdHNcblx0UjMyVWludCA9IFwicjMydWludFwiLCAvLyBSZWQgY2hhbm5lbCBvbmx5LiAzMiBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gVW5zaWduZWQgaW4gc2hhZGVyLlxuXHRSMzJTaW50ID0gXCJyMzJzaW50XCIsIC8vIFJlZCBjaGFubmVsIG9ubHkuIDMyIGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBTaWduZWQgaW4gc2hhZGVyLlxuXHRSMzJGbG9hdCA9IFwicjMyZmxvYXRcIiwgLy8gUmVkIGNoYW5uZWwgb25seS4gMzIgYml0IGZsb2F0IHBlciBjaGFubmVsLiBGbG9hdCBpbiBzaGFkZXIuXG5cdFJHMTZVaW50ID0gXCJyZzE2dWludFwiLCAvLyBSZWQgYW5kIGdyZWVuIGNoYW5uZWxzLiAxNiBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gVW5zaWduZWQgaW4gc2hhZGVyLlxuXHRSRzE2U2ludCA9IFwicmcxNnNpbnRcIiwgLy8gUmVkIGFuZCBncmVlbiBjaGFubmVscy4gMTYgYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFNpZ25lZCBpbiBzaGFkZXIuXG5cdFJHMTZGbG9hdCA9IFwicmcxNmZsb2F0XCIsIC8vIFJlZCBhbmQgZ3JlZW4gY2hhbm5lbHMuIDE2IGJpdCBmbG9hdCBwZXIgY2hhbm5lbC4gRmxvYXQgaW4gc2hhZGVyLlxuXHRSR0JBOFVub3JtID0gXCJyZ2JhOHVub3JtXCIsIC8vIFJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYSBjaGFubmVscy4gOCBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gWzAsIDI1NV0gY29udmVydGVkIHRvL2Zyb20gZmxvYXQgWzAsIDFdIGluIHNoYWRlci5cblx0UkdCQThVbm9ybVNSR0IgPSBcInJnYmE4dW5vcm0tc3JnYlwiLCAvLyBSZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFNyZ2ItY29sb3IgWzAsIDI1NV0gY29udmVydGVkIHRvL2Zyb20gbGluZWFyLWNvbG9yIGZsb2F0IFswLCAxXSBpbiBzaGFkZXIuXG5cdFJHQkE4U25vcm0gPSBcInJnYmE4c25vcm1cIiwgLy8gUmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGNoYW5uZWxzLiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBbLTEyNywgMTI3XSBjb252ZXJ0ZWQgdG8vZnJvbSBmbG9hdCBbLTEsIDFdIGluIHNoYWRlci5cblx0UkdCQThVaW50ID0gXCJyZ2JhOHVpbnRcIiwgLy8gUmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGNoYW5uZWxzLiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBVbnNpZ25lZCBpbiBzaGFkZXIuXG5cdFJHQkE4U2ludCA9IFwicmdiYThzaW50XCIsIC8vIFJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYSBjaGFubmVscy4gOCBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gU2lnbmVkIGluIHNoYWRlci5cblx0QkdSQThVbm9ybSA9IFwiYmdyYTh1bm9ybVwiLCAvLyBCbHVlLCBncmVlbiwgcmVkLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFswLCAyNTVdIGNvbnZlcnRlZCB0by9mcm9tIGZsb2F0IFswLCAxXSBpbiBzaGFkZXIuXG5cdEJHUkE4VW5vcm1TUkdCID0gXCJiZ3JhOHVub3JtLXNyZ2JcIiwgLy8gQmx1ZSwgZ3JlZW4sIHJlZCwgYW5kIGFscGhhIGNoYW5uZWxzLiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBTcmdiLWNvbG9yIFswLCAyNTVdIGNvbnZlcnRlZCB0by9mcm9tIGxpbmVhci1jb2xvciBmbG9hdCBbMCwgMV0gaW4gc2hhZGVyLlxuXHQvLyBQYWNrZWQgMzItYml0IGZvcm1hdHNcblx0UkdCOUU1VUZsb2F0ID0gXCJyZ2I5ZTV1ZmxvYXRcIiwgLy8gUGFja2VkIHVuc2lnbmVkIGZsb2F0IHdpdGggOSBiaXRzIG1hbnRpc2EgZm9yIGVhY2ggUkdCIGNvbXBvbmVudCwgdGhlbiBhIGNvbW1vbiA1IGJpdHMgZXhwb25lbnRcblx0UkdCMTBBMlVub3JtID0gXCJyZ2IxMGEydW5vcm1cIiwgLy8gUmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGNoYW5uZWxzLiAxMCBiaXQgaW50ZWdlciBmb3IgUkdCIGNoYW5uZWxzLCAyIGJpdCBpbnRlZ2VyIGZvciBhbHBoYSBjaGFubmVsLiBbMCwgMTAyM10gKFswLCAzXSBmb3IgYWxwaGEpIGNvbnZlcnRlZCB0by9mcm9tIGZsb2F0IFswLCAxXSBpbiBzaGFkZXIuXG5cdFJHMTFCMTBVRmxvYXQgPSBcInJnMTFiMTB1ZmxvYXRcIiwgLy8gUmVkLCBncmVlbiwgYW5kIGJsdWUgY2hhbm5lbHMuIDExIGJpdCBmbG9hdCB3aXRoIG5vIHNpZ24gYml0IGZvciBSRyBjaGFubmVscy4gMTAgYml0IGZsb2F0IHdpdGggbm8gc2lnbiBiaXQgZm9yIGJsdWUgY2hhbm5lbC4gRmxvYXQgaW4gc2hhZGVyLlxuXG5cdC8vIDY0LWJpdCBmb3JtYXRzXG5cdFJHMzJVaW50ID0gXCJyZzMydWludFwiLCAvLyBSZWQgYW5kIGdyZWVuIGNoYW5uZWxzLiAzMiBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gVW5zaWduZWQgaW4gc2hhZGVyLlxuXHRSRzMyU2ludCA9IFwicmczMnNpbnRcIiwgLy8gUmVkIGFuZCBncmVlbiBjaGFubmVscy4gMzIgYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFNpZ25lZCBpbiBzaGFkZXIuXG5cdFJHMzJGbG9hdCA9IFwicmczMmZsb2F0XCIsIC8vIFJlZCBhbmQgZ3JlZW4gY2hhbm5lbHMuIDMyIGJpdCBmbG9hdCBwZXIgY2hhbm5lbC4gRmxvYXQgaW4gc2hhZGVyLlxuXHRSR0JBMTZVaW50ID0gXCJyZ2JhMTZ1aW50XCIsIC8vIFJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYSBjaGFubmVscy4gMTYgYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFVuc2lnbmVkIGluIHNoYWRlci5cblx0UkdCQTE2U2ludCA9IFwicmdiYTE2c2ludFwiLCAvLyBSZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDE2IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBTaWduZWQgaW4gc2hhZGVyLlxuXHRSR0JBMTZGbG9hdCA9IFwicmdiYTE2ZmxvYXRcIiwgLy8gUmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGNoYW5uZWxzLiAxNiBiaXQgZmxvYXQgcGVyIGNoYW5uZWwuIEZsb2F0IGluIHNoYWRlci5cblxuXHQvLyAxMjgtYml0IGZvcm1hdHNcblx0UkdCQTMyVWludCA9IFwicmdiYTMydWludFwiLCAvLyBSZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDMyIGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBVbnNpZ25lZCBpbiBzaGFkZXIuXG5cdFJHQkEzMlNpbnQgPSBcInJnYmEzMnNpbnRcIiwgLy8gUmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGNoYW5uZWxzLiAzMiBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gU2lnbmVkIGluIHNoYWRlci5cblx0UkdCQTMyRmxvYXQgPSBcInJnYmEzMmZsb2F0XCIsIC8vIFJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYSBjaGFubmVscy4gMzIgYml0IGZsb2F0IHBlciBjaGFubmVsLiBGbG9hdCBpbiBzaGFkZXIuXG5cblx0Ly8gRGVwdGggYW5kIHN0ZW5jaWwgZm9ybWF0c1xuXHRTdGVuY2lsOCA9IFwic3RlbmNpbDhcIixcblx0RGVwdGgxNlVub3JtID0gXCJkZXB0aDE2dW5vcm1cIixcblx0RGVwdGgyNFBsdXMgPSBcImRlcHRoMjRwbHVzXCIsIC8vIFNwZWNpYWwgZGVwdGggZm9ybWF0IHdpdGggYXQgbGVhc3QgMjQgYml0IGludGVnZXIgZGVwdGguXG5cdERlcHRoMjRQbHVzU3RlbmNpbDggPSBcImRlcHRoMjRwbHVzLXN0ZW5jaWw4XCIsIC8vIFNwZWNpYWwgZGVwdGgvc3RlbmNpbCBmb3JtYXQgd2l0aCBhdCBsZWFzdCAyNCBiaXQgaW50ZWdlciBkZXB0aCBhbmQgOCBiaXRzIGludGVnZXIgc3RlbmNpbC5cblx0RGVwdGgzMkZsb2F0ID0gXCJkZXB0aDMyZmxvYXRcIiwgLy8gU3BlY2lhbCBkZXB0aCBmb3JtYXQgd2l0aCAzMiBiaXQgZmxvYXRpbmcgcG9pbnQgZGVwdGguXG5cblx0Ly8gQkMgY29tcHJlc3NlZCBmb3JtYXRzIHVzYWJsZSBpZiBcInRleHR1cmUtY29tcHJlc3Npb24tYmNcIiBpcyBib3RoXG5cdC8vIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlL3VzZXIgYWdlbnQgYW5kIGVuYWJsZWQgaW4gcmVxdWVzdERldmljZS5cblx0QkMxUkdCQVVub3JtID0gXCJiYzEtcmdiYS11bm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiA4IGJ5dGVzIHBlciBibG9jayAoNCBiaXQvcHgpLiA0IGNvbG9yICsgYWxwaGEgcGFsbGV0LiA1IGJpdCBSICsgNiBiaXQgRyArIDUgYml0IEIgKyAxIGJpdCBhbHBoYS4gQWxzbyBrbm93biBhcyBEWFQxLlxuXHRCQzFSR0JBVW5vcm1TUkdCID0gXCJiYzEtcmdiYS11bm9ybS1zcmdiXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDggYnl0ZXMgcGVyIGJsb2NrICg0IGJpdC9weCkuIDQgY29sb3IgKyBhbHBoYSBwYWxsZXQuIDUgYml0IFIgKyA2IGJpdCBHICsgNSBiaXQgQiArIDEgYml0IGFscGhhLiBBbHNvIGtub3duIGFzIERYVDEuXG5cdEJDMlJHQkFVbm9ybSA9IFwiYmMyLXJnYmEtdW5vcm1cIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIDQgY29sb3IgcGFsbGV0LiA1IGJpdCBSICsgNiBiaXQgRyArIDUgYml0IEIgKyA0IGJpdCBhbHBoYS4gQWxzbyBrbm93biBhcyBEWFQzLlxuXHRCQzJSR0JBVW5vcm1TUkdCID0gXCJiYzItcmdiYS11bm9ybS1zcmdiXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiA0IGNvbG9yIHBhbGxldC4gNSBiaXQgUiArIDYgYml0IEcgKyA1IGJpdCBCICsgNCBiaXQgYWxwaGEuIEFsc28ga25vd24gYXMgRFhUMy5cblx0QkMzUkdCQVVub3JtID0gXCJiYzMtcmdiYS11bm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gNCBjb2xvciBwYWxsZXQgKyA4IGFscGhhIHBhbGxldC4gNSBiaXQgUiArIDYgYml0IEcgKyA1IGJpdCBCICsgOCBiaXQgYWxwaGEuIEFsc28ga25vd24gYXMgRFhUNS5cblx0QkMzUkdCQVVub3JtU1JHQiA9IFwiYmMzLXJnYmEtdW5vcm0tc3JnYlwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gNCBjb2xvciBwYWxsZXQgKyA4IGFscGhhIHBhbGxldC4gNSBiaXQgUiArIDYgYml0IEcgKyA1IGJpdCBCICsgOCBiaXQgYWxwaGEuIEFsc28ga25vd24gYXMgRFhUNS5cblx0QkM0UlVub3JtID0gXCJiYzQtci11bm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiA4IGJ5dGVzIHBlciBibG9jayAoNCBiaXQvcHgpLiA4IGNvbG9yIHBhbGxldC4gOCBiaXQgUi4gQWxzbyBrbm93biBhcyBSR1RDMS5cblx0QkM0UlNub3JtID0gXCJiYzQtci1zbm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiA4IGJ5dGVzIHBlciBibG9jayAoNCBiaXQvcHgpLiA4IGNvbG9yIHBhbGxldC4gOCBiaXQgUi4gQWxzbyBrbm93biBhcyBSR1RDMS5cblx0QkM1UkdVbm9ybSA9IFwiYmM1LXJnLXVub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiA4IGNvbG9yIHJlZCBwYWxsZXQgKyA4IGNvbG9yIGdyZWVuIHBhbGxldC4gOCBiaXQgUkcuIEFsc28ga25vd24gYXMgUkdUQzIuXG5cdEJDNVJHU25vcm0gPSBcImJjNS1yZy1zbm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gOCBjb2xvciByZWQgcGFsbGV0ICsgOCBjb2xvciBncmVlbiBwYWxsZXQuIDggYml0IFJHLiBBbHNvIGtub3duIGFzIFJHVEMyLlxuXHRCQzZIUkdCVUZsb2F0ID0gXCJiYzZoLXJnYi11ZmxvYXRcIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIFZhcmlhYmxlIHNpemVkIHBhbGxldC4gMTYgYml0IHVuc2lnbmVkIGZsb2F0IFJHQi4gRmxvYXQgaW4gc2hhZGVyLiBBbHNvIGtub3duIGFzIEJQVEMgKGZsb2F0KS5cblx0QkM2SFJHQkZsb2F0ID0gXCJiYzZoLXJnYi1mbG9hdFwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gVmFyaWFibGUgc2l6ZWQgcGFsbGV0LiAxNiBiaXQgc2lnbmVkIGZsb2F0IFJHQi4gRmxvYXQgaW4gc2hhZGVyLiBBbHNvIGtub3duIGFzIEJQVEMgKGZsb2F0KS5cblx0QkM3UkdCQVVub3JtID0gXCJiYzctcmdiYS11bm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gVmFyaWFibGUgc2l6ZWQgcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuIEFsc28ga25vd24gYXMgQlBUQyAodW5vcm0pLlxuXHRCQzdSR0JBVW5vcm1TUkdCID0gXCJiYzctcmdiYS11bm9ybS1zcmdiXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiBWYXJpYWJsZSBzaXplZCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS4gQWxzbyBrbm93biBhcyBCUFRDICh1bm9ybSkuXG5cblx0Ly8gRVRDMiBjb21wcmVzc2VkIGZvcm1hdHMgdXNhYmxlIGlmIFwidGV4dHVyZS1jb21wcmVzc2lvbi1ldGMyXCIgaXMgYm90aFxuXHQvLyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZS91c2VyIGFnZW50IGFuZCBlbmFibGVkIGluIHJlcXVlc3REZXZpY2UuXG5cdEVUQzJSR0I4VW5vcm0gPSBcImV0YzItcmdiOHVub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDggYnl0ZXMgcGVyIGJsb2NrICg0IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQi5cblx0RVRDMlJHQjhVbm9ybVNSR0IgPSBcImV0YzItcmdiOHVub3JtLXNyZ2JcIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gOCBieXRlcyBwZXIgYmxvY2sgKDQgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCLlxuXHRFVEMyUkdCOEExVW5vcm0gPSBcImV0YzItcmdiOGExdW5vcm1cIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gOCBieXRlcyBwZXIgYmxvY2sgKDQgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCICsgMSBiaXQgYWxwaGEuXG5cdEVUQzJSR0I4QTFVbm9ybVNSR0IgPSBcImV0YzItcmdiOGExdW5vcm0tc3JnYlwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiA4IGJ5dGVzIHBlciBibG9jayAoNCBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0IgKyAxIGJpdCBhbHBoYS5cblx0RVRDMlJHQkE4VW5vcm0gPSBcImV0YzItcmdiYTh1bm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCICsgOCBiaXQgYWxwaGEuXG5cdEVUQzJSR0JBOFVub3JtU1JHQiA9IFwiZXRjMi1yZ2JhOHVub3JtLXNyZ2JcIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQiArIDggYml0IGFscGhhLlxuXHRFQUNSMTFVbm9ybSA9IFwiZWFjLXIxMXVub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDggYnl0ZXMgcGVyIGJsb2NrICg0IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiAxMSBiaXQgaW50ZWdlciBSLlxuXHRFQUNSMTFTbm9ybSA9IFwiZWFjLXIxMXNub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDggYnl0ZXMgcGVyIGJsb2NrICg0IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiAxMSBiaXQgaW50ZWdlciBSLlxuXHRFQUNSRzExVW5vcm0gPSBcImVhYy1yZzExdW5vcm1cIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiAxMSBiaXQgaW50ZWdlciBSICsgMTEgYml0IGludGVnZXIgRy5cblx0RUFDUkcxMVNub3JtID0gXCJlYWMtcmcxMXNub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gMTEgYml0IGludGVnZXIgUiArIDExIGJpdCBpbnRlZ2VyIEcuXG5cblx0Ly8gQVNUQyBjb21wcmVzc2VkIGZvcm1hdHMgdXNhYmxlIGlmIFwidGV4dHVyZS1jb21wcmVzc2lvbi1hc3RjXCIgaXMgYm90aFxuXHQvLyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZS91c2VyIGFnZW50IGFuZCBlbmFibGVkIGluIHJlcXVlc3REZXZpY2UuXG5cdEFTVEM0eDRVbm9ybSA9IFwiYXN0Yy00eDQtdW5vcm1cIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM0eDRVbm9ybVNSR0IgPSBcImFzdGMtNHg0LXVub3JtLXNyZ2JcIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM1eDRVbm9ybSA9IFwiYXN0Yy01eDQtdW5vcm1cIiwgLy8gNXg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg2LjQgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzV4NFVub3JtU1JHQiA9IFwiYXN0Yy01eDQtdW5vcm0tc3JnYlwiLCAvLyA1eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDYuNCBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDNXg1VW5vcm0gPSBcImFzdGMtNXg1LXVub3JtXCIsIC8vIDV4NSBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoNS4xMiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDNXg1VW5vcm1TUkdCID0gXCJhc3RjLTV4NS11bm9ybS1zcmdiXCIsIC8vIDV4NSBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoNS4xMiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDNng1VW5vcm0gPSBcImFzdGMtNng1LXVub3JtXCIsIC8vIDZ4NSBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoNC4yNyBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDNng1VW5vcm1TUkdCID0gXCJhc3RjLTZ4NS11bm9ybS1zcmdiXCIsIC8vIDZ4NSBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoNC4yNyBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDNng2VW5vcm0gPSBcImFzdGMtNng2LXVub3JtXCIsIC8vIDZ4NiBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMy41NiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDNng2VW5vcm1TUkdCID0gXCJhc3RjLTZ4Ni11bm9ybS1zcmdiXCIsIC8vIDZ4NiBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMy41NiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDOHg1VW5vcm0gPSBcImFzdGMtOHg1LXVub3JtXCIsIC8vIDh4NSBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMy4yIGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM4eDVVbm9ybVNSR0IgPSBcImFzdGMtOHg1LXVub3JtLXNyZ2JcIiwgLy8gOHg1IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgzLjIgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzh4NlVub3JtID0gXCJhc3RjLTh4Ni11bm9ybVwiLCAvLyA4eDYgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDIuNjcgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzh4NlVub3JtU1JHQiA9IFwiYXN0Yy04eDYtdW5vcm0tc3JnYlwiLCAvLyA4eDYgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDIuNjcgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzh4OFVub3JtID0gXCJhc3RjLTh4OC11bm9ybVwiLCAvLyA4eDggYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDIgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzh4OFVub3JtU1JHQiA9IFwiYXN0Yy04eDgtdW5vcm0tc3JnYlwiLCAvLyA4eDggYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDIgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEweDVVbm9ybSA9IFwiYXN0Yy0xMHg1LXVub3JtXCIsIC8vIDEweDUgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDIuNTYgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEweDVVbm9ybVNSR0IgPSBcImFzdGMtMTB4NS11bm9ybS1zcmdiXCIsIC8vIDEweDUgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDIuNTYgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEweDZVbm9ybSA9IFwiYXN0Yy0xMHg2LXVub3JtXCIsIC8vIDEweDYgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDIuMTMgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEweDZVbm9ybVNSR0IgPSBcImFzdGMtMTB4Ni11bm9ybS1zcmdiXCIsIC8vIDEweDYgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDIuMTMgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEweDhVbm9ybSA9IFwiYXN0Yy0xMHg4LXVub3JtXCIsIC8vIDEweDggYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDEuNiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDMTB4OFVub3JtU1JHQiA9IFwiYXN0Yy0xMHg4LXVub3JtLXNyZ2JcIiwgLy8gMTB4OCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMS42IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEMxMHgxMFVub3JtID0gXCJhc3RjLTEweDEwLXVub3JtXCIsIC8vIDEweDEwIGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgxLjI4IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEMxMHgxMFVub3JtU1JHQiA9IFwiYXN0Yy0xMHgxMC11bm9ybS1zcmdiXCIsIC8vIDEweDEwIGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgxLjI4IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEMxMngxMFVub3JtID0gXCJhc3RjLTEyeDEwLXVub3JtXCIsIC8vIDEyeDEwIGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgxLjA3IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEMxMngxMFVub3JtU1JHQiA9IFwiYXN0Yy0xMngxMC11bm9ybS1zcmdiXCIsIC8vIDEyeDEwIGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgxLjA3IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEMxMngxMlVub3JtID0gXCJhc3RjLTEyeDEyLXVub3JtXCIsIC8vIDEyeDEyIGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgwLjg5IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEMxMngxMlVub3JtU1JHQiA9IFwiYXN0Yy0xMngxMi11bm9ybS1zcmdiXCIsIC8vIDEyeDEyIGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgwLjg5IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cblx0Ly8gXCJkZXB0aDI0dW5vcm0tc3RlbmNpbDhcIiBmZWF0dXJlXG5cdERlcHRoMjRVbm9ybVN0ZW5jaWw4ID0gXCJkZXB0aDI0dW5vcm0tc3RlbmNpbDhcIixcblxuXHQvLyBcImRlcHRoMzJmbG9hdC1zdGVuY2lsOFwiIGZlYXR1cmVcblx0RGVwdGgzMkZsb2F0U3RlbmNpbDggPSBcImRlcHRoMzJmbG9hdC1zdGVuY2lsOFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEFkZHJlc3NNb2RlIHtcblx0Q2xhbXBUb0VkZ2UgPSBcImNsYW1wLXRvLWVkZ2VcIixcblx0UmVwZWF0ID0gXCJyZXBlYXRcIixcblx0TWlycm9yUmVwZWF0ID0gXCJtaXJyb3ItcmVwZWF0XCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gRmlsdGVyTW9kZSB7XG5cdE5lYXJlc3QgPSBcIm5lYXJlc3RcIixcblx0TGluZWFyID0gXCJsaW5lYXJcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBDb21wYXJlRnVuY3Rpb24ge1xuXHROZXZlciA9IFwibmV2ZXJcIixcblx0TGVzcyA9IFwibGVzc1wiLFxuXHRFcXVhbCA9IFwiZXF1YWxcIixcblx0TGVzc0VxdWFsID0gXCJsZXNzLWVxdWFsXCIsXG5cdEdyZWF0ZXIgPSBcImdyZWF0ZXJcIixcblx0Tm90RXF1YWwgPSBcIm5vdC1lcXVhbFwiLFxuXHRHcmVhdGVyRXF1YWwgPSBcImdyZWF0ZXItZXF1YWxcIixcblx0QWx3YXlzID0gXCJhbHdheXNcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBTaGFkZXJTdGFnZSB7XG5cdFZlcnRleCA9IDEsXG5cdEZyYWdtZW50ID0gMixcblx0Q29tcHV0ZSA9IDRcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQnVmZmVyQmluZGluZ1R5cGUge1xuXHRVbmlmb3JtID0gXCJ1bmlmb3JtXCIsXG5cdFN0b3JhZ2UgPSBcInN0b3JhZ2VcIixcblx0UmVhZE9ubHlTdG9yYWdlID0gXCJyZWFkLW9ubHktc3RvcmFnZVwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFNhbXBsZXJCaW5kaW5nVHlwZSB7XG5cdEZpbHRlcmluZyA9IFwiZmlsdGVyaW5nXCIsXG5cdE5vbkZpbHRlcmluZyA9IFwibm9uLWZpbHRlcmluZ1wiLFxuXHRDb21wYXJpc29uID0gXCJjb21wYXJpc29uXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gVGV4dHVyZVNhbXBsZVR5cGUge1xuXHRGbG9hdCA9IFwiZmxvYXRcIixcblx0VW5maWx0ZXJhYmxlRmxvYXQgPSBcInVuZmlsdGVyYWJsZS1mbG9hdFwiLFxuXHREZXB0aCA9IFwiZGVwdGhcIixcblx0U2ludCA9IFwic2ludFwiLFxuXHRVaW50ID0gXCJ1aW50XCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gU3RvcmFnZVRleHR1cmVBY2Nlc3Mge1xuXHRXcml0ZU9ubHkgPSBcIndyaXRlLW9ubHlcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBDb21waWxhdGlvbk1lc3NhZ2VUeXBlIHtcblx0RXJyb3IgPSBcImVycm9yXCIsXG5cdFdhcm5pbmcgPSBcIndhcm5pbmdcIixcblx0SW5mbyA9IFwiaW5mb1wiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEF1dG9MYXlvdXRNb2RlIHtcblx0QXV0byA9IFwiYXV0b1wiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFByaW1pdGl2ZVRvcG9sb2d5IHtcblx0UG9pbnRMaXN0ID0gXCJwb2ludC1saXN0XCIsXG5cdExpbmVMaXN0ID0gXCJsaW5lLWxpc3RcIixcblx0TGluZVN0cmlwID0gXCJsaW5lLXN0cmlwXCIsXG5cdFRyaWFuZ2xlTGlzdCA9IFwidHJpYW5nbGUtbGlzdFwiLFxuXHRUcmlhbmdsZVN0cmlwID0gXCJ0cmlhbmdsZS1zdHJpcFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEZyb250RmFjZSB7XG5cdENDVyA9IFwiY2N3XCIsXG5cdENXID0gXCJjd1wiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEN1bGxNb2RlIHtcblx0Tm9uZSA9IFwibm9uZVwiLFxuXHRGcm9udCA9IFwiZnJvbnRcIixcblx0QmFjayA9IFwiYmFja1wiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIENvbG9yV3JpdGVGbGFncyB7XG5cdFJlZCA9IDEsXG5cdEdyZWVuID0gMixcblx0Qmx1ZSA9IDQsXG5cdEFscGhhID0gOCxcblx0QWxsID0gMTVcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQmxlbmRGYWN0b3Ige1xuXHRaZXJvID0gXCJ6ZXJvXCIsXG5cdE9uZSA9IFwib25lXCIsXG5cdFNyYyA9IFwic3JjXCIsXG5cdE9uZU1pbnVzU3JjID0gXCJvbmUtbWludXMtc3JjXCIsXG5cdFNyY0FscGhhID0gXCJzcmMtYWxwaGFcIixcblx0T25lTWludXNTcmNBbHBoYSA9IFwib25lLW1pbnVzLXNyYy1hbHBoYVwiLFxuXHREc3QgPSBcImRzdFwiLFxuXHRPbmVNaW51c0RzdCA9IFwib25lLW1pbnVzLWRzdFwiLFxuXHREc3RBbHBoYSA9IFwiZHN0LWFscGhhXCIsXG5cdE9uZU1pbnVzRHN0QWxwaGEgPSBcIm9uZS1taW51cy1kc3QtYWxwaGFcIixcblx0U3JjQWxwaGFTYXR1cmF0ZWQgPSBcInNyYy1hbHBoYS1zYXR1cmF0ZWRcIixcblx0Q29uc3RhbnQgPSBcImNvbnN0YW50XCIsXG5cdE9uZU1pbnVzQ29uc3RhbnQgPSBcIm9uZS1taW51cy1jb25zdGFudFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEJsZW5kT3BlcmF0aW9uIHtcblx0QWRkID0gXCJhZGRcIixcblx0U3VidHJhY3QgPSBcInN1YnRyYWN0XCIsXG5cdFJldmVyc2VTdWJ0cmFjdCA9IFwicmV2ZXJzZS1zdWJ0cmFjdFwiLFxuXHRNaW4gPSBcIm1pblwiLFxuXHRNYXggPSBcIm1heFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFN0ZW5jaWxPcGVyYXRpb24ge1xuXHRLZWVwID0gXCJrZWVwXCIsXG5cdFplcm8gPSBcInplcm9cIixcblx0UmVwbGFjZSA9IFwicmVwbGFjZVwiLFxuXHRJbnZlcnQgPSBcImludmVydFwiLFxuXHRJbmNyZW1lbnRDbGFtcCA9IFwiaW5jcmVtZW50LWNsYW1wXCIsXG5cdERlY3JlbWVudENsYW1wID0gXCJkZWNyZW1lbnQtY2xhbXBcIixcblx0SW5jcmVtZW50V3JhcCA9IFwiaW5jcmVtZW50LXdyYXBcIixcblx0RGVjcmVtZW50V3JhcCA9IFwiZGVjcmVtZW50LXdyYXBcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBJbmRleEZvcm1hdCB7XG5cdFVpbnQxNiA9IFwidWludDE2XCIsXG5cdFVpbnQzMiA9IFwidWludDMyXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gVmVydGV4Rm9ybWF0IHtcblx0VWludDh4MiA9IFwidWludDh4MlwiLFxuXHRVaW50OHg0ID0gXCJ1aW50OHg0XCIsXG5cdFNpbnQ4eDIgPSBcInNpbnQ4eDJcIixcblx0U2ludDh4NCA9IFwic2ludDh4NFwiLFxuXHRVbm9ybTh4MiA9IFwidW5vcm04eDJcIixcblx0VW5vcm04eDQgPSBcInVub3JtOHg0XCIsXG5cdFNub3JtOHgyID0gXCJzbm9ybTh4MlwiLFxuXHRTbm9ybTh4NCA9IFwic25vcm04eDRcIixcblx0VWludDE2eDIgPSBcInVpbnQxNngyXCIsXG5cdFVpbnQxNng0ID0gXCJ1aW50MTZ4NFwiLFxuXHRTaW50MTZ4MiA9IFwic2ludDE2eDJcIixcblx0U2ludDE2eDQgPSBcInNpbnQxNng0XCIsXG5cdFVub3JtMTZ4MiA9IFwidW5vcm0xNngyXCIsXG5cdFVub3JtMTZ4NCA9IFwidW5vcm0xNng0XCIsXG5cdFNub3JtMTZ4MiA9IFwic25vcm0xNngyXCIsXG5cdFNub3JtMTZ4NCA9IFwic25vcm0xNng0XCIsXG5cdEZsb2F0MTZ4MiA9IFwiZmxvYXQxNngyXCIsXG5cdEZsb2F0MTZ4NCA9IFwiZmxvYXQxNng0XCIsXG5cdEZsb2F0MzIgPSBcImZsb2F0MzJcIixcblx0RmxvYXQzMngyID0gXCJmbG9hdDMyeDJcIixcblx0RmxvYXQzMngzID0gXCJmbG9hdDMyeDNcIixcblx0RmxvYXQzMng0ID0gXCJmbG9hdDMyeDRcIixcblx0VWludDMyID0gXCJ1aW50MzJcIixcblx0VWludDMyeDIgPSBcInVpbnQzMngyXCIsXG5cdFVpbnQzMngzID0gXCJ1aW50MzJ4M1wiLFxuXHRVaW50MzJ4NCA9IFwidWludDMyeDRcIixcblx0U2ludDMyID0gXCJzaW50MzJcIixcblx0U2ludDMyeDIgPSBcInNpbnQzMngyXCIsXG5cdFNpbnQzMngzID0gXCJzaW50MzJ4M1wiLFxuXHRTaW50MzJ4NCA9IFwic2ludDMyeDRcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBJbnB1dFN0ZXBNb2RlIHtcblx0VmVydGV4ID0gXCJ2ZXJ0ZXhcIixcblx0SW5zdGFuY2UgPSBcImluc3RhbmNlXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQ29tcHV0ZVBhc3NUaW1lc3RhbXBMb2NhdGlvbiB7XG5cdEJlZ2lubmluZyA9IFwiYmVnaW5uaW5nXCIsXG5cdEVuZCA9IFwiZW5kXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gUmVuZGVyUGFzc1RpbWVzdGFtcExvY2F0aW9uIHtcblx0QmVnaW5uaW5nID0gXCJiZWdpbm5pbmdcIixcblx0RW5kID0gXCJlbmRcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBMb2FkT3Age1xuXHRMb2FkID0gXCJsb2FkXCIsXG5cdENsZWFyID0gXCJjbGVhclwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFN0b3JlT3Age1xuXHRTdG9yZSA9IFwic3RvcmVcIixcblx0RGlzY2FyZCA9IFwiZGlzY2FyZFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFF1ZXJ5VHlwZSB7XG5cdE9jY2x1c2lvbiA9IFwib2NjbHVzaW9uXCIsXG5cdFRpbWVzdGFtcCA9IFwidGltZXN0YW1wXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQ2FudmFzQWxwaGFNb2RlIHtcblx0T3BhcXVlID0gXCJvcGFxdWVcIixcblx0UHJlbXVsdGlwbGllZCA9IFwicHJlbXVsdGlwbGllZFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIERldmljZUxvc3RSZWFzb24ge1xuXHREZXN0cm95ZWQgPSBcImRlc3Ryb3llZFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEVycm9yRmlsdGVyIHtcblx0T3V0T2ZNZW1vcnkgPSBcIm91dC1vZi1tZW1vcnlcIixcblx0VmFsaWRhdGlvbiA9IFwidmFsaWRhdGlvblwiXG59XG5cbmV4cG9ydCBlbnVtIEdQVUNvbG9yV3JpdGUge1xuXHRSZWQgPSAweDEsXG5cdEdyZWVuID0gMHgyLFxuXHRCbHVlID0gMHg0LFxuXHRBbHBoYSA9IDB4OCxcblx0QWxsID0gMHhmXG59XG5leHBvcnQgZW51bSBDb21tYW5kU3ViVHlwZSB7XG5cdFNoYWRvdyA9IFwic2hhZG93XCIsXG5cdFBpY2sgPSBcInBpY2tcIlxufVxuZXhwb3J0IGVudW0gSW50ZXJzZWN0IHtcblx0T1VUU0lERSA9IC0xLFxuXHRJTlRFUlNFQ1RJTkcgPSAwLFxuXHRJTlNJREUgPSAxXG59XG4iLCJpbXBvcnQgeyBCdWZmZXJVc2FnZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmNsYXNzIEJ1ZmZlciB7XHJcblx0cHVibGljIGdwdUJ1ZmZlcjogR1BVQnVmZmVyO1xyXG5cdGRldmljZTogR1BVRGV2aWNlO1xyXG5cdHVzYWdlOiBudW1iZXI7XHJcblx0ZGF0YTogQXJyYXlCdWZmZXJWaWV3O1xyXG5cdHNpemU6IG51bWJlcjtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdGxhYmVsOiBzdHJpbmcsXHJcblx0XHRkZXZpY2U6IEdQVURldmljZSxcclxuXHRcdHVzYWdlOiBHUFVCdWZmZXJVc2FnZUZsYWdzLFxyXG5cdFx0ZGF0YTogQXJyYXlCdWZmZXJWaWV3IHwgbnVsbCxcclxuXHRcdHNpemU/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHRoaXMuZGV2aWNlID0gZGV2aWNlO1xyXG5cdFx0dGhpcy51c2FnZSA9IHVzYWdlO1xyXG5cdFx0dGhpcy5kYXRhID0gZGF0YTtcclxuXHRcdHRoaXMuc2l6ZSA9IHNpemUgIT0gdW5kZWZpbmVkID8gKHNpemUgKyAzKSAmIH4zIDogKGRhdGEuYnl0ZUxlbmd0aCArIDMpICYgfjM7IC8vIDQgYnl0ZXMgYWxpZ25tZW50cyAoYmVjYXVzZSBvZiB0aGUgdXBsb2FkIHdoaWNoIHJlcXVpcmVzIHRoaXMpXHJcblx0XHR0aGlzLmdwdUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xyXG5cdFx0XHRsYWJlbDogbGFiZWwgfHwgXCJcIixcclxuXHRcdFx0c2l6ZTogdGhpcy5zaXplLFxyXG5cdFx0XHR1c2FnZVxyXG5cdFx0fSk7XHJcblx0XHRpZiAoZGF0YSkgdGhpcy5zZXRTdWJEYXRhKDAsIGRhdGEsIHRoaXMuc2l6ZSk7XHJcblx0fVxyXG5cdHN0YXRpYyBjcmVhdGUoXHJcblx0XHRsYWJlbDogc3RyaW5nLFxyXG5cdFx0ZGV2aWNlOiBHUFVEZXZpY2UsXHJcblx0XHR1c2FnZTogR1BVQnVmZmVyVXNhZ2VGbGFncyxcclxuXHRcdGRhdGE6IEFycmF5QnVmZmVyVmlldyB8IG51bGwsXHJcblx0XHRzaXplPzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRyZXR1cm4gbmV3IEJ1ZmZlcihsYWJlbCwgZGV2aWNlLCB1c2FnZSwgZGF0YSwgc2l6ZSk7XHJcblx0fVxyXG5cdHN0YXRpYyBjcmVhdGVWZXJ0ZXhCdWZmZXIobGFiZWw6IHN0cmluZywgZGV2aWNlOiBHUFVEZXZpY2UsIGRhdGE6IEFycmF5QnVmZmVyVmlldyk6IEJ1ZmZlciB7XHJcblx0XHRyZXR1cm4gbmV3IEJ1ZmZlcihsYWJlbCwgZGV2aWNlLCBCdWZmZXJVc2FnZS5WZXJ0ZXggfCBCdWZmZXJVc2FnZS5Db3B5RHN0LCBkYXRhLCBkYXRhLmJ5dGVMZW5ndGgpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNyZWF0ZUluZGV4QnVmZmVyKGxhYmVsOiBzdHJpbmcsIGRldmljZTogR1BVRGV2aWNlLCBkYXRhOiBBcnJheUJ1ZmZlclZpZXcpOiBCdWZmZXIge1xyXG5cdFx0cmV0dXJuIG5ldyBCdWZmZXIobGFiZWwsIGRldmljZSwgQnVmZmVyVXNhZ2UuSW5kZXggfCBCdWZmZXJVc2FnZS5Db3B5RHN0LCBkYXRhKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjcmVhdGVVbmlmb3JtQnVmZmVyKGxhYmVsOiBzdHJpbmcsIGRldmljZTogR1BVRGV2aWNlLCBzaXplOiBudW1iZXIsIHVzYWdlPzogQnVmZmVyVXNhZ2UpOiBCdWZmZXIge1xyXG5cdFx0cmV0dXJuIG5ldyBCdWZmZXIobGFiZWwsIGRldmljZSwgdXNhZ2UsIG51bGwsIHNpemUpO1xyXG5cdH1cclxuXHRzdGF0aWMgZ2V0QnVmZmVyVHlwZSh1c2FnZSkge1xyXG5cdFx0bGV0IHJlc3VsdDtcclxuXHRcdHN3aXRjaCAodXNhZ2UpIHtcclxuXHRcdFx0Y2FzZSBCdWZmZXJVc2FnZS5Vbmlmb3JtOlxyXG5cdFx0XHRcdHJlc3VsdCA9IFwidW5pZm9ybVwiO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIEJ1ZmZlclVzYWdlLlN0b3JhZ2U6XHJcblx0XHRcdFx0cmVzdWx0ID0gXCJzdG9yYWdlXCI7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0fVxyXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ncHV3ZWIvZ3B1d2ViL2Jsb2IvbWFpbi9kZXNpZ24vQnVmZmVyT3BlcmF0aW9ucy5tZFxyXG5cdHB1YmxpYyBzZXRTdWJEYXRhKG9mZnNldDogbnVtYmVyLCBkYXRhOiBBcnJheUJ1ZmZlclZpZXcsIHNpemU/OiBudW1iZXIpOiB2b2lkIHtcclxuXHRcdGNvbnN0IHNyY0FycmF5QnVmZmVyID0gZGF0YS5idWZmZXI7XHJcblx0XHRjb25zdCBieXRlQ291bnQgPSBzaXplID8/IHNyY0FycmF5QnVmZmVyLmJ5dGVMZW5ndGg7XHJcblx0XHRjb25zdCBzcmNCdWZmZXIgPSB0aGlzLmRldmljZS5jcmVhdGVCdWZmZXIoe1xyXG5cdFx0XHRtYXBwZWRBdENyZWF0aW9uOiB0cnVlLFxyXG5cdFx0XHRzaXplOiBieXRlQ291bnQsXHJcblx0XHRcdHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQ1xyXG5cdFx0fSk7XHJcblx0XHRjb25zdCBhcnJheUJ1ZmZlciA9IHNyY0J1ZmZlci5nZXRNYXBwZWRSYW5nZSgpO1xyXG5cclxuXHRcdG5ldyBVaW50MTZBcnJheShhcnJheUJ1ZmZlcikuc2V0KG5ldyBVaW50MTZBcnJheShzcmNBcnJheUJ1ZmZlcikpOyAvLyBtZW1jcHlcclxuXHRcdHNyY0J1ZmZlci51bm1hcCgpO1xyXG5cclxuXHRcdHRoaXMuY29weVRvQnVmZmVyKHNyY0J1ZmZlciwgb2Zmc2V0LCBieXRlQ291bnQpO1xyXG5cclxuXHRcdHNyY0J1ZmZlci5kZXN0cm95KCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgY29weVRvQnVmZmVyKHNyY0J1ZmZlcjogR1BVQnVmZmVyLCBvZmZzZXQ6IG51bWJlciwgYnl0ZUNvdW50OiBudW1iZXIpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gdGhpcy5kZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTtcclxuXHRcdGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihzcmNCdWZmZXIsIDAsIHRoaXMuZ3B1QnVmZmVyLCBvZmZzZXQsIGJ5dGVDb3VudCk7XHJcblx0XHR0aGlzLmRldmljZS5xdWV1ZS5zdWJtaXQoW2NvbW1hbmRFbmNvZGVyLmZpbmlzaCgpXSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgY29weVRvVGV4dHVyZShcclxuXHRcdGJ5dGVzUGVyUm93OiBudW1iZXIsXHJcblx0XHRyb3dzUGVySW1hZ2U6IG51bWJlcixcclxuXHRcdGRlc3RpbmF0aW9uOiBHUFVJbWFnZUNvcHlUZXh0dXJlLFxyXG5cdFx0ZXh0ZW50OiBHUFVFeHRlbnQzRFxyXG5cdCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgY29tbWFuZEVuY29kZXIgPSB0aGlzLmRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpO1xyXG5cdFx0Y29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvVGV4dHVyZShcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGJ1ZmZlcjogdGhpcy5ncHVCdWZmZXIsXHJcblx0XHRcdFx0Ynl0ZXNQZXJSb3csXHJcblx0XHRcdFx0cm93c1BlckltYWdlXHJcblx0XHRcdH0sXHJcblx0XHRcdGRlc3RpbmF0aW9uLFxyXG5cdFx0XHRleHRlbnRcclxuXHRcdCk7XHJcblx0XHR0aGlzLmRldmljZS5xdWV1ZS5zdWJtaXQoW2NvbW1hbmRFbmNvZGVyLmZpbmlzaCgpXSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuZ3B1QnVmZmVyLmRlc3Ryb3koKTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJ1ZmZlcjtcclxuIiwiaW1wb3J0IEJpbmRHcm91cExheW91dCBmcm9tIFwiLi9CaW5kR3JvdXBMYXlvdXRcIjtcclxuXHJcbmNvbnN0IHBpcGVsaW5lTGF5b3V0Q2FjaGUgPSBuZXcgTWFwKCk7XHJcbmV4cG9ydCBjbGFzcyBQaXBlbGluZUxheW91dCB7XHJcbiAgcHVibGljIGdwdVBpcGVsaW5lTGF5b3V0OiBHUFVQaXBlbGluZUxheW91dDtcclxuICBpbmRleDogbnVtYmVyO1xyXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXHJcbiAgICBkZXZpY2U6IEdQVURldmljZSxcclxuICAgIGxhYmVsOiBzdHJpbmcsXHJcbiAgICBwdWJsaWMgZ3JvdXBMYXlvdXRzOiBCaW5kR3JvdXBMYXlvdXRbXSA9IFtdLFxyXG4gICAgaW5kZXg/OiBudW1iZXJcclxuICApIHtcclxuICAgIHRoaXMuaW5kZXggPSBpbmRleCB8fCAwO1xyXG4gICAgdGhpcy5ncHVQaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dCh7XHJcbiAgICAgIGxhYmVsOiBsYWJlbCxcclxuICAgICAgYmluZEdyb3VwTGF5b3V0czogZ3JvdXBMYXlvdXRzLm1hcCgobGF5b3V0KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGxheW91dC5ncHVCaW5kR3JvdXBMYXlvdXQ7XHJcbiAgICAgIH0pLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXRQaXBlbGluZUxheW91dEZyb21DYWNoZShcclxuICAgIGRldmljZTogR1BVRGV2aWNlLFxyXG4gICAgbGFiZWw6IHN0cmluZyxcclxuICAgIGdyb3VwTGF5b3V0czogQmluZEdyb3VwTGF5b3V0W11cclxuICApOiBQaXBlbGluZUxheW91dCB7XHJcbiAgICBpZiAocGlwZWxpbmVMYXlvdXRDYWNoZS5oYXMobGFiZWwpKSB7XHJcbiAgICAgIHJldHVybiBwaXBlbGluZUxheW91dENhY2hlLmdldChsYWJlbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBuZXcgUGlwZWxpbmVMYXlvdXQoZGV2aWNlLCBsYWJlbCwgZ3JvdXBMYXlvdXRzKTtcclxuICAgICAgcGlwZWxpbmVMYXlvdXRDYWNoZS5zZXQobGFiZWwsIGJpbmRHcm91cExheW91dCk7XHJcbiAgICAgIHJldHVybiBiaW5kR3JvdXBMYXlvdXQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCBCaW5kR3JvdXBMYXlvdXQgZnJvbSBcIi4vQmluZEdyb3VwTGF5b3V0XCI7XHJcbmltcG9ydCB7IENvbXB1dGVDb21tYW5kIH0gZnJvbSBcIi4vQ29tcHV0ZUNvbW1hbmRcIjtcclxuaW1wb3J0IERyYXdDb21tYW5kIGZyb20gXCIuL0RyYXdDb21tYW5kXCI7XHJcbmltcG9ydCB7IFBpcGVsaW5lTGF5b3V0IH0gZnJvbSBcIi4vUGlwZWxpbmVMYXlvdXRcIjtcclxuaW1wb3J0IHsgUmVuZGVyU3RhdGUgfSBmcm9tIFwiLi9SZW5kZXJTdGF0ZVwiO1xyXG5cclxuY29uc3QgcmVuZGVyUGlwZWxpbmVzID0gbmV3IE1hcCgpO1xyXG5jb25zdCBjb21wdXRlUGlwZWxpbmVzID0gbmV3IE1hcCgpO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQaXBlbGluZSB7XHJcblx0Z3B1UGlwZWxpbmU6IEdQVVJlbmRlclBpcGVsaW5lIHwgR1BVQ29tcHV0ZVBpcGVsaW5lO1xyXG5cdHR5cGU6IHN0cmluZztcclxuXHRkZXZpY2U6IEdQVURldmljZTtcclxuXHRkZXNjcmlwdG9yOiBHUFVSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgfCBHUFVDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dHlwZTogc3RyaW5nLFxyXG5cdFx0ZGV2aWNlOiBHUFVEZXZpY2UsXHJcblx0XHRkZXNjcmlwdG9yOiBHUFVSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgfCBHUFVDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yXHJcblx0KSB7XHJcblx0XHR0aGlzLnR5cGUgPSB0eXBlO1xyXG5cdFx0dGhpcy5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjtcclxuXHRcdHRoaXMuZGV2aWNlID0gZGV2aWNlO1xyXG5cdFx0dGhpcy5jcmVhdGVQaXBlbGluZSgpO1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZVBpcGVsaW5lKCkge1xyXG5cdFx0aWYgKHRoaXMudHlwZSA9PSBcInJlbmRlclwiKSB7XHJcblx0XHRcdHRoaXMuZ3B1UGlwZWxpbmUgPSB0aGlzLmRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZSh0aGlzLmRlc2NyaXB0b3IgYXMgR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuZ3B1UGlwZWxpbmUgPSB0aGlzLmRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUodGhpcy5kZXNjcmlwdG9yIGFzIEdQVUNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRwdWJsaWMgYmluZChwYXNzRW5jb2RlcjogR1BVUmVuZGVyUGFzc0VuY29kZXIgfCBHUFVDb21wdXRlUGFzc0VuY29kZXIpIHtcclxuXHRcdGlmICh0aGlzLnR5cGUgPT0gXCJyZW5kZXJcIikge1xyXG5cdFx0XHQocGFzc0VuY29kZXIgYXMgR1BVUmVuZGVyUGFzc0VuY29kZXIpLnNldFBpcGVsaW5lKHRoaXMuZ3B1UGlwZWxpbmUgYXMgR1BVUmVuZGVyUGlwZWxpbmUpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0KHBhc3NFbmNvZGVyIGFzIEdQVUNvbXB1dGVQYXNzRW5jb2Rlcikuc2V0UGlwZWxpbmUodGhpcy5ncHVQaXBlbGluZSBhcyBHUFVDb21wdXRlUGlwZWxpbmUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRzdGF0aWMgZ2V0UmVuZGVyUGlwZWxpbmVGcm9tQ2FjaGUoXHJcblx0XHRkZXZpY2U6IEdQVURldmljZSxcclxuXHRcdGRyYXdDb21hbmQ6IERyYXdDb21tYW5kLFxyXG5cdFx0Z3JvdXBMYXlvdXRzOiBCaW5kR3JvdXBMYXlvdXRbXVxyXG5cdCk6IFBpcGVsaW5lIHtcclxuXHRcdGNvbnN0IHsgcmVuZGVyU3RhdGUsIHNoYWRlclNvdXJjZSB9ID0gZHJhd0NvbWFuZDtcclxuXHRcdGNvbnN0IHJzU3RyID0gSlNPTi5zdHJpbmdpZnkocmVuZGVyU3RhdGUpO1xyXG5cdFx0Y29uc3QgY29tYmluZVN0ciA9IHNoYWRlclNvdXJjZS51aWQuY29uY2F0KHJzU3RyKTtcclxuXHRcdGNvbnN0IGhhc2hJZCA9IHN0cmluZ1RvSGFzaChjb21iaW5lU3RyKTtcclxuXHRcdGNvbnN0IGNvbWJpbmVMYXlvdXRzID0gZ3JvdXBMYXlvdXRzXHJcblx0XHRcdD8uZmlsdGVyKChsYXlvdXQpID0+IGxheW91dCAhPSB1bmRlZmluZWQpXHJcblx0XHRcdD8uc29ydCgobGF5b3V0MSwgbGF5b3V0MikgPT4gbGF5b3V0MS5pbmRleCAtIGxheW91dDIuaW5kZXgpO1xyXG5cdFx0bGV0IHBpcGVsaW5lID0gcmVuZGVyUGlwZWxpbmVzLmdldChoYXNoSWQpO1xyXG5cdFx0aWYgKCFwaXBlbGluZSkge1xyXG5cdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gUGlwZWxpbmUuZ2V0UGlwZWxpbmVEZXNjcmlwdG9yKFxyXG5cdFx0XHRcdGRldmljZSxcclxuXHRcdFx0XHRkcmF3Q29tYW5kLFxyXG5cdFx0XHRcdHJlbmRlclN0YXRlLFxyXG5cdFx0XHRcdGNvbWJpbmVMYXlvdXRzLFxyXG5cdFx0XHRcdGhhc2hJZC50b1N0cmluZygpXHJcblx0XHRcdCk7XHJcblx0XHRcdHBpcGVsaW5lID0gbmV3IFBpcGVsaW5lKFwicmVuZGVyXCIsIGRldmljZSwgZGVzY3JpcHRvcik7XHJcblx0XHRcdHJlbmRlclBpcGVsaW5lcy5zZXQoaGFzaElkLCBwaXBlbGluZSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcGlwZWxpbmU7XHJcblx0fVxyXG5cdHN0YXRpYyBnZXRDb21wdXRlUGlwZWxpbmVGcm9tQ2FjaGUoXHJcblx0XHRkZXZpY2U6IEdQVURldmljZSxcclxuXHRcdGNvbXB1dGVDb21tYWQ6IENvbXB1dGVDb21tYW5kLFxyXG5cdFx0Z3JvdXBMYXlvdXRzOiBCaW5kR3JvdXBMYXlvdXRbXVxyXG5cdCk6IFBpcGVsaW5lIHtcclxuXHRcdGNvbnN0IHsgc2hhZGVyU291cmNlIH0gPSBjb21wdXRlQ29tbWFkO1xyXG5cdFx0Y29uc3QgaGFzaElkID0gc3RyaW5nVG9IYXNoKHNoYWRlclNvdXJjZS51aWQpO1xyXG5cdFx0bGV0IHBpcGVsaW5lID0gY29tcHV0ZVBpcGVsaW5lcy5nZXQoaGFzaElkKTtcclxuXHRcdGlmICghcGlwZWxpbmUpIHtcclxuXHRcdFx0cGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKHtcclxuXHRcdFx0XHRsYXlvdXQ6IFBpcGVsaW5lTGF5b3V0LmdldFBpcGVsaW5lTGF5b3V0RnJvbUNhY2hlKGRldmljZSwgaGFzaElkLnRvU3RyaW5nKCksIGdyb3VwTGF5b3V0cylcclxuXHRcdFx0XHRcdC5ncHVQaXBlbGluZUxheW91dCxcclxuXHRcdFx0XHRjb21wdXRlOiB7XHJcblx0XHRcdFx0XHRtb2R1bGU6IHNoYWRlclNvdXJjZS5jcmVhdGVTaGFkZXJNb2R1bGUoZGV2aWNlKSBhcyBHUFVTaGFkZXJNb2R1bGUsXHJcblx0XHRcdFx0XHRlbnRyeVBvaW50OiBzaGFkZXJTb3VyY2UuY29tcHV0ZU1haW5cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRjb21wdXRlUGlwZWxpbmVzLnNldChoYXNoSWQsIHBpcGVsaW5lKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBwaXBlbGluZTtcclxuXHR9XHJcblx0cHJpdmF0ZSBzdGF0aWMgZ2V0UGlwZWxpbmVEZXNjcmlwdG9yKFxyXG5cdFx0ZGV2aWNlOiBHUFVEZXZpY2UsXHJcblx0XHRkcmF3Q29tYW5kOiBEcmF3Q29tbWFuZCxcclxuXHRcdHJlbmRlclN0YXRlOiBSZW5kZXJTdGF0ZSxcclxuXHRcdGdyb3VwTGF5b3V0czogQmluZEdyb3VwTGF5b3V0W10sXHJcblx0XHRoYXNoSWQ6IHN0cmluZ1xyXG5cdCk6IEdQVVJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciB7XHJcblx0XHRjb25zdCB7IHZlcnRleEJ1ZmZlciwgc2hhZGVyU291cmNlIH0gPSBkcmF3Q29tYW5kO1xyXG5cdFx0Y29uc3QgeyB2ZXJ0LCBmcmFnIH0gPSBzaGFkZXJTb3VyY2UuY3JlYXRlU2hhZGVyTW9kdWxlKGRldmljZSkgYXMge1xyXG5cdFx0XHR2ZXJ0OiBHUFVTaGFkZXJNb2R1bGU7XHJcblx0XHRcdGZyYWc6IEdQVVNoYWRlck1vZHVsZTtcclxuXHRcdH07XHJcblx0XHRjb25zdCBwaXBlbGluZURlYyA9IHtcclxuXHRcdFx0bGF5b3V0OiBQaXBlbGluZUxheW91dC5nZXRQaXBlbGluZUxheW91dEZyb21DYWNoZShkZXZpY2UsIGhhc2hJZCwgZ3JvdXBMYXlvdXRzKS5ncHVQaXBlbGluZUxheW91dFxyXG5cdFx0fSBhcyBhbnk7XHJcblx0XHRpZiAodmVydClcclxuXHRcdFx0cGlwZWxpbmVEZWMudmVydGV4ID0ge1xyXG5cdFx0XHRcdG1vZHVsZTogdmVydCxcclxuXHRcdFx0XHRlbnRyeVBvaW50OiBzaGFkZXJTb3VyY2UudmVydEVudHJ5UG9pbnQsXHJcblx0XHRcdFx0YnVmZmVyczogdmVydGV4QnVmZmVyLmdldEJ1ZmZlckRlcygpIGFzIEl0ZXJhYmxlPEdQVVZlcnRleEJ1ZmZlckxheW91dD5cclxuXHRcdFx0fTtcclxuXHRcdGlmIChyZW5kZXJTdGF0ZS5wcmltaXRpdmUpIHBpcGVsaW5lRGVjLnByaW1pdGl2ZSA9IHJlbmRlclN0YXRlLnByaW1pdGl2ZS5nZXRHUFVQcmltaXRpdmVEZWMoKTtcclxuXHRcdGlmIChyZW5kZXJTdGF0ZS5kZXB0aFN0ZW5jaWwpIHBpcGVsaW5lRGVjLmRlcHRoU3RlbmNpbCA9IHJlbmRlclN0YXRlLmRlcHRoU3RlbmNpbC5nZXRHUFVEZXB0aFN0ZW5jaWxEZWMoKTtcclxuXHRcdGlmIChyZW5kZXJTdGF0ZS5tdWx0aXNhbXBsZSkgcGlwZWxpbmVEZWMubXVsdGlzYW1wbGUgPSByZW5kZXJTdGF0ZS5tdWx0aXNhbXBsZS5nZXRNdWx0aVNhbXBsZURlYygpO1xyXG5cdFx0aWYgKGZyYWcpXHJcblx0XHRcdHBpcGVsaW5lRGVjLmZyYWdtZW50ID0ge1xyXG5cdFx0XHRcdG1vZHVsZTogZnJhZyxcclxuXHRcdFx0XHRlbnRyeVBvaW50OiBzaGFkZXJTb3VyY2UuZnJhZ0VudHJ5UG9pbnQsXHJcblx0XHRcdFx0dGFyZ2V0czogcmVuZGVyU3RhdGUudGFyZ2V0cy5tYXAoKHRhcmdldCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRhcmdldC5nZXRHUFVUYXJnZXREZWMoKTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9O1xyXG5cdFx0cmV0dXJuIHBpcGVsaW5lRGVjO1xyXG5cdH1cclxufVxyXG4vLyBCb3Jyb3dlZCBmcm9tIGh0dHBzOi8vd2VyeGx0ZC5jb20vd3AvMjAxMC8wNS8xMy9qYXZhc2NyaXB0LWltcGxlbWVudGF0aW9uLW9mLWphdmFzLXN0cmluZy1oYXNoY29kZS1tZXRob2QvXHJcbmZ1bmN0aW9uIHN0cmluZ1RvSGFzaChzdHIpIHtcclxuXHRsZXQgaGFzaCA9IDA7XHJcblx0aWYgKHN0ci5sZW5ndGggPT0gMCkgcmV0dXJuIGhhc2g7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcclxuXHRcdGNvbnN0IGNoYXIgPSBzdHIuY2hhckNvZGVBdChpKTtcclxuXHRcdGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBjaGFyO1xyXG5cdFx0aGFzaCA9IGhhc2ggJiBoYXNoOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcclxuXHR9XHJcblx0cmV0dXJuIGhhc2g7XHJcbn1cclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vY2FtZXJhL0NhbWVyYVwiO1xyXG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCIuLi9tYXRlcmlhbC9NYXRlcmlhbFwiO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tIFwiLi4vbWF0aC9NYXRyaXg0XCI7XHJcbmltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XHJcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiLi9Db21tYW5kXCI7XHJcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuL0NvbnRleHRcIjtcclxuaW1wb3J0IEluZGV4QnVmZmVyIGZyb20gXCIuL0luZGV4QnVmZmVyXCI7XHJcbmltcG9ydCBQaXBlbGluZSBmcm9tIFwiLi9QaXBlbGluZVwiO1xyXG5pbXBvcnQgeyBSZW5kZXJTdGF0ZSB9IGZyb20gXCIuL1JlbmRlclN0YXRlXCI7XHJcbmltcG9ydCBSZW5kZXJUYXJnZXQgZnJvbSBcIi4vUmVuZGVyVGFyZ2V0XCI7XHJcbmltcG9ydCBTaGFkZXJEYXRhIGZyb20gXCIuL1NoYWRlckRhdGFcIjtcclxuaW1wb3J0IFZlcnRleHRCdWZmZXIgZnJvbSBcIi4vVmVydGV4dEJ1ZmZlclwiO1xyXG5cclxuY2xhc3MgRHJhd0NvbW1hbmQgaW1wbGVtZW50cyBDb21tYW5kIHtcclxuXHRwdWJsaWMgdHlwZT86IHN0cmluZztcclxuXHJcblx0cHVibGljIHNoYWRlckRhdGE/OiBTaGFkZXJEYXRhO1xyXG5cclxuXHRwdWJsaWMgcmVuZGVyVGFyZ2V0PzogUmVuZGVyVGFyZ2V0O1xyXG5cclxuXHRwdWJsaWMgdmVydGV4QnVmZmVyPzogVmVydGV4dEJ1ZmZlcjtcclxuXHJcblx0cHVibGljIGluZGV4QnVmZmVyPzogSW5kZXhCdWZmZXI7XHJcblxyXG5cdHB1YmxpYyByZW5kZXJTdGF0ZT86IFJlbmRlclN0YXRlO1xyXG5cclxuXHRwdWJsaWMgcXVlcnlJbmRleD86IG51bWJlcjtcclxuXHJcblx0cHVibGljIGNvdW50PzogbnVtYmVyO1xyXG5cclxuXHRwdWJsaWMgaW5zdGFuY2VzPzogbnVtYmVyO1xyXG5cclxuXHRwdWJsaWMgc2hhZGVyU291cmNlPzogU2hhZGVyU291cmNlO1xyXG5cclxuXHRwdWJsaWMgZGlydHk/OiBib29sZWFuO1xyXG5cclxuXHRwdWJsaWMgbGlnaHQ/OiBib29sZWFuO1xyXG5cclxuXHRwdWJsaWMgaW5kaXJlY3RCdWZmZXI/OiBCdWZmZXI7XHJcblxyXG5cdHB1YmxpYyBtb2RlbE1hdHJpeD86IE1hdHJpeDQ7XHJcblxyXG5cdHB1YmxpYyBsaWdodFNoYWRlckRhdGE/OiBTaGFkZXJEYXRhO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihvcHRpb25zOiBEcmF3Q29tbWFuZFByb3BzKSB7XHJcblx0XHR0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XHJcblxyXG5cdFx0dGhpcy5zaGFkZXJEYXRhID0gb3B0aW9ucy5zaGFkZXJEYXRhO1xyXG5cclxuXHRcdHRoaXMucmVuZGVyVGFyZ2V0ID0gb3B0aW9ucy5yZW5kZXJUYXJnZXQ7XHJcblxyXG5cdFx0dGhpcy52ZXJ0ZXhCdWZmZXIgPSBvcHRpb25zLnZlcnRleEJ1ZmZlcjtcclxuXHJcblx0XHR0aGlzLmluZGV4QnVmZmVyID0gb3B0aW9ucy5pbmRleEJ1ZmZlcjtcclxuXHJcblx0XHR0aGlzLnJlbmRlclN0YXRlID0gb3B0aW9ucy5yZW5kZXJTdGF0ZTtcclxuXHJcblx0XHR0aGlzLnF1ZXJ5SW5kZXggPSBvcHRpb25zLnF1ZXJ5SW5kZXg7XHJcblxyXG5cdFx0dGhpcy5jb3VudCA9IG9wdGlvbnMuY291bnQ7XHJcblxyXG5cdFx0dGhpcy5pbnN0YW5jZXMgPSBvcHRpb25zLmluc3RhbmNlcztcclxuXHJcblx0XHR0aGlzLnNoYWRlclNvdXJjZSA9IG9wdGlvbnMuc2hhZGVyU291cmNlO1xyXG5cclxuXHRcdHRoaXMuZGlydHkgPSBvcHRpb25zLmRpcnR5O1xyXG5cclxuXHRcdHRoaXMubGlnaHQgPSBvcHRpb25zLmxpZ2h0O1xyXG5cclxuXHRcdHRoaXMubW9kZWxNYXRyaXggPSBvcHRpb25zLm1vZGVsTWF0cml4O1xyXG5cclxuXHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhID0gb3B0aW9ucy5saWdodFNoYWRlckRhdGE7XHJcblx0fVxyXG5cdHB1YmxpYyBzaGFsbG93Q2xvbmUobWF0ZXJpYWw/OiBNYXRlcmlhbCkge1xyXG5cdFx0aWYgKG1hdGVyaWFsKSB7XHJcblx0XHRcdHJldHVybiBuZXcgRHJhd0NvbW1hbmQoe1xyXG5cdFx0XHRcdHZlcnRleEJ1ZmZlcjogdGhpcy52ZXJ0ZXhCdWZmZXIsXHJcblx0XHRcdFx0aW5kZXhCdWZmZXI6IHRoaXMuaW5kZXhCdWZmZXIsXHJcblx0XHRcdFx0c2hhZGVyRGF0YTogbWF0ZXJpYWwuc2hhZGVyRGF0YSxcclxuXHRcdFx0XHRpbnN0YW5jZXM6IHRoaXMuaW5zdGFuY2VzLFxyXG5cdFx0XHRcdGNvdW50OiB0aGlzLmNvdW50LFxyXG5cdFx0XHRcdHJlbmRlclN0YXRlOiBtYXRlcmlhbC5yZW5kZXJTdGF0ZSxcclxuXHRcdFx0XHRzaGFkZXJTb3VyY2U6IG1hdGVyaWFsLnNoYWRlclNvdXJjZSxcclxuXHRcdFx0XHR0eXBlOiBcInJlbmRlclwiLFxyXG5cdFx0XHRcdGxpZ2h0OiBtYXRlcmlhbC5saWdodCxcclxuXHRcdFx0XHRtb2RlbE1hdHJpeDogdGhpcy5tb2RlbE1hdHJpeCxcclxuXHRcdFx0XHRsaWdodFNoYWRlckRhdGE6IG1hdGVyaWFsLmxpZ2h0ID8gdGhpcy5saWdodFNoYWRlckRhdGEgOiB1bmRlZmluZWRcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHB1YmxpYyByZW5kZXIoY29udGV4dD86IENvbnRleHQsIHBhc3NFbmNvZGVyPzogR1BVUmVuZGVyUGFzc0VuY29kZXIsIGNhbWVyYT86IENhbWVyYSk6IHZvaWQge1xyXG5cdFx0Y29uc3Qge1xyXG5cdFx0XHRzaGFkZXJEYXRhLFxyXG5cdFx0XHRtb2RlbE1hdHJpeCxcclxuXHRcdFx0cmVuZGVyU3RhdGUsXHJcblx0XHRcdHZlcnRleEJ1ZmZlcixcclxuXHRcdFx0aW5kZXhCdWZmZXIsXHJcblx0XHRcdGxpZ2h0U2hhZGVyRGF0YSxcclxuXHRcdFx0c2hhZGVyU291cmNlLFxyXG5cdFx0XHRjb3VudCxcclxuXHRcdFx0aW5zdGFuY2VzLFxyXG5cdFx0XHRyZW5kZXJUYXJnZXRcclxuXHRcdH0gPSB0aGlzO1xyXG5cdFx0Y29uc3QgY3VycmVudFBhc3NFbmNvZGVyID0gcmVuZGVyVGFyZ2V0Py5iZWdpblJlbmRlclBhc3NFbmNvZGVyPy4oY29udGV4dCkgPz8gcGFzc0VuY29kZXI7XHJcblx0XHRjb25zdCBkZWZpbmVzID0gT2JqZWN0LmFzc2lnbih7fSwgbGlnaHRTaGFkZXJEYXRhPy5kZWZpbmVzID8/IHt9LCBjYW1lcmE/LnNoYWRlckRhdGE/LmRlZmluZXMgPz8ge30pO1xyXG5cdFx0Y29uc3QgeyBkZXZpY2UgfSA9IGNvbnRleHQ7XHJcblxyXG5cdFx0aWYgKG1vZGVsTWF0cml4KSBzaGFkZXJEYXRhPy5yZXBsYWNlVW5pZm9ybUJ1ZmZlclZhbHVlPy4oXCJtb2RlbE1hdHJpeFwiLCBtb2RlbE1hdHJpeCk7XHJcblxyXG5cdFx0c2hhZGVyRGF0YT8uYmluZD8uKGNvbnRleHQsIGN1cnJlbnRQYXNzRW5jb2Rlcik7XHJcblxyXG5cdFx0Y2FtZXJhPy5zaGFkZXJEYXRhPy5iaW5kKGNvbnRleHQsIGN1cnJlbnRQYXNzRW5jb2Rlcik7XHJcblxyXG5cdFx0bGlnaHRTaGFkZXJEYXRhPy5iaW5kPy4oY29udGV4dCwgY3VycmVudFBhc3NFbmNvZGVyKTtcclxuXHJcblx0XHRyZW5kZXJTdGF0ZT8uYmluZD8uKGN1cnJlbnRQYXNzRW5jb2RlciwgY29udGV4dCk7XHJcblxyXG5cdFx0dmVydGV4QnVmZmVyPy5iaW5kPy4oZGV2aWNlLCBjdXJyZW50UGFzc0VuY29kZXIpO1xyXG5cclxuXHRcdGluZGV4QnVmZmVyPy5iaW5kPy4oZGV2aWNlLCBjdXJyZW50UGFzc0VuY29kZXIpO1xyXG5cclxuXHRcdHNoYWRlclNvdXJjZT8uc2V0RGVmaW5lcz8uKGRlZmluZXMpO1xyXG5cclxuXHRcdGNvbnN0IHBpcGVsaW5lID0gUGlwZWxpbmUuZ2V0UmVuZGVyUGlwZWxpbmVGcm9tQ2FjaGUoZGV2aWNlLCB0aGlzLCBbXHJcblx0XHRcdHNoYWRlckRhdGE/Lmdyb3VwTGF5b3V0LFxyXG5cdFx0XHRsaWdodFNoYWRlckRhdGE/Lmdyb3VwTGF5b3V0LFxyXG5cdFx0XHRjYW1lcmE/LnNoYWRlckRhdGE/Lmdyb3VwTGF5b3V0XHJcblx0XHRdKTtcclxuXHRcdHBpcGVsaW5lLmJpbmQoY3VycmVudFBhc3NFbmNvZGVyKTtcclxuXHRcdGlmIChpbmRleEJ1ZmZlcikge1xyXG5cdFx0XHRjdXJyZW50UGFzc0VuY29kZXIuZHJhd0luZGV4ZWQoY291bnQgfHwgMCwgaW5zdGFuY2VzIHx8IDEsIDAsIDAsIDApO1xyXG5cdFx0fSBlbHNlIGlmIChjb3VudCkge1xyXG5cdFx0XHRjdXJyZW50UGFzc0VuY29kZXIuZHJhdyhjb3VudCwgaW5zdGFuY2VzIHx8IDEsIDAsIDApO1xyXG5cdFx0fVxyXG5cdFx0cmVuZGVyVGFyZ2V0Py5lbmRSZW5kZXJQYXNzRW5jb2Rlcj8uKCk7XHJcblx0fVxyXG59XHJcbnR5cGUgRHJhd0NvbW1hbmRQcm9wcyA9IHtcclxuXHR0eXBlPzogc3RyaW5nO1xyXG5cclxuXHRzaGFkZXJEYXRhPzogU2hhZGVyRGF0YTtcclxuXHJcblx0cmVuZGVyVGFyZ2V0PzogUmVuZGVyVGFyZ2V0O1xyXG5cclxuXHR2ZXJ0ZXhCdWZmZXI/OiBWZXJ0ZXh0QnVmZmVyO1xyXG5cclxuXHRpbmRleEJ1ZmZlcj86IEluZGV4QnVmZmVyO1xyXG5cclxuXHRyZW5kZXJTdGF0ZT86IFJlbmRlclN0YXRlO1xyXG5cclxuXHRxdWVyeUluZGV4PzogbnVtYmVyO1xyXG5cclxuXHRjb3VudD86IG51bWJlcjtcclxuXHJcblx0aW5zdGFuY2VzPzogbnVtYmVyO1xyXG5cclxuXHRzaGFkZXJTb3VyY2U/OiBTaGFkZXJTb3VyY2U7XHJcblxyXG5cdGRpcnR5PzogYm9vbGVhbjtcclxuXHJcblx0bGlnaHQ/OiBib29sZWFuO1xyXG5cclxuXHRtb2RlbE1hdHJpeD86IE1hdHJpeDQ7XHJcblxyXG5cdGxpZ2h0U2hhZGVyRGF0YT86IFNoYWRlckRhdGE7XHJcbn07XHJcbmV4cG9ydCBkZWZhdWx0IERyYXdDb21tYW5kO1xyXG4iLCJpbXBvcnQgQmluZEdyb3VwTGF5b3V0IGZyb20gXCIuLi9yZW5kZXIvQmluZEdyb3VwTGF5b3V0XCI7XHJcbmltcG9ydCBCaW5kR3JvdXBFbnRpdHkgZnJvbSBcIi4uL3JlbmRlci9CaW5kR3JvdXBFbnRpdHlcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcbmltcG9ydCB7XHJcblx0QmxlbmRGYWN0b3IsXHJcblx0QmxlbmRPcGVyYXRpb24sXHJcblx0Q29sb3JXcml0ZUZsYWdzLFxyXG5cdENvbXBhcmVGdW5jdGlvbixcclxuXHRDdWxsTW9kZSxcclxuXHRGcm9udEZhY2UsXHJcblx0SW5kZXhGb3JtYXQsXHJcblx0UHJpbWl0aXZlVG9wb2xvZ3ksXHJcblx0U3RlbmNpbE9wZXJhdGlvbixcclxuXHRUZXh0dXJlRm9ybWF0XHJcbn0gZnJvbSBcIi4vV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IFNhbXBsZXIgZnJvbSBcIi4uL3JlbmRlci9TYW1wbGVyXCI7XHJcbmltcG9ydCBQb3N0RWZmZWN0IGZyb20gXCIuLi9wb3N0LXByb2Nlc3MvUG9zdEVmZmVjdFwiO1xyXG5pbXBvcnQgeyBMaWdodCB9IGZyb20gXCIuLi9saWdodC9MaWdodFwiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xyXG5leHBvcnQgY29uc3QgR1BVQ2FudmFzQ29tcG9zaXRpbmdBbHBoYU1vZGU6IHtcclxuXHRba2V5OiBzdHJpbmddOiBHUFVDYW52YXNDb21wb3NpdGluZ0FscGhhTW9kZTtcclxufSA9IHtcclxuXHRPcGFxdWU6IFwib3BhcXVlXCIsXHJcblx0UHJlbXVsdGlwbGllZDogXCJwcmVtdWx0aXBsaWVkXCJcclxufTtcclxuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0U3RhdGUge1xyXG5cdGRldmljZTogR1BVRGV2aWNlO1xyXG5cdGdsc2xhbmc6IHtcclxuXHRcdGNvbXBpbGVHTFNMOiAoc291cmNlOiBzdHJpbmcsIHR5cGU6IHN0cmluZykgPT4gc3RyaW5nO1xyXG5cdH07XHJcblx0ZGVidWc6IGJvb2xlYW47XHJcblx0ZXJyb3I6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dE9wdGlvbnMge1xyXG5cdGNhbnZhcz86IEhUTUxDYW52YXNFbGVtZW50O1xyXG5cdGNvbnRhaW5lcj86IEhUTUxEaXZFbGVtZW50O1xyXG5cdGNvbnRleHQ/OiBHUFVDYW52YXNDb250ZXh0O1xyXG5cdHBpeGVsUmF0aW8/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGlnaHRNYW5nZXJPcHRpb25zIHtcclxuXHRvcGVuU2hhZG93OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEJpbmRHcm91cExheW91dEVudHJ5IGV4dGVuZHMgR1BVQmluZEdyb3VwTGF5b3V0RW50cnkge1xyXG5cdG5hbWU6IHN0cmluZztcclxuXHR1bmlmb3Jtcz86IGFueVtdO1xyXG5cdGRpbWVuc2lvbj86IEdQVVRleHR1cmVEaW1lbnNpb247XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmluZEdyb3VwT3B0aW9ucyBleHRlbmRzIEdQVUJpbmRHcm91cERlc2NyaXB0b3Ige1xyXG5cdHJlc291cmNlczogR1BVQmluZGluZ1Jlc291cmNlW107XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFNoYWRlclN0YWdlTmFtZSA9IFwidmVydGV4XCIgfCBcImZyYWdtZW50XCIgfCBcImNvbXB1dGVcIjtcclxuXHJcbmV4cG9ydCB0eXBlIFNoYWRlclN0YWdlTmFtZU9iamVjdEtleXMgPSB7XHJcblx0W2tleSBpbiBTaGFkZXJTdGFnZU5hbWVdPzogc3RyaW5nO1xyXG59O1xyXG5leHBvcnQgdHlwZSBTaGFkZXJTdGFnZUJvZHlOYW1lID0gXCJ2ZXJ0ZXhCb2R5XCIgfCBcImZyYWdtZW50Qm9keVwiIHwgXCJjb21wdXRlQm9keVwiO1xyXG5leHBvcnQgdHlwZSBTaGFkZXJTdGFnZUJvZHlOYW1lT2JqZWN0S2V5cyA9IHtcclxuXHRba2V5IGluIFNoYWRlclN0YWdlQm9keU5hbWVdPzogc3RyaW5nO1xyXG59O1xyXG5leHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnRPcHRpb25zIHtcclxuXHRvcD86IEdQVVN0b3JlT3A7XHJcblx0dGV4dHVyZT86IFRleHR1cmU7XHJcblx0cmVzb2x2ZVRhcmdldD86IFRleHR1cmU7XHJcblx0c3RvcmVPcD86IEdQVVN0b3JlT3A7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFBhc3NUeXBlID0gXCJyZW5kZXJcIiB8IFwiY29tcHV0ZVwiO1xyXG5cclxuZXhwb3J0IHR5cGUgR1BVQmluZGluZ1R5cGUgPVxyXG5cdHwgR1BVQnVmZmVyQmluZGluZ1R5cGVcclxuXHR8IEdQVVNhbXBsZXJCaW5kaW5nVHlwZVxyXG5cdHwgR1BVVGV4dHVyZVNhbXBsZVR5cGVcclxuXHR8IEdQVVN0b3JhZ2VUZXh0dXJlQWNjZXNzO1xyXG5cclxuZXhwb3J0IHR5cGUgQmluZEdyb3VwTGF5b3V0RW50cnlUeXBlID0ge1xyXG5cdGJpbmRpbmc6IG51bWJlcjtcclxuXHR2aXNpYmlsaXR5OiBHUFVTaGFkZXJTdGFnZUZsYWdzO1xyXG5cdHVuaWZvcm1zPzogYW55W107XHJcblx0YnVmZmVyPzogR1BVQnVmZmVyQmluZGluZ0xheW91dDtcclxuXHRzYW1wbGVyPzogR1BVU2FtcGxlckJpbmRpbmdMYXlvdXQ7XHJcblx0dGV4dHVyZT86IEdQVVRleHR1cmVCaW5kaW5nTGF5b3V0O1xyXG5cdHN0b3JhZ2VUZXh0dXJlPzogR1BVU3RvcmFnZVRleHR1cmVCaW5kaW5nTGF5b3V0O1xyXG5cdGV4dGVybmFsVGV4dHVyZT86IEdQVUV4dGVybmFsVGV4dHVyZUJpbmRpbmdMYXlvdXQ7XHJcbn07XHJcbmV4cG9ydCB0eXBlIEJ1ZmZlclJlc291cmNlVHlwZSA9IHtcclxuXHRidWZmZXI6IEdQVUJ1ZmZlckJpbmRpbmdUeXBlO1xyXG5cdG9mZnNldDogbnVtYmVyO1xyXG5cdHNpemU6IG51bWJlcjtcclxufTtcclxuZXhwb3J0IHR5cGUgc2FtcGxlckJpbmRFbnRpdHlSZXNvdXJjZVR5cGUgPSB7XHJcblx0cmVzb3VyY2U6IEdQVVNhbXBsZXI7XHJcbn07XHJcbmV4cG9ydCB0eXBlIHRleHR1cmVCaW5kRW50aXR5UmVzb3VyY2VUeXBlID0ge1xyXG5cdHJlc291cmNlOiBHUFVUZXh0dXJlVmlldztcclxufTtcclxuZXhwb3J0IHR5cGUgQmluZEdyb3VwRW50aXR5UmVzb3VyY2VUeXBlID1cclxuXHR8IEJ1ZmZlclJlc291cmNlVHlwZVxyXG5cdHwgc2FtcGxlckJpbmRFbnRpdHlSZXNvdXJjZVR5cGVcclxuXHR8IHRleHR1cmVCaW5kRW50aXR5UmVzb3VyY2VUeXBlO1xyXG5leHBvcnQgdHlwZSBCaW5kR3JvdXBFbnRpdHlPcHRpb25zID0ge1xyXG5cdGJpbmRpbmc6IG51bWJlcjtcclxuXHRyZXNvdXJjZTogR1BVQmluZGluZ1Jlc291cmNlO1xyXG59O1xyXG5leHBvcnQgdHlwZSBCaW5kR3JvdXBDYWNoZU9wdGlvbnMgPSB7XHJcblx0ZGV2aWNlOiBHUFVEZXZpY2U7XHJcblx0bGFiZWw6IHN0cmluZztcclxuXHRsYXlvdXQ6IEJpbmRHcm91cExheW91dDtcclxuXHRlbnRpcmVzOiBCaW5kR3JvdXBFbnRpdHlbXTtcclxuXHRpbmRleD86IG51bWJlcjtcclxuXHRvZmZzZXQ/OiBudW1iZXI7XHJcblx0YWxpZ25lZFNpemU/OiBudW1iZXI7XHJcblx0bWF4T2Zmc2V0PzogbnVtYmVyO1xyXG5cdGR5bmFtaWM/OiBib29sZWFuO1xyXG59O1xyXG5leHBvcnQgdHlwZSBJbWFnZURhdGEgPSB7XHJcblx0c291cmNlOiBJbWFnZUJpdG1hcCB8IEhUTUxDYW52YXNFbGVtZW50IHwgVGV4dHVyZTtcclxuXHR3aWR0aD86IG51bWJlcjtcclxuXHRoZWlnaHQ/OiBudW1iZXI7XHJcblx0ZGVwdGg/OiBudW1iZXI7XHJcblx0c291cmNlWD86IG51bWJlcjtcclxuXHRzb3VyY2VZPzogbnVtYmVyO1xyXG5cdG1pcExldmVsPzogbnVtYmVyO1xyXG5cdHg/OiBudW1iZXI7XHJcblx0eT86IG51bWJlcjtcclxuXHR6PzogbnVtYmVyO1xyXG5cdGFzcGVjdD86IFwiYWxsXCIgfCBcInN0ZW5jaWwtb25seVwiIHwgXCJkZXB0aC1vbmx5XCI7XHJcblx0Y29sb3JTcGFjZT86IFwic3JnYlwiO1xyXG5cdHByZW11bHRpcGxpZWRBbHBoYT86IGJvb2xlYW47XHJcbn07XHJcbmV4cG9ydCB0eXBlIFdlYkdQVVRleHR1cmVQcm9wcyA9IHtcclxuXHRzaXplOiB0ZXh0dXJlU2l6ZTtcclxuXHJcblx0Zml4ZWRTaXplPzogYm9vbGVhbjtcclxuXHJcblx0Zm9ybWF0OiBzdHJpbmc7XHJcblxyXG5cdGxhYmVsPzogc3RyaW5nO1xyXG5cclxuXHR1c2FnZT86IG51bWJlcjtcclxuXHJcblx0c2FtcGxlcj86IFNhbXBsZXI7XHJcblxyXG5cdGRhdGE/OiBJbWFnZURhdGEgfCBBcnJheTxJbWFnZURhdGE+O1xyXG5cclxuXHRtaXBMZXZlbENvdW50PzogbnVtYmVyO1xyXG5cclxuXHRzYW1wbGVDb3VudD86IG51bWJlcjtcclxuXHJcblx0ZGltZW5zaW9uPzogZGltZW5zaW9uO1xyXG5cclxuXHR2aWV3Rm9ybWF0cz86IHN0cmluZztcclxuXHJcblx0c2FtcGxlVHlwZT86IHN0cmluZztcclxuXHJcblx0bmVlZE1pcE1hcD86IGJvb2xlYW47XHJcblxyXG5cdGRhdGFJc1RleHR1cmU/OiBib29sZWFuO1xyXG59O1xyXG5leHBvcnQgdHlwZSB0ZXh0dXJlU2l6ZSA9IHtcclxuXHR3aWR0aDogbnVtYmVyO1xyXG5cdGhlaWdodDogbnVtYmVyO1xyXG5cdGRlcHRoOiBudW1iZXI7XHJcbn07XHJcbmV4cG9ydCB0eXBlIGRpbWVuc2lvbiA9IFwiMWRcIiB8IFwiMmRcIiB8IFwiM2RcIjtcclxuZXhwb3J0IHR5cGUgYnVmZmVyTGF5b3V0VHlwZSA9IHtcclxuXHR0eXBlOiBzdHJpbmc7IC8vXCJ1bmlmb3JtXCJcclxuXHRoYXNEeW5hbWljT2Zmc2V0PzogQm9vbGVhbjtcclxuXHRtaW5CaW5kaW5nU2l6ZT86IG51bWJlcjtcclxufTtcclxuLy9yZW5kZXJzdGF0ZVxyXG5leHBvcnQgdHlwZSBEZXB0aFN0ZW5jaWwgPSB7XHJcblx0Zm9ybWF0OiBUZXh0dXJlRm9ybWF0O1xyXG5cdGRlcHRoV3JpdGVFbmFibGVkOiBib29sZWFuO1xyXG5cdGRlcHRoQ29tcGFyZTogQ29tcGFyZUZ1bmN0aW9uO1xyXG5cdHN0ZW5jaWxSZWFkTWFzaz86IG51bWJlcjtcclxuXHRzdGVuY2lsV3JpdGVNYXNrPzogbnVtYmVyO1xyXG5cdHN0ZW5jaWxGcm9udD86IHtcclxuXHRcdGNvbXBhcmU6IENvbXBhcmVGdW5jdGlvbjtcclxuXHRcdGZhaWxPcDogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHRcdGRlcHRoRmFpbE9wOiBTdGVuY2lsT3BlcmF0aW9uO1xyXG5cdFx0cGFzc09wOiBTdGVuY2lsT3BlcmF0aW9uO1xyXG5cdH07XHJcblx0c3RlbmNpbEJhY2s/OiB7XHJcblx0XHRjb21wYXJlOiBDb21wYXJlRnVuY3Rpb247XHJcblx0XHRmYWlsT3A6IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0XHRkZXB0aEZhaWxPcDogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHRcdHBhc3NPcDogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHR9O1xyXG5cdGRlcHRoQmlhcz86IG51bWJlcjtcclxuXHRkZXB0aEJpYXNTbG9wZVNjYWxlPzogbnVtYmVyO1xyXG5cdGRlcHRoQmlhc0NsYW1wPzogbnVtYmVyO1xyXG59O1xyXG5leHBvcnQgdHlwZSBQcmltaXRpdmVTdGF0ZSA9IHtcclxuXHRmcm9udEZhY2U/OiBGcm9udEZhY2U7XHJcblx0Y3VsbE1vZGU/OiBDdWxsTW9kZTtcclxuXHR1bmNsaXBwZWREZXB0aD86IGJvb2xlYW47XHJcblx0dG9wb2xvZ3k/OiBQcmltaXRpdmVUb3BvbG9neTtcclxuXHRzdHJpcEluZGV4Rm9ybWF0PzogSW5kZXhGb3JtYXQ7XHJcbn07XHJcbmV4cG9ydCB0eXBlIE11bHRpU2FtcGxlID0ge1xyXG5cdGNvdW50PzogbnVtYmVyO1xyXG5cdG1hc2s/OiBudW1iZXI7XHJcblx0YWxwaGFUb0NvdmVyYWdlRW5hYmxlZD86IGJvb2xlYW47XHJcbn07XHJcbmV4cG9ydCB0eXBlIFRhcmdldCA9IHtcclxuXHRmb3JtYXQ6IFRleHR1cmVGb3JtYXQ7XHJcblx0YmxlbmQ/OiB7XHJcblx0XHRjb2xvcjoge1xyXG5cdFx0XHRvcGVyYXRpb246IEJsZW5kT3BlcmF0aW9uO1xyXG5cdFx0XHRzcmNGYWN0b3I6IEJsZW5kRmFjdG9yO1xyXG5cdFx0XHRkc3RGYWN0b3I6IEJsZW5kRmFjdG9yO1xyXG5cdFx0fTtcclxuXHRcdGFscGhhOiB7XHJcblx0XHRcdG9wZXJhdGlvbjogQmxlbmRPcGVyYXRpb247XHJcblx0XHRcdHNyY0ZhY3RvcjogQmxlbmRGYWN0b3I7XHJcblx0XHRcdGRzdEZhY3RvcjogQmxlbmRGYWN0b3I7XHJcblx0XHR9O1xyXG5cdH07XHJcblx0d3JpdGVNYXNrOiBDb2xvcldyaXRlRmxhZ3M7XHJcbn07XHJcbmV4cG9ydCB0eXBlIEJsZW5kQ29uc3RhbnQgPSB7XHJcblx0cjogbnVtYmVyO1xyXG5cdGc6IG51bWJlcjtcclxuXHRiOiBudW1iZXI7XHJcblx0YTogbnVtYmVyO1xyXG59O1xyXG5leHBvcnQgdHlwZSBSZW5kZXJTdGF0ZVByb3BzID0ge1xyXG5cdGRlcHRoU3RlbmNpbD86IERlcHRoU3RlbmNpbDtcclxuXHRwcmltaXRpdmU/OiBQcmltaXRpdmVTdGF0ZTtcclxuXHRtdWx0aXNhbXBsZT86IE11bHRpU2FtcGxlO1xyXG5cdHN0ZW5jaWxSZWZlcmVuY2U/OiBudW1iZXI7XHJcblx0dGFyZ2V0cz86IEFycmF5PFRhcmdldD47XHJcblx0dmlld3BvcnQ/OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9O1xyXG5cdGJsZW5kQ29uc3RhbnQ/OiBCbGVuZENvbnN0YW50O1xyXG5cdHNjaXNzb3JUZXN0RW5hYmxlZD86IGJvb2xlYW47XHJcblx0c3RlbmNpbEVuYWJsZWQ/OiBib29sZWFuO1xyXG59O1xyXG5leHBvcnQgdHlwZSBWaWV3UG9ydCA9IHtcclxuXHR4OiBudW1iZXI7XHJcblx0eTogbnVtYmVyO1xyXG5cdHdpZHRoOiBudW1iZXI7XHJcblx0aGVpZ2h0OiBudW1iZXI7XHJcbn07XHJcbmV4cG9ydCB0eXBlIFNjaXNzb3JUZXN0ID0ge1xyXG5cdHg6IG51bWJlcjtcclxuXHR5OiBudW1iZXI7XHJcblx0d2lkdGg6IG51bWJlcjtcclxuXHRoZWlnaHQ6IG51bWJlcjtcclxufTtcclxuZXhwb3J0IHR5cGUgU2hhZGVyTWF0ZXJpYWxQYXJtcyA9IHtcclxuXHR0eXBlOiBzdHJpbmc7XHJcblx0ZnJhZzogc3RyaW5nIHwgRnVuY3Rpb247XHJcblx0dmVydDogc3RyaW5nIHwgRnVuY3Rpb247XHJcblx0dW5pZm9ybXM6IHsgW3VuaWZvcm06IHN0cmluZ106IElVbmlmb3JtIH07XHJcblx0ZGVmaW5lcz86IGFueTtcclxuXHRsaWdodD86IGJvb2xlYW47XHJcbn07XHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVuaWZvcm08VFZhbHVlID0gYW55PiB7XHJcblx0dHlwZTogc3RyaW5nO1xyXG5cdHZhbHVlOiBUVmFsdWU7XHJcbn1cclxuZXhwb3J0IHR5cGUgVW5pZm9ybXMgPSB7IFt1bmlmb3JtOiBzdHJpbmddOiBJVW5pZm9ybSB9O1xyXG5leHBvcnQgdHlwZSBJbnN0YW5jZSA9IE1lc2ggfCBQb3N0RWZmZWN0IHwgTGlnaHQ7XHJcblxyXG5leHBvcnQgZW51bSBSZW5kZXJPYmplY3RUeXBlIHtcclxuXHRDYW1lcmEgPSBcImNhbWVyYVwiLFxyXG5cdExpZ2h0ID0gXCJsaWdodFwiLFxyXG5cdE1lc2ggPSBcIm1lc2hcIixcclxuXHRTa2luTWVzaCA9IFwic2tpbk1lc2hcIixcclxuXHROb2RlID0gXCJub2RlXCIsXHJcblx0QXhlcyA9IFwiYXhlc1wiLFxyXG5cdFNreWJveCA9IFwic2t5Qm94XCIsXHJcblx0UG9zdEVmZmVjdCA9IFwicG9zdEVmZmVjdFwiLFxyXG5cdERlYnVnID0gXCJkZWJ1Z1wiXHJcbn1cclxuZXhwb3J0IGVudW0gTGlnaHRUeXBlIHtcclxuXHRTcG90TGlnaHQgPSBcInNwb3RMaWdodFwiLFxyXG5cdFBvaW50TGlnaHQgPSBcInBvaW50TGlnaHRcIixcclxuXHRBbWJpZW50TGlnaHQgPSBcImFtYmllbnRMaWdodFwiLFxyXG5cdERpcmVjdGlvbmFsTGlnaHQgPSBcImRpcmVjdGlvbmFsTGlnaHRcIlxyXG59XHJcbiIsImltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1pcG1hcEdlbmVyYXRvciB7XHJcblx0ZGV2aWNlOiBHUFVEZXZpY2U7XHJcblx0c2FtcGxlcjogR1BVU2FtcGxlcjtcclxuXHRwaXBlbGluZXM6IG9iamVjdDtcclxuXHRtaXBtYXBTaGFkZXJNb2R1bGU6IEdQVVNoYWRlck1vZHVsZTtcclxuXHRjb25zdHJ1Y3RvcihkZXZpY2UpIHtcclxuXHRcdHRoaXMuZGV2aWNlID0gZGV2aWNlO1xyXG5cdFx0dGhpcy5zYW1wbGVyID0gZGV2aWNlLmNyZWF0ZVNhbXBsZXIoeyBtaW5GaWx0ZXI6IFwibGluZWFyXCIgfSk7XHJcblx0XHQvLyBXZSdsbCBuZWVkIGEgbmV3IHBpcGVsaW5lIGZvciBldmVyeSB0ZXh0dXJlIGZvcm1hdCB1c2VkLlxyXG5cdFx0dGhpcy5waXBlbGluZXMgPSB7fTtcclxuXHR9XHJcblx0cHJpdmF0ZSBnZXRNaXBtYXBQaXBlbGluZShmb3JtYXQpIHtcclxuXHRcdGxldCBwaXBlbGluZSA9IHRoaXMucGlwZWxpbmVzW2Zvcm1hdF07XHJcblx0XHRpZiAoIXBpcGVsaW5lKSB7XHJcblx0XHRcdC8vIFNoYWRlciBtb2R1bGVzIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBwaXBlbGluZXMsIHNvIG9ubHkgY3JlYXRlIG9uY2UuXHJcblx0XHRcdGlmICghdGhpcy5taXBtYXBTaGFkZXJNb2R1bGUpIHtcclxuXHRcdFx0XHR0aGlzLm1pcG1hcFNoYWRlck1vZHVsZSA9IHRoaXMuZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7XHJcblx0XHRcdFx0XHRjb2RlOiBgXHJcbiAgICAgICAgICAgICAgdmFyPHByaXZhdGU+IHBvcyA6IGFycmF5PHZlYzI8ZjMyPiwgMz4gPSBhcnJheTx2ZWMyPGYzMj4sIDM+KFxyXG4gICAgICAgICAgICAgICAgdmVjMjxmMzI+KC0xLjAsIC0xLjApLCB2ZWMyPGYzMj4oLTEuMCwgMy4wKSwgdmVjMjxmMzI+KDMuMCwgLTEuMCkpO1xyXG4gICAgICAgICAgICAgIHN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgICAgICAgICAgICAgQGJ1aWx0aW4ocG9zaXRpb24pIHBvc2l0aW9uIDogdmVjNDxmMzI+LFxyXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKDApIHRleENvb3JkIDogdmVjMjxmMzI+LFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgQHZlcnRleFxyXG4gICAgICAgICAgICAgIGZuIHZlcnRleE1haW4oQGJ1aWx0aW4odmVydGV4X2luZGV4KSB2ZXJ0ZXhJbmRleCA6IHUzMikgLT4gVmVydGV4T3V0cHV0IHtcclxuICAgICAgICAgICAgICAgIHZhciBvdXRwdXQgOiBWZXJ0ZXhPdXRwdXQ7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQudGV4Q29vcmQgPSBwb3NbdmVydGV4SW5kZXhdICogdmVjMjxmMzI+KDAuNSwgLTAuNSkgKyB2ZWMyPGYzMj4oMC41KTtcclxuICAgICAgICAgICAgICAgIG91dHB1dC5wb3NpdGlvbiA9IHZlYzQ8ZjMyPihwb3NbdmVydGV4SW5kZXhdLCAwLjAsIDEuMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgdmFyIGltZ1NhbXBsZXIgOiBzYW1wbGVyO1xyXG4gICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygxKSB2YXIgaW1nIDogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgIEBmcmFnbWVudFxyXG4gICAgICAgICAgICAgIGZuIGZyYWdtZW50TWFpbihAbG9jYXRpb24oMCkgdGV4Q29vcmQgOiB2ZWMyPGYzMj4pIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmVTYW1wbGUoaW1nLCBpbWdTYW1wbGVyLCB0ZXhDb29yZCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBgXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHBpcGVsaW5lID0gdGhpcy5kZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUoe1xyXG5cdFx0XHRcdGxheW91dDogXCJhdXRvXCIsXHJcblx0XHRcdFx0dmVydGV4OiB7XHJcblx0XHRcdFx0XHRtb2R1bGU6IHRoaXMubWlwbWFwU2hhZGVyTW9kdWxlLFxyXG5cdFx0XHRcdFx0ZW50cnlQb2ludDogXCJ2ZXJ0ZXhNYWluXCJcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGZyYWdtZW50OiB7XHJcblx0XHRcdFx0XHRtb2R1bGU6IHRoaXMubWlwbWFwU2hhZGVyTW9kdWxlLFxyXG5cdFx0XHRcdFx0ZW50cnlQb2ludDogXCJmcmFnbWVudE1haW5cIixcclxuXHRcdFx0XHRcdHRhcmdldHM6IFt7IGZvcm1hdCB9XVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHRcdHRoaXMucGlwZWxpbmVzW2Zvcm1hdF0gPSBwaXBlbGluZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBwaXBlbGluZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdlbmVyYXRlcyBtaXBtYXBzIGZvciB0aGUgZ2l2ZW4gR1BVVGV4dHVyZSBmcm9tIHRoZSBkYXRhIGluIGxldmVsIDAuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge21vZHVsZTpFeHRlcm5hbC5HUFVUZXh0dXJlfSB0ZXh0dXJlIC0gVGV4dHVyZSB0byBnZW5lcmF0ZSBtaXBtYXBzIGZvci5cclxuXHQgKiBAcGFyYW0ge29iamVjdH0gdGV4dHVyZURlc2NyaXB0b3IgLSBHUFVUZXh0dXJlRGVzY3JpcHRvciB0aGUgdGV4dHVyZSB3YXMgY3JlYXRlZCB3aXRoLlxyXG5cdCAqIEByZXR1cm5zIHttb2R1bGU6RXh0ZXJuYWwuR1BVVGV4dHVyZX0gLSBUaGUgb3JpZ2luYWxseSBwYXNzZWQgdGV4dHVyZVxyXG5cdCAqL1xyXG5cdGdlbmVyYXRlTWlwbWFwKHNvdXJjZVRleHR1cmU6IFRleHR1cmUpIHtcclxuXHRcdGNvbnN0IHRleHR1cmUgPSBzb3VyY2VUZXh0dXJlLmdwdVRleHR1cmU7XHJcblx0XHRjb25zdCB0ZXh0dXJlRGVzY3JpcHRvciA9IHNvdXJjZVRleHR1cmUudGV4dHVyZVByb3A7XHJcblx0XHQvLyBUT0RPOiBEb2VzIHRoaXMgbmVlZCB0byBoYW5kbGUgc1JHQiBmb3JtYXRzIGRpZmZlcmVudGx5P1xyXG5cdFx0Y29uc3QgcGlwZWxpbmUgPSB0aGlzLmdldE1pcG1hcFBpcGVsaW5lKHRleHR1cmVEZXNjcmlwdG9yLmZvcm1hdCk7XHJcblxyXG5cdFx0aWYgKHRleHR1cmVEZXNjcmlwdG9yLmRpbWVuc2lvbiA9PSBcIjNkXCIgfHwgdGV4dHVyZURlc2NyaXB0b3IuZGltZW5zaW9uID09IFwiMWRcIikge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0aW5nIG1pcG1hcHMgZm9yIG5vbi0yZCB0ZXh0dXJlcyBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQhXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBtaXBUZXh0dXJlID0gdGV4dHVyZTtcclxuXHRcdGNvbnN0IGFycmF5TGF5ZXJDb3VudCA9IHRleHR1cmVEZXNjcmlwdG9yLnNpemUuZGVwdGggfHwgMTsgLy8gT25seSB2YWxpZCBmb3IgMkQgdGV4dHVyZXMuXHJcblxyXG5cdFx0Ly8gSWYgdGhlIHRleHR1cmUgd2FzIGNyZWF0ZWQgd2l0aCBSRU5ERVJfQVRUQUNITUVOVCB1c2FnZSB3ZSBjYW4gcmVuZGVyIGRpcmVjdGx5IGJldHdlZW4gbWlwIGxldmVscy5cclxuXHRcdGNvbnN0IHJlbmRlclRvU291cmNlID0gdGV4dHVyZURlc2NyaXB0b3IudXNhZ2UgJiBHUFVUZXh0dXJlVXNhZ2UuUkVOREVSX0FUVEFDSE1FTlQ7XHJcblx0XHRpZiAoIXJlbmRlclRvU291cmNlKSB7XHJcblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBoYXZlIHRvIHVzZSBhIHNlcGFyYXRlIHRleHR1cmUgdG8gcmVuZGVyIGludG8uIEl0IGNhbiBiZSBvbmUgbWlwIGxldmVsIHNtYWxsZXIgdGhhbiB0aGUgc291cmNlXHJcblx0XHRcdC8vIHRleHR1cmUsIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgdG9wIGxldmVsLlxyXG5cdFx0XHRjb25zdCBtaXBUZXh0dXJlRGVzY3JpcHRvciA9IHtcclxuXHRcdFx0XHRzaXplOiB7XHJcblx0XHRcdFx0XHR3aWR0aDogTWF0aC5jZWlsKHRleHR1cmVEZXNjcmlwdG9yLnNpemUud2lkdGggLyAyKSxcclxuXHRcdFx0XHRcdGhlaWdodDogTWF0aC5jZWlsKHRleHR1cmVEZXNjcmlwdG9yLnNpemUuaGVpZ2h0IC8gMiksXHJcblx0XHRcdFx0XHRkZXB0aE9yQXJyYXlMYXllcnM6IGFycmF5TGF5ZXJDb3VudFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0Zm9ybWF0OiA8R1BVVGV4dHVyZUZvcm1hdD50ZXh0dXJlRGVzY3JpcHRvci5mb3JtYXQsXHJcblx0XHRcdFx0dXNhZ2U6IEdQVVRleHR1cmVVc2FnZS5URVhUVVJFX0JJTkRJTkcgfCBHUFVUZXh0dXJlVXNhZ2UuQ09QWV9TUkMgfCBHUFVUZXh0dXJlVXNhZ2UuUkVOREVSX0FUVEFDSE1FTlQsXHJcblx0XHRcdFx0bWlwTGV2ZWxDb3VudDogdGV4dHVyZURlc2NyaXB0b3IubWlwTGV2ZWxDb3VudCAtIDFcclxuXHRcdFx0fTtcclxuXHRcdFx0bWlwVGV4dHVyZSA9IHRoaXMuZGV2aWNlLmNyZWF0ZVRleHR1cmUobWlwVGV4dHVyZURlc2NyaXB0b3IpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gdGhpcy5kZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoe30pO1xyXG5cdFx0Ly8gVE9ETzogQ29uc2lkZXIgbWFraW5nIHRoaXMgc3RhdGljLlxyXG5cdFx0Y29uc3QgYmluZEdyb3VwTGF5b3V0ID0gcGlwZWxpbmUuZ2V0QmluZEdyb3VwTGF5b3V0KDApO1xyXG5cclxuXHRcdGZvciAobGV0IGFycmF5TGF5ZXIgPSAwOyBhcnJheUxheWVyIDwgYXJyYXlMYXllckNvdW50OyArK2FycmF5TGF5ZXIpIHtcclxuXHRcdFx0bGV0IHNyY1ZpZXcgPSB0ZXh0dXJlLmNyZWF0ZVZpZXcoe1xyXG5cdFx0XHRcdGJhc2VNaXBMZXZlbDogMCxcclxuXHRcdFx0XHRtaXBMZXZlbENvdW50OiAxLFxyXG5cdFx0XHRcdGRpbWVuc2lvbjogXCIyZFwiLFxyXG5cdFx0XHRcdGJhc2VBcnJheUxheWVyOiBhcnJheUxheWVyLFxyXG5cdFx0XHRcdGFycmF5TGF5ZXJDb3VudDogMVxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdGxldCBkc3RNaXBMZXZlbCA9IHJlbmRlclRvU291cmNlID8gMSA6IDA7XHJcblx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgdGV4dHVyZURlc2NyaXB0b3IubWlwTGV2ZWxDb3VudDsgKytpKSB7XHJcblx0XHRcdFx0Y29uc3QgZHN0VmlldyA9IG1pcFRleHR1cmUuY3JlYXRlVmlldyh7XHJcblx0XHRcdFx0XHRiYXNlTWlwTGV2ZWw6IGRzdE1pcExldmVsKyssXHJcblx0XHRcdFx0XHRtaXBMZXZlbENvdW50OiAxLFxyXG5cdFx0XHRcdFx0ZGltZW5zaW9uOiBcIjJkXCIsXHJcblx0XHRcdFx0XHRiYXNlQXJyYXlMYXllcjogYXJyYXlMYXllcixcclxuXHRcdFx0XHRcdGFycmF5TGF5ZXJDb3VudDogMVxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRjb25zdCBwYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyh7XHJcblx0XHRcdFx0XHRjb2xvckF0dGFjaG1lbnRzOiBbXHJcblx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHR2aWV3OiBkc3RWaWV3LFxyXG5cdFx0XHRcdFx0XHRcdGxvYWRPcDogXCJjbGVhclwiLFxyXG5cdFx0XHRcdFx0XHRcdHN0b3JlT3A6IFwic3RvcmVcIlxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRdXHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdGNvbnN0IGJpbmRHcm91cCA9IHRoaXMuZGV2aWNlLmNyZWF0ZUJpbmRHcm91cCh7XHJcblx0XHRcdFx0XHRsYXlvdXQ6IGJpbmRHcm91cExheW91dCxcclxuXHRcdFx0XHRcdGVudHJpZXM6IFtcclxuXHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdGJpbmRpbmc6IDAsXHJcblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U6IHRoaXMuc2FtcGxlclxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0YmluZGluZzogMSxcclxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZTogc3JjVmlld1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRdXHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdHBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHBpcGVsaW5lKTtcclxuXHRcdFx0XHRwYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTtcclxuXHRcdFx0XHRwYXNzRW5jb2Rlci5kcmF3KDMsIDEsIDAsIDApO1xyXG5cdFx0XHRcdHBhc3NFbmNvZGVyLmVuZCgpO1xyXG5cclxuXHRcdFx0XHRzcmNWaWV3ID0gZHN0VmlldztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIElmIHdlIGRpZG4ndCByZW5kZXIgdG8gdGhlIHNvdXJjZSB0ZXh0dXJlLCBmaW5pc2ggYnkgY29weWluZyB0aGUgbWlwIHJlc3VsdHMgZnJvbSB0aGUgdGVtcG9yYXJ5IG1pcG1hcCB0ZXh0dXJlXHJcblx0XHQvLyB0byB0aGUgc291cmNlLlxyXG5cdFx0aWYgKCFyZW5kZXJUb1NvdXJjZSkge1xyXG5cdFx0XHRjb25zdCBtaXBMZXZlbFNpemUgPSB7XHJcblx0XHRcdFx0d2lkdGg6IE1hdGguY2VpbCh0ZXh0dXJlRGVzY3JpcHRvci5zaXplLndpZHRoIC8gMiksXHJcblx0XHRcdFx0aGVpZ2h0OiBNYXRoLmNlaWwodGV4dHVyZURlc2NyaXB0b3Iuc2l6ZS5oZWlnaHQgLyAyKSxcclxuXHRcdFx0XHRkZXB0aE9yQXJyYXlMYXllcnM6IGFycmF5TGF5ZXJDb3VudFxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCB0ZXh0dXJlRGVzY3JpcHRvci5taXBMZXZlbENvdW50OyArK2kpIHtcclxuXHRcdFx0XHRjb21tYW5kRW5jb2Rlci5jb3B5VGV4dHVyZVRvVGV4dHVyZShcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0dGV4dHVyZTogbWlwVGV4dHVyZSxcclxuXHRcdFx0XHRcdFx0bWlwTGV2ZWw6IGkgLSAxXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHR0ZXh0dXJlOiB0ZXh0dXJlLFxyXG5cdFx0XHRcdFx0XHRtaXBMZXZlbDogaVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdG1pcExldmVsU2l6ZVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdG1pcExldmVsU2l6ZS53aWR0aCA9IE1hdGguY2VpbChtaXBMZXZlbFNpemUud2lkdGggLyAyKTtcclxuXHRcdFx0XHRtaXBMZXZlbFNpemUuaGVpZ2h0ID0gTWF0aC5jZWlsKG1pcExldmVsU2l6ZS5oZWlnaHQgLyAyKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuZGV2aWNlLnF1ZXVlLnN1Ym1pdChbY29tbWFuZEVuY29kZXIuZmluaXNoKCldKTtcclxuXHJcblx0XHRpZiAoIXJlbmRlclRvU291cmNlKSB7XHJcblx0XHRcdG1pcFRleHR1cmUuZGVzdHJveSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0ZXh0dXJlO1xyXG5cdH1cclxufVxyXG4iLCJmdW5jdGlvbiBkZWZhdWx0VmFsdWUoYSwgYikge1xuXHRpZiAoYSAhPT0gdW5kZWZpbmVkICYmIGEgIT09IG51bGwpIHtcblx0XHRyZXR1cm4gYTtcblx0fVxuXHRyZXR1cm4gYjtcbn1cblxuLyoqXG4gKiBBIGZyb3plbiBlbXB0eSBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Igb3B0aW9ucyBwYXNzZWQgYXNcbiAqIGFuIG9iamVjdCBsaXRlcmFsLlxuICogQHR5cGUge09iamVjdH1cbiAqIEBtZW1iZXJvZiBkZWZhdWx0VmFsdWVcbiAqL1xuZGVmYXVsdFZhbHVlLkVNUFRZX09CSkVDVCA9IE9iamVjdC5mcmVlemUoe30pO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0VmFsdWU7XG4iLCJpbXBvcnQge1xyXG5cdEJsZW5kRmFjdG9yLFxyXG5cdEJsZW5kT3BlcmF0aW9uLFxyXG5cdFRleHR1cmVGb3JtYXQsXHJcblx0R1BVQ29sb3JXcml0ZSxcclxuXHRDb21wYXJlRnVuY3Rpb24sXHJcblx0U3RlbmNpbE9wZXJhdGlvbixcclxuXHRGcm9udEZhY2UsXHJcblx0Q3VsbE1vZGUsXHJcblx0UHJpbWl0aXZlVG9wb2xvZ3lcclxufSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xyXG5pbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4vQ29udGV4dFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlbmRlclN0YXRlIHtcclxuXHRzY2lzc29yVGVzdDogU2Npc3NvclRlc3Q7XHJcblx0dmlld3BvcnQ6IFZpZXdQb3J0O1xyXG5cdHRhcmdldHM6IEFycmF5PFRhcmdldD47XHJcblx0ZGVwdGhTdGVuY2lsOiBEZXB0aFN0ZW5jaWw7XHJcblx0YmxlbmRDb25zdGFudDogQmxlbmRDb25zdGFudDtcclxuXHRzdGVuY2lsUmVmZXJlbmNlOiBudW1iZXI7XHJcblx0bXVsdGlzYW1wbGU6IE11bHRpU2FtcGxlO1xyXG5cdHByaW1pdGl2ZTogUHJpbWl0aXZlO1xyXG5cdHN0ZW5jaWxFbmFibGVkOiBib29sZWFuO1xyXG5cdHNjaXNzb3JUZXN0RW5hYmxlZDogYm9vbGVhbjtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHRoaXMuc2Npc3NvclRlc3QgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLnZpZXdwb3J0ID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5kZXB0aFN0ZW5jaWwgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLmJsZW5kQ29uc3RhbnQgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLnN0ZW5jaWxSZWZlcmVuY2UgPSAwO1xyXG5cdFx0dGhpcy5tdWx0aXNhbXBsZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMucHJpbWl0aXZlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5zdGVuY2lsRW5hYmxlZCA9IGZhbHNlO1xyXG5cdFx0dGhpcy5zY2lzc29yVGVzdEVuYWJsZWQgPSBmYWxzZTtcclxuXHRcdHRoaXMudGFyZ2V0cyA9IHVuZGVmaW5lZDtcclxuXHR9XHJcblx0YmluZChwYXNzRW5jb2RlcjogR1BVUmVuZGVyUGFzc0VuY29kZXIsIGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdGNvbnN0IHsgdmlld1BvcnQsIHNjaXNzb3JUZXN0IH0gPSBjb250ZXh0O1xyXG5cdFx0Y29uc3QgZmluYWxWaWV3cG9ydCA9IHRoaXMudmlld3BvcnQgPz8gdmlld1BvcnQ7XHJcblx0XHRjb25zdCBmaW5hbFNjaXNzb3JUZXN0ID0gdGhpcy5zY2lzc29yVGVzdCA/PyBzY2lzc29yVGVzdDtcclxuXHRcdGlmICh0aGlzLnN0ZW5jaWxSZWZlcmVuY2UpIHBhc3NFbmNvZGVyLnNldFN0ZW5jaWxSZWZlcmVuY2UodGhpcy5zdGVuY2lsUmVmZXJlbmNlKTtcclxuXHRcdGlmIChmaW5hbFZpZXdwb3J0LmVxdWFsc0FuZFVwZGF0ZUNhY2hlKGNhY2hlVmlld1BvcnQpKSB7XHJcblx0XHRcdGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCwgbWluRGVwdGgsIG1heERlcHRoIH0gPSBmaW5hbFZpZXdwb3J0O1xyXG5cdFx0XHRwYXNzRW5jb2Rlci5zZXRWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBtaW5EZXB0aCwgbWF4RGVwdGgpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuYmxlbmRDb25zdGFudCkgcGFzc0VuY29kZXIuc2V0QmxlbmRDb25zdGFudCh0aGlzLmJsZW5kQ29uc3RhbnQpO1xyXG5cdFx0aWYgKGZpbmFsU2Npc3NvclRlc3QuZXF1YWxzQW5kVXBkYXRlQ2FjaGUoY2FjaGVTY2lzc29yVGVzdCkpIHtcclxuXHRcdFx0Y29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH0gPSBmaW5hbFNjaXNzb3JUZXN0O1xyXG5cdFx0XHRwYXNzRW5jb2Rlci5zZXRTY2lzc29yUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcclxuXHRcdH1cclxuXHR9XHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXMuc2Npc3NvclRlc3QgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLnZpZXdwb3J0ID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5kZXB0aFN0ZW5jaWwgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLmJsZW5kQ29uc3RhbnQgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLnN0ZW5jaWxSZWZlcmVuY2UgPSAtMTtcclxuXHRcdHRoaXMubXVsdGlzYW1wbGUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLnByaW1pdGl2ZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuc3RlbmNpbEVuYWJsZWQgPSBmYWxzZTtcclxuXHRcdHRoaXMuc2Npc3NvclRlc3RFbmFibGVkID0gZmFsc2U7XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBCbGVuZENvbnN0YW50IHtcclxuXHRyOiBudW1iZXI7XHJcblx0ZzogbnVtYmVyO1xyXG5cdGI6IG51bWJlcjtcclxuXHRhOiBudW1iZXI7XHJcblx0Y29uc3RydWN0b3IocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlciwgYTogbnVtYmVyKSB7XHJcblx0XHR0aGlzLnIgPSByO1xyXG5cdFx0dGhpcy5nID0gZztcclxuXHRcdHRoaXMuYiA9IGI7XHJcblx0XHR0aGlzLmEgPSBhO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgTXVsdGlTYW1wbGUge1xyXG5cdGNvdW50OiBudW1iZXI7XHJcblx0bWFzazogbnVtYmVyO1xyXG5cdGFscGhhVG9Db3ZlcmFnZUVuYWJsZWQ6IGJvb2xlYW47XHJcblx0Y29uc3RydWN0b3IoY291bnQgPSAxLCBtYXNrID0gMHhmZmZmZmZmZiwgYWxwaGFUb0NvdmVyYWdlRW5hYmxlZCA9IGZhbHNlKSB7XHJcblx0XHR0aGlzLmNvdW50ID0gY291bnQ7XHJcblx0XHR0aGlzLm1hc2sgPSBtYXNrO1xyXG5cdFx0dGhpcy5hbHBoYVRvQ292ZXJhZ2VFbmFibGVkID0gYWxwaGFUb0NvdmVyYWdlRW5hYmxlZDtcclxuXHR9XHJcblx0Z2V0TXVsdGlTYW1wbGVEZWMoKSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRjb3VudDogdGhpcy5jb3VudCxcclxuXHRcdFx0bWFzazogdGhpcy5tYXNrLFxyXG5cdFx0XHRhbHBoYVRvQ292ZXJhZ2VFbmFibGVkOiB0aGlzLmFscGhhVG9Db3ZlcmFnZUVuYWJsZWRcclxuXHRcdH07XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBTY2lzc29yVGVzdCB7XHJcblx0eDogbnVtYmVyO1xyXG5cdHk6IG51bWJlcjtcclxuXHR3aWR0aDogbnVtYmVyO1xyXG5cdGhlaWdodDogbnVtYmVyO1xyXG5cdHZhcmlhYmxlOiBib29sZWFuO1xyXG5cdGNvbnN0cnVjdG9yKHggPSAwLCB5ID0gMCwgd2lkdGggPSAwLCBoZWlnaHQgPSAwLCB2YXJpYWJsZSA9IHRydWUpIHtcclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0dGhpcy53aWR0aCA9IHdpZHRoO1xyXG5cdFx0dGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblx0XHR0aGlzLnZhcmlhYmxlID0gdmFyaWFibGU7XHJcblx0fVxyXG5cdHNldCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0dGhpcy53aWR0aCA9IHdpZHRoO1xyXG5cdFx0dGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblx0fVxyXG5cdGVxdWFsc0FuZFVwZGF0ZUNhY2hlKHNjaXNzb3JUZXN0OiBTY2lzc29yVGVzdCk6IGJvb2xlYW4ge1xyXG5cdFx0Y29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH0gPSBzY2lzc29yVGVzdDtcclxuXHRcdGlmICh0aGlzLnggIT0geCB8fCB0aGlzLnkgIT0geSB8fCB0aGlzLndpZHRoICE9IHdpZHRoIHx8IHRoaXMuaGVpZ2h0ICE9IGhlaWdodCkge1xyXG5cdFx0XHRzY2lzc29yVGVzdC5zZXQodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBWaWV3UG9ydCB7XHJcblx0eDogbnVtYmVyO1xyXG5cdHk6IG51bWJlcjtcclxuXHR3aWR0aDogbnVtYmVyO1xyXG5cdGhlaWdodDogbnVtYmVyO1xyXG5cdG1pbkRlcHRoOiBudW1iZXI7XHJcblx0bWF4RGVwdGg6IG51bWJlcjtcclxuXHR2YXJpYWJsZTogYm9vbGVhbjtcclxuXHRjb25zdHJ1Y3Rvcih4ID0gMCwgeSA9IDAsIHdpZHRoID0gMCwgaGVpZ2h0ID0gMCwgbWluRGVwdGggPSAwLCBtYXhEZXB0aCA9IDEsIHZhcmlhYmxlID0gdHJ1ZSkge1xyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblx0XHR0aGlzLndpZHRoID0gd2lkdGg7XHJcblx0XHR0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHRcdHRoaXMubWluRGVwdGggPSBtaW5EZXB0aDtcclxuXHRcdHRoaXMubWF4RGVwdGggPSBtYXhEZXB0aDtcclxuXHRcdHRoaXMudmFyaWFibGUgPSB2YXJpYWJsZTtcclxuXHR9XHJcblx0c2V0KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgbWluRGVwdGggPSAwLCBtYXhEZXB0aCA9IDEpIHtcclxuXHRcdGlmICghdGhpcy52YXJpYWJsZSkgcmV0dXJuO1xyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblx0XHR0aGlzLndpZHRoID0gd2lkdGg7XHJcblx0XHR0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHRcdHRoaXMubWluRGVwdGggPSBtaW5EZXB0aDtcclxuXHRcdHRoaXMubWF4RGVwdGggPSBtYXhEZXB0aDtcclxuXHR9XHJcblx0ZXF1YWxzQW5kVXBkYXRlQ2FjaGUodmlld1BvcnQ6IFZpZXdQb3J0KTogYm9vbGVhbiB7XHJcblx0XHRjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQsIG1pbkRlcHRoLCBtYXhEZXB0aCB9ID0gdmlld1BvcnQ7XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMueCAhPSB4IHx8XHJcblx0XHRcdHRoaXMueSAhPSB5IHx8XHJcblx0XHRcdHRoaXMud2lkdGggIT0gd2lkdGggfHxcclxuXHRcdFx0dGhpcy5oZWlnaHQgIT0gaGVpZ2h0IHx8XHJcblx0XHRcdHRoaXMubWluRGVwdGggIT0gbWluRGVwdGggfHxcclxuXHRcdFx0dGhpcy5tYXhEZXB0aCAhPSBtYXhEZXB0aFxyXG5cdFx0KSB7XHJcblx0XHRcdHZpZXdQb3J0LnNldCh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIHRoaXMubWluRGVwdGgsIHRoaXMubWF4RGVwdGgpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFByaW1pdGl2ZSB7XHJcblx0ZnJvbnRGYWNlOiBGcm9udEZhY2U7XHJcblx0Y3VsbE1vZGU6IEN1bGxNb2RlO1xyXG5cdHVuY2xpcHBlZERlcHRoOiBib29sZWFuO1xyXG5cdHRvcG9sb2d5OiBQcmltaXRpdmVUb3BvbG9neTtcclxuXHRjb25zdHJ1Y3Rvcih0b3BvbG9neT86IFByaW1pdGl2ZVRvcG9sb2d5LCBjdWxsTW9kZT86IEN1bGxNb2RlLCBmcm9udEZhY2U/OiBGcm9udEZhY2UsIHVuY2xpcHBlZERlcHRoPzogYm9vbGVhbikge1xyXG5cdFx0dGhpcy5mcm9udEZhY2UgPSBkZWZhdWx0VmFsdWUoZnJvbnRGYWNlLCBGcm9udEZhY2UuQ0NXKTtcclxuXHRcdHRoaXMuY3VsbE1vZGUgPSBkZWZhdWx0VmFsdWUoY3VsbE1vZGUsIEN1bGxNb2RlLk5vbmUpO1xyXG5cdFx0dGhpcy51bmNsaXBwZWREZXB0aCA9IGRlZmF1bHRWYWx1ZSh1bmNsaXBwZWREZXB0aCwgZmFsc2UpO1xyXG5cdFx0dGhpcy50b3BvbG9neSA9IGRlZmF1bHRWYWx1ZSh0b3BvbG9neSwgUHJpbWl0aXZlVG9wb2xvZ3kuVHJpYW5nbGVMaXN0KTtcclxuXHR9XHJcblx0Z2V0R1BVUHJpbWl0aXZlRGVjKCkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0ZnJvbnRGYWNlOiB0aGlzLmZyb250RmFjZSxcclxuXHRcdFx0Y3VsbE1vZGU6IHRoaXMuY3VsbE1vZGUsXHJcblx0XHRcdHVuY2xpcHBlZERlcHRoOiB0aGlzLnVuY2xpcHBlZERlcHRoLFxyXG5cdFx0XHR0b3BvbG9neTogdGhpcy50b3BvbG9neVxyXG5cdFx0fTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIERlcHRoU3RlbmNpbCB7XHJcblx0Zm9ybWF0OiBUZXh0dXJlRm9ybWF0O1xyXG5cdGRlcHRoV3JpdGVFbmFibGVkOiBib29sZWFuO1xyXG5cdGRlcHRoQ29tcGFyZTogQ29tcGFyZUZ1bmN0aW9uO1xyXG5cdHN0ZW5jaWxSZWFkTWFzazogbnVtYmVyO1xyXG5cdHN0ZW5jaWxXcml0ZU1hc2s6IG51bWJlcjtcclxuXHRzdGVuY2lsRnJvbnRDb21wYXJlOiBDb21wYXJlRnVuY3Rpb247XHJcblx0c3RlbmNpbEZyb250RmFpbE9wOiBTdGVuY2lsT3BlcmF0aW9uO1xyXG5cdHN0ZW5jaWxGcm9udERlcHRoRmFpbE9wOiBTdGVuY2lsT3BlcmF0aW9uO1xyXG5cdHN0ZW5jaWxGcm9udFBhc3NPcDogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHJcblx0c3RlbmNpbEJhY2tDb21wYXJlOiBDb21wYXJlRnVuY3Rpb247XHJcblx0c3RlbmNpbEJhY2tGYWlsT3A6IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0c3RlbmNpbEJhY2tEZXB0aEZhaWxPcDogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHRzdGVuY2lsQmFja1Bhc3NPcDogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHRkZXB0aEJpYXM6IG51bWJlcjtcclxuXHRkZXB0aEJpYXNTbG9wZVNjYWxlOiBudW1iZXI7XHJcblx0ZGVwdGhCaWFzQ2xhbXA6IG51bWJlcjtcclxuXHRjb25zdHJ1Y3RvcihvcHRpb25zPzogRGVwdGhTdGVuY2lsUHJvcHMpIHtcclxuXHRcdHRoaXMuZm9ybWF0ID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LmZvcm1hdCwgVGV4dHVyZUZvcm1hdC5EZXB0aDI0UGx1cyk7XHJcblx0XHR0aGlzLmRlcHRoV3JpdGVFbmFibGVkID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LmRlcHRoV3JpdGVFbmFibGVkLCB0cnVlKTtcclxuXHRcdHRoaXMuZGVwdGhDb21wYXJlID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LmRlcHRoQ29tcGFyZSwgQ29tcGFyZUZ1bmN0aW9uLkxlc3MpO1xyXG5cdFx0dGhpcy5zdGVuY2lsUmVhZE1hc2sgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uc3RlbmNpbFJlYWRNYXNrLCAweGZmZmZmZmZmKTtcclxuXHRcdHRoaXMuc3RlbmNpbFdyaXRlTWFzayA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5zdGVuY2lsV3JpdGVNYXNrLCAweGZmZmZmZmZmKTtcclxuXHRcdHRoaXMuc3RlbmNpbEZyb250Q29tcGFyZSA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5zdGVuY2lsRnJvbnRDb21wYXJlLCBDb21wYXJlRnVuY3Rpb24uQWx3YXlzKTtcclxuXHRcdHRoaXMuc3RlbmNpbEZyb250RmFpbE9wID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LnN0ZW5jaWxGcm9udEZhaWxPcCwgU3RlbmNpbE9wZXJhdGlvbi5LZWVwKTtcclxuXHRcdHRoaXMuc3RlbmNpbEZyb250RGVwdGhGYWlsT3AgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uc3RlbmNpbEZyb250RGVwdGhGYWlsT3AsIFN0ZW5jaWxPcGVyYXRpb24uS2VlcCk7XHJcblx0XHR0aGlzLnN0ZW5jaWxGcm9udFBhc3NPcCA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5zdGVuY2lsRnJvbnRQYXNzT3AsIFN0ZW5jaWxPcGVyYXRpb24uS2VlcCk7XHJcblx0XHR0aGlzLnN0ZW5jaWxCYWNrQ29tcGFyZSA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5zdGVuY2lsQmFja0NvbXBhcmUsIENvbXBhcmVGdW5jdGlvbi5BbHdheXMpO1xyXG5cdFx0dGhpcy5zdGVuY2lsQmFja0ZhaWxPcCA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5zdGVuY2lsQmFja0ZhaWxPcCwgU3RlbmNpbE9wZXJhdGlvbi5LZWVwKTtcclxuXHRcdHRoaXMuc3RlbmNpbEJhY2tEZXB0aEZhaWxPcCA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5zdGVuY2lsQmFja0RlcHRoRmFpbE9wLCBTdGVuY2lsT3BlcmF0aW9uLktlZXApO1xyXG5cdFx0dGhpcy5zdGVuY2lsQmFja1Bhc3NPcCA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5zdGVuY2lsQmFja1Bhc3NPcCwgU3RlbmNpbE9wZXJhdGlvbi5LZWVwKTtcclxuXHRcdHRoaXMuZGVwdGhCaWFzID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LmRlcHRoQmlhcywgMCk7XHJcblx0XHR0aGlzLmRlcHRoQmlhc1Nsb3BlU2NhbGUgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uZGVwdGhCaWFzU2xvcGVTY2FsZSwgMCk7XHJcblx0XHR0aGlzLmRlcHRoQmlhc0NsYW1wID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LmRlcHRoQmlhc0NsYW1wLCAwKTtcclxuXHR9XHJcblx0Z2V0R1BVRGVwdGhTdGVuY2lsRGVjKCkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0Zm9ybWF0OiB0aGlzLmZvcm1hdCxcclxuXHRcdFx0ZGVwdGhXcml0ZUVuYWJsZWQ6IHRoaXMuZGVwdGhXcml0ZUVuYWJsZWQsXHJcblx0XHRcdGRlcHRoQ29tcGFyZTogdGhpcy5kZXB0aENvbXBhcmUsXHJcblx0XHRcdHN0ZW5jaWxSZWFkTWFzazogdGhpcy5zdGVuY2lsUmVhZE1hc2ssXHJcblx0XHRcdHN0ZW5jaWxXcml0ZU1hc2s6IHRoaXMuc3RlbmNpbFdyaXRlTWFzayxcclxuXHRcdFx0c3RlbmNpbEZyb250OiB7XHJcblx0XHRcdFx0Y29tcGFyZTogdGhpcy5zdGVuY2lsRnJvbnRDb21wYXJlLFxyXG5cdFx0XHRcdGZhaWxPcDogdGhpcy5zdGVuY2lsRnJvbnRGYWlsT3AsXHJcblx0XHRcdFx0ZGVwdGhGYWlsT3A6IHRoaXMuc3RlbmNpbEZyb250RGVwdGhGYWlsT3AsXHJcblx0XHRcdFx0cGFzc09wOiB0aGlzLnN0ZW5jaWxGcm9udFBhc3NPcFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRzdGVuY2lsQmFjazoge1xyXG5cdFx0XHRcdGNvbXBhcmU6IHRoaXMuc3RlbmNpbEJhY2tDb21wYXJlLFxyXG5cdFx0XHRcdGZhaWxPcDogdGhpcy5zdGVuY2lsQmFja0ZhaWxPcCxcclxuXHRcdFx0XHRkZXB0aEZhaWxPcDogdGhpcy5zdGVuY2lsQmFja0RlcHRoRmFpbE9wLFxyXG5cdFx0XHRcdHBhc3NPcDogdGhpcy5zdGVuY2lsQmFja1Bhc3NPcFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRkZXB0aEJpYXM6IHRoaXMuZGVwdGhCaWFzLFxyXG5cdFx0XHRkZXB0aEJpYXNTbG9wZVNjYWxlOiB0aGlzLmRlcHRoQmlhc1Nsb3BlU2NhbGUsXHJcblx0XHRcdGRlcHRoQmlhc0NsYW1wOiB0aGlzLmRlcHRoQmlhc0NsYW1wXHJcblx0XHR9O1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVGFyZ2V0IHtcclxuXHRmb3JtYXQ6IFRleHR1cmVGb3JtYXQ7XHJcblx0YmxlbmRDb2xvck9wZXJhdGlvbj86IEJsZW5kT3BlcmF0aW9uO1xyXG5cdGJsZW5kQ29sb3JTcmNGYWN0b3I/OiBCbGVuZEZhY3RvcjtcclxuXHRibGVuZENvbG9yRHN0RmFjdG9yPzogQmxlbmRGYWN0b3I7XHJcblx0YmxlbmRBbHBoYU9wZXJhdGlvbj86IEJsZW5kT3BlcmF0aW9uO1xyXG5cdGJsZW5kQWxwaGFTcmNGYWN0b3I/OiBCbGVuZEZhY3RvcjtcclxuXHRibGVuZEFscGhhRHN0RmFjdG9yPzogQmxlbmRGYWN0b3I7XHJcblx0d3JpdGVNYXNrOiBHUFVDb2xvcldyaXRlO1xyXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBUYXJnZXRQcm9wcykge1xyXG5cdFx0dGhpcy5mb3JtYXQgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uZm9ybWF0LCBUZXh0dXJlRm9ybWF0LkJHUkE4VW5vcm0pO1xyXG5cdFx0dGhpcy5ibGVuZENvbG9yT3BlcmF0aW9uID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LmJsZW5kQ29sb3JPcGVyYXRpb24sIEJsZW5kT3BlcmF0aW9uLkFkZCk7XHJcblx0XHR0aGlzLmJsZW5kQ29sb3JTcmNGYWN0b3IgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uYmxlbmRDb2xvclNyY0ZhY3RvciwgQmxlbmRGYWN0b3I/LlNyY0FscGhhKTtcclxuXHRcdHRoaXMuYmxlbmRDb2xvckRzdEZhY3RvciA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5ibGVuZENvbG9yRHN0RmFjdG9yLCBCbGVuZEZhY3Rvci5PbmVNaW51c1NyY0FscGhhKTtcclxuXHRcdHRoaXMuYmxlbmRBbHBoYU9wZXJhdGlvbiA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5ibGVuZEFscGhhT3BlcmF0aW9uLCBCbGVuZE9wZXJhdGlvbi5BZGQpO1xyXG5cdFx0dGhpcy5ibGVuZEFscGhhU3JjRmFjdG9yID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LmJsZW5kQWxwaGFTcmNGYWN0b3IsIEJsZW5kRmFjdG9yLk9uZSk7XHJcblx0XHR0aGlzLmJsZW5kQWxwaGFEc3RGYWN0b3IgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uYmxlbmRBbHBoYURzdEZhY3RvciwgQmxlbmRGYWN0b3IuT25lKTtcclxuXHRcdHRoaXMud3JpdGVNYXNrID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LndyaXRlTWFzaywgR1BVQ29sb3JXcml0ZS5BbGwpO1xyXG5cdH1cclxuXHRnZXRHUFVUYXJnZXREZWMoKSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRmb3JtYXQ6IHRoaXMuZm9ybWF0LFxyXG5cdFx0XHRibGVuZDoge1xyXG5cdFx0XHRcdGNvbG9yOiB7XHJcblx0XHRcdFx0XHRvcGVyYXRpb246IHRoaXMuYmxlbmRDb2xvck9wZXJhdGlvbixcclxuXHRcdFx0XHRcdHNyY0ZhY3RvcjogdGhpcy5ibGVuZENvbG9yU3JjRmFjdG9yLFxyXG5cdFx0XHRcdFx0ZHN0RmFjdG9yOiB0aGlzLmJsZW5kQ29sb3JEc3RGYWN0b3JcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGFscGhhOiB7XHJcblx0XHRcdFx0XHRvcGVyYXRpb246IHRoaXMuYmxlbmRBbHBoYU9wZXJhdGlvbixcclxuXHRcdFx0XHRcdHNyY0ZhY3RvcjogdGhpcy5ibGVuZEFscGhhU3JjRmFjdG9yLFxyXG5cdFx0XHRcdFx0ZHN0RmFjdG9yOiB0aGlzLmJsZW5kQWxwaGFEc3RGYWN0b3JcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHdyaXRlTWFzazogdGhpcy53cml0ZU1hc2tcclxuXHRcdH07XHJcblx0fVxyXG59XHJcbmNvbnN0IGNhY2hlVmlld1BvcnQgPSBuZXcgVmlld1BvcnQoKTtcclxuY29uc3QgY2FjaGVTY2lzc29yVGVzdCA9IG5ldyBTY2lzc29yVGVzdCgpO1xyXG50eXBlIERlcHRoU3RlbmNpbFByb3BzID0ge1xyXG5cdGZvcm1hdD86IFRleHR1cmVGb3JtYXQ7XHJcblx0ZGVwdGhXcml0ZUVuYWJsZWQ/OiBib29sZWFuO1xyXG5cdGRlcHRoQ29tcGFyZT86IENvbXBhcmVGdW5jdGlvbjtcclxuXHRzdGVuY2lsUmVhZE1hc2s/OiBudW1iZXI7XHJcblx0c3RlbmNpbFdyaXRlTWFzaz86IG51bWJlcjtcclxuXHRzdGVuY2lsRnJvbnRDb21wYXJlPzogQ29tcGFyZUZ1bmN0aW9uO1xyXG5cdHN0ZW5jaWxGcm9udEZhaWxPcD86IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0c3RlbmNpbEZyb250RGVwdGhGYWlsT3A/OiBTdGVuY2lsT3BlcmF0aW9uO1xyXG5cdHN0ZW5jaWxGcm9udFBhc3NPcD86IFN0ZW5jaWxPcGVyYXRpb247XHJcblxyXG5cdHN0ZW5jaWxCYWNrQ29tcGFyZT86IENvbXBhcmVGdW5jdGlvbjtcclxuXHRzdGVuY2lsQmFja0ZhaWxPcD86IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0c3RlbmNpbEJhY2tEZXB0aEZhaWxPcD86IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0c3RlbmNpbEJhY2tQYXNzT3A/OiBTdGVuY2lsT3BlcmF0aW9uO1xyXG5cdGRlcHRoQmlhcz86IG51bWJlcjtcclxuXHRkZXB0aEJpYXNTbG9wZVNjYWxlPzogbnVtYmVyO1xyXG5cdGRlcHRoQmlhc0NsYW1wPzogbnVtYmVyO1xyXG59O1xyXG50eXBlIFRhcmdldFByb3BzID0ge1xyXG5cdGZvcm1hdD86IFRleHR1cmVGb3JtYXQ7XHJcblx0YmxlbmRDb2xvck9wZXJhdGlvbj86IEJsZW5kT3BlcmF0aW9uO1xyXG5cdGJsZW5kQ29sb3JTcmNGYWN0b3I/OiBCbGVuZEZhY3RvcjtcclxuXHRibGVuZENvbG9yRHN0RmFjdG9yPzogQmxlbmRGYWN0b3I7XHJcblx0YmxlbmRBbHBoYU9wZXJhdGlvbj86IEJsZW5kT3BlcmF0aW9uO1xyXG5cdGJsZW5kQWxwaGFTcmNGYWN0b3I/OiBCbGVuZEZhY3RvcjtcclxuXHRibGVuZEFscGhhRHN0RmFjdG9yPzogQmxlbmRGYWN0b3I7XHJcblx0d3JpdGVNYXNrPzogR1BVQ29sb3JXcml0ZTtcclxufTtcclxuIiwiaW1wb3J0IHsgVGV4dHVyZVVzYWdlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcbmltcG9ydCB7IEdQVUNhbnZhc0NvbXBvc2l0aW5nQWxwaGFNb2RlLCBDb250ZXh0T3B0aW9ucyB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5pbXBvcnQgeyBNaXBtYXBHZW5lcmF0b3IgfSBmcm9tIFwiLi4vdXRpbHMvTWlwbWFwR2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBTY2lzc29yVGVzdCwgVmlld1BvcnQgfSBmcm9tIFwiLi9SZW5kZXJTdGF0ZVwiO1xuXG5jbGFzcyBDb250ZXh0IHtcblx0cHVibGljIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XG5cblx0cHVibGljIGNvbnRleHQ6IEdQVUNhbnZhc0NvbnRleHQ7XG5cblx0cHVibGljIHBpeGVsUmF0aW86IG51bWJlcjtcblxuXHRwdWJsaWMgZGV2aWNlOiBHUFVEZXZpY2U7XG5cblx0cHJpdmF0ZSBhZGFwdGVyOiBHUFVBZGFwdGVyO1xuXG5cdHB1YmxpYyBwcmVzZW50YXRpb25TaXplOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyOyBkZXB0aDogbnVtYmVyIH07XG5cblx0cHVibGljIHByZXNlbnRhdGlvbkZvcm1hdDogR1BVVGV4dHVyZUZvcm1hdDtcblxuXHRwdWJsaWMgbWlwbWFwVG9vbHM6IE1pcG1hcEdlbmVyYXRvcjtcblxuXHRwcml2YXRlIF92aWV3UG9ydDogVmlld1BvcnQ7XG5cblx0cHJpdmF0ZSBfc2Npc3NvclRlc3Q6IFNjaXNzb3JUZXN0O1xuXG5cdHB1YmxpYyBnZXQgdmlld1BvcnQoKTogVmlld1BvcnQge1xuXHRcdHJldHVybiB0aGlzLl92aWV3UG9ydDtcblx0fVxuXG5cdHB1YmxpYyBnZXQgc2Npc3NvclRlc3QoKTogU2Npc3NvclRlc3Qge1xuXHRcdHJldHVybiB0aGlzLl9zY2lzc29yVGVzdDtcblx0fVxuXHRjb25zdHJ1Y3Rvcih7IGNhbnZhcywgY29udGFpbmVyLCBjb250ZXh0LCBwaXhlbFJhdGlvIH06IENvbnRleHRPcHRpb25zID0ge30pIHtcblx0XHRpZiAoIWNvbnRhaW5lci5jbGllbnRXaWR0aCB8fCAhY29udGFpbmVyLmNsaWVudEhlaWdodCkgdGhyb3cgbmV3IEVycm9yKFwiY29udGFpbmVyIHdpZHRoIG9yIGhlaWdodCBpbGxlZ2FsaXR5XCIpO1xuXHRcdHRoaXMuY2FudmFzID0gY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG5cdFx0Ly8gdGhpcy5jYW52YXMuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0XHR0aGlzLnBpeGVsUmF0aW8gPSBwaXhlbFJhdGlvIHx8IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG5cdFx0Y29uc3Qgd2lkdGggPSBjb250YWluZXIuY2xpZW50V2lkdGggKiB0aGlzLnBpeGVsUmF0aW87XG5cdFx0Y29uc3QgaGVpZ2h0ID0gY29udGFpbmVyLmNsaWVudEhlaWdodCAqIHRoaXMucGl4ZWxSYXRpbztcblx0XHR0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuXHRcdHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcblx0XHR0aGlzLmNhbnZhcy5zdHlsZS53aWR0aCA9IGNvbnRhaW5lci5jbGllbnRXaWR0aCArIFwicHhcIjtcblx0XHR0aGlzLmNhbnZhcy5zdHlsZS5oZWlnaHQgPSBjb250YWluZXIuY2xpZW50SGVpZ2h0ICsgXCJweFwiO1xuXHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmNhbnZhcyk7XG5cdFx0dGhpcy5jb250ZXh0ID0gY29udGV4dCB8fCAodGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIndlYmdwdVwiKSBhcyBHUFVDYW52YXNDb250ZXh0KTtcblxuXHRcdHRoaXMuZGV2aWNlID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0cHVibGljIGFzeW5jIGluaXQoXG5cdFx0cmVxdWVzdEFkYXB0ZXIgPSB7fSxcblx0XHRkZXZpY2VEZXNjcmlwdG9yID0ge30sXG5cdFx0cHJlc2VudGF0aW9uQ29udGV4dERlc2NyaXB0b3IgPSB7fVxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKCF0aGlzLmNvbnRleHQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gaW5zdGFudGlhdGUgXCJ3ZWJncHVcIiBjb250ZXh0LmApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFuYXZpZ2F0b3IuZ3B1KSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBcIm5hdmlnYXRvci5ncHVcIi5gKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5hZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpO1xuXHRcdFx0dGhpcy5kZXZpY2UgPSBhd2FpdCB0aGlzLmFkYXB0ZXIucmVxdWVzdERldmljZSgpO1xuXHRcdFx0dGhpcy5wcmVzZW50YXRpb25TaXplID0ge1xuXHRcdFx0XHR3aWR0aDogdGhpcy5jYW52YXMuY2xpZW50V2lkdGggKiB0aGlzLnBpeGVsUmF0aW8sXG5cdFx0XHRcdGhlaWdodDogdGhpcy5jYW52YXMuY2xpZW50SGVpZ2h0ICogdGhpcy5waXhlbFJhdGlvLFxuXHRcdFx0XHRkZXB0aDogMVxuXHRcdFx0fTtcblx0XHRcdHRoaXMucHJlc2VudGF0aW9uRm9ybWF0ID0gbmF2aWdhdG9yLmdwdS5nZXRQcmVmZXJyZWRDYW52YXNGb3JtYXQoKTtcblx0XHRcdHRoaXMuZGV2aWNlLmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmNhcHR1cmVkZXJyb3JcIiwgKGVycm9yKSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuXHRcdFx0XHQvLyBTdGF0ZS5lcnJvciA9IHRydWU7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMubWlwbWFwVG9vbHMgPSBuZXcgTWlwbWFwR2VuZXJhdG9yKHRoaXMuZGV2aWNlKTtcblx0XHRcdHRoaXMuY29udGV4dC5jb25maWd1cmUoe1xuXHRcdFx0XHRkZXZpY2U6IHRoaXMuZGV2aWNlLFxuXHRcdFx0XHRmb3JtYXQ6IHRoaXMucHJlc2VudGF0aW9uRm9ybWF0LFxuXHRcdFx0XHR1c2FnZTogVGV4dHVyZVVzYWdlLlJlbmRlckF0dGFjaG1lbnQsXG5cdFx0XHRcdGFscGhhTW9kZTogXCJwcmVtdWx0aXBsaWVkXCIsXG5cdFx0XHRcdC4uLnByZXNlbnRhdGlvbkNvbnRleHREZXNjcmlwdG9yXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuX3ZpZXdQb3J0ID0gbmV3IFZpZXdQb3J0KFxuXHRcdFx0XHQwLFxuXHRcdFx0XHQwLFxuXHRcdFx0XHR0aGlzLmNhbnZhcy5jbGllbnRXaWR0aCAqIHRoaXMucGl4ZWxSYXRpbyxcblx0XHRcdFx0dGhpcy5jYW52YXMuY2xpZW50SGVpZ2h0ICogdGhpcy5waXhlbFJhdGlvXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5fc2Npc3NvclRlc3QgPSBuZXcgU2Npc3NvclRlc3QoXG5cdFx0XHRcdDAsXG5cdFx0XHRcdDAsXG5cdFx0XHRcdHRoaXMuY2FudmFzLmNsaWVudFdpZHRoICogdGhpcy5waXhlbFJhdGlvLFxuXHRcdFx0XHR0aGlzLmNhbnZhcy5jbGllbnRIZWlnaHQgKiB0aGlzLnBpeGVsUmF0aW9cblx0XHRcdCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHB1YmxpYyBzZXRWaWV3UG9ydCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcblx0XHR0aGlzLl92aWV3UG9ydC5zZXQoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblxuXHRwdWJsaWMgcmVzZXRWaWV3UG9ydFRvRnVsbENhbnZhcygpIHtcblx0XHR0aGlzLl92aWV3UG9ydC5zZXQoMCwgMCwgdGhpcy5jYW52YXMuY2xpZW50V2lkdGggKiB0aGlzLnBpeGVsUmF0aW8sIHRoaXMuY2FudmFzLmNsaWVudEhlaWdodCAqIHRoaXMucGl4ZWxSYXRpbyk7XG5cdH1cblxuXHRwdWJsaWMgc2V0U2Npc3NvclRlc3QoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG5cdFx0dGhpcy5fc2Npc3NvclRlc3Quc2V0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuXHR9XG5cdHB1YmxpYyByZXNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHByZXNlbnRhdGlvbkNvbnRleHREZXNjcmlwdG9yID0ge30pOiB2b2lkIHtcblx0XHRjb25zdCB3ID0gd2lkdGggKiB0aGlzLnBpeGVsUmF0aW87XG5cdFx0Y29uc3QgaCA9IGhlaWdodCAqIHRoaXMucGl4ZWxSYXRpbztcblx0XHR0aGlzLmNhbnZhcy5zdHlsZS53aWR0aCA9IHcgKyBcInB4XCI7XG5cdFx0dGhpcy5jYW52YXMuc3R5bGUuaGVpZ2h0ID0gaCArIFwicHhcIjtcblx0XHR0aGlzLmNhbnZhcy53aWR0aCA9IHc7XG5cdFx0dGhpcy5jYW52YXMuaGVpZ2h0ID0gaDtcblx0XHR0aGlzLnByZXNlbnRhdGlvblNpemUgPSB7XG5cdFx0XHR3aWR0aDogdyxcblx0XHRcdGhlaWdodDogaCxcblx0XHRcdGRlcHRoOiAxXG5cdFx0fTtcblx0XHR0aGlzLmNvbnRleHQuY29uZmlndXJlKHtcblx0XHRcdGRldmljZTogdGhpcy5kZXZpY2UsXG5cdFx0XHRmb3JtYXQ6IG5hdmlnYXRvci5ncHUuZ2V0UHJlZmVycmVkQ2FudmFzRm9ybWF0KCksXG5cdFx0XHR1c2FnZTogVGV4dHVyZVVzYWdlLlJlbmRlckF0dGFjaG1lbnQsXG5cdFx0XHRhbHBoYU1vZGU6IEdQVUNhbnZhc0NvbXBvc2l0aW5nQWxwaGFNb2RlLlByZW11bHRpcGxpZWQsXG5cdFx0XHQuLi5wcmVzZW50YXRpb25Db250ZXh0RGVzY3JpcHRvclxuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbnRleHQ7XG4iLCJpbXBvcnQgeyBUZXh0dXJlRm9ybWF0IH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IHsgV2ViR1BVVGV4dHVyZVByb3BzLCBJbWFnZURhdGEgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4vQ29udGV4dFwiO1xyXG5pbXBvcnQgU2FtcGxlciBmcm9tIFwiLi9TYW1wbGVyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0dXJlIHtcclxuXHRbeDogc3RyaW5nXTogYW55O1xyXG5cdHByaXZhdGUgX3RleHR1cmVWaWV3OiBHUFVUZXh0dXJlVmlldztcclxuXHRwdWJsaWMgZ3B1VGV4dHVyZT86IEdQVVRleHR1cmU7XHJcblx0cHVibGljIG1pcExldmVsQ291bnQ/OiBudW1iZXI7XHJcblx0cHVibGljIHNhbXBsZXI/OiBTYW1wbGVyO1xyXG5cdHB1YmxpYyBjb250ZXh0PzogQ29udGV4dDtcclxuXHRwdWJsaWMgdGV4dHVyZVByb3A/OiBXZWJHUFVUZXh0dXJlUHJvcHM7XHJcblx0cHVibGljIGRpcnR5OiBib29sZWFuO1xyXG5cdHB1YmxpYyBmaXhlZFNpemU6IGJvb2xlYW47XHJcblx0Y29uc3RydWN0b3IodGV4dHVyZVByb3A6IFdlYkdQVVRleHR1cmVQcm9wcykge1xyXG5cdFx0dGhpcy50ZXh0dXJlUHJvcCA9IE9iamVjdC5hc3NpZ24oXHJcblx0XHRcdHtcclxuXHRcdFx0XHRmb3JtYXQ6IFRleHR1cmVGb3JtYXQuUkdCQThVbm9ybSxcclxuXHRcdFx0XHR1c2FnZTogR1BVVGV4dHVyZVVzYWdlLlRFWFRVUkVfQklORElORyB8IEdQVVRleHR1cmVVc2FnZS5DT1BZX0RTVCB8IEdQVVRleHR1cmVVc2FnZS5SRU5ERVJfQVRUQUNITUVOVCxcclxuXHRcdFx0XHRkYXRhSXNUZXh0dXJlOiBmYWxzZVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0ZXh0dXJlUHJvcFxyXG5cdFx0KTtcclxuXHRcdHRoaXMuc2FtcGxlciA9IHRleHR1cmVQcm9wLnNhbXBsZXI7XHJcblx0XHR0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuZml4ZWRTaXplID0gdGV4dHVyZVByb3AuZml4ZWRTaXplIHx8IGZhbHNlO1xyXG5cdH1cclxuXHRnZXQgbGF5b3V0VHlwZSgpIHtcclxuXHRcdGNvbnN0IHsgdmlld0Zvcm1hdHMsIHNhbXBsZVR5cGUsIHNhbXBsZUNvdW50IH0gPSB0aGlzLnRleHR1cmVQcm9wO1xyXG5cdFx0Ly8gY29uc3RcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHNhbXBsZVR5cGU6IGRlZmF1bHRWYWx1ZShzYW1wbGVUeXBlLCBcImZsb2F0XCIpLFxyXG5cdFx0XHR2aWV3RGltZW5zaW9uOiBkZWZhdWx0VmFsdWUodmlld0Zvcm1hdHMsIFwiMmRcIiksXHJcblx0XHRcdG11bHRpc2FtcGxlZDogc2FtcGxlQ291bnQgJiYgc2FtcGxlQ291bnQgPiAxID8gdHJ1ZSA6IGZhbHNlXHJcblx0XHR9O1xyXG5cdH1cclxuXHRnZXQgdGV4dHVyZVZpZXcoKSB7XHJcblx0XHRpZiAoIXRoaXMuX3RleHR1cmVWaWV3KVxyXG5cdFx0XHR0aGlzLl90ZXh0dXJlVmlldyA9IHRoaXMuZ3B1VGV4dHVyZS5jcmVhdGVWaWV3KHtcclxuXHRcdFx0XHRkaW1lbnNpb246IDxHUFVUZXh0dXJlVmlld0RpbWVuc2lvbj5kZWZhdWx0VmFsdWUodGhpcy50ZXh0dXJlUHJvcC52aWV3Rm9ybWF0cywgXCIyZFwiKVxyXG5cdFx0XHR9KTtcclxuXHRcdHJldHVybiB0aGlzLl90ZXh0dXJlVmlldztcclxuXHR9XHJcblx0dXBkYXRlKGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdGlmICghdGhpcy5jb250ZXh0KSB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG5cdFx0aWYgKHRoaXMuZGlydHkpIHtcclxuXHRcdFx0dGhpcy5jaGVja05lZWRDcmVhdGVUZXh0dXJlKCk7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcclxuXHRcdFx0aWYgKHRoaXMudGV4dHVyZVByb3AuZGF0YSkge1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KHRoaXMudGV4dHVyZVByb3AuZGF0YSkpIHtcclxuXHRcdFx0XHRcdHRoaXMudGV4dHVyZVByb3AuZGF0YS5mb3JFYWNoKChpbWFnZURhdGEpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXREYXRhKGltYWdlRGF0YSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5zZXREYXRhKHRoaXMudGV4dHVyZVByb3AuZGF0YSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLnRleHR1cmVQcm9wLm5lZWRNaXBNYXApIHtcclxuXHRcdFx0XHR0aGlzLmdwdVRleHR1cmUgPSBjb250ZXh0Lm1pcG1hcFRvb2xzLmdlbmVyYXRlTWlwbWFwKHRoaXMpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLnNhbXBsZXIpIHRoaXMuc2FtcGxlci51cGRhdGUoY29udGV4dCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHByaXZhdGUgc2V0RGF0YShvcHRpb25zOiBJbWFnZURhdGEpIHtcclxuXHRcdGNvbnN0IHtcclxuXHRcdFx0c291cmNlLFxyXG5cdFx0XHR3aWR0aCA9IG9wdGlvbnMuc291cmNlLndpZHRoLFxyXG5cdFx0XHRoZWlnaHQgPSBvcHRpb25zLnNvdXJjZS5oZWlnaHQsXHJcblx0XHRcdGRlcHRoID0gMSxcclxuXHRcdFx0c291cmNlWCA9IDAsXHJcblx0XHRcdHNvdXJjZVkgPSAwLFxyXG5cdFx0XHRtaXBMZXZlbCA9IDAsXHJcblx0XHRcdHggPSAwLFxyXG5cdFx0XHR5ID0gMCxcclxuXHRcdFx0eiA9IDAsXHJcblx0XHRcdGFzcGVjdCA9IFwiYWxsXCIsXHJcblx0XHRcdGNvbG9yU3BhY2UgPSBcInNyZ2JcIixcclxuXHRcdFx0cHJlbXVsdGlwbGllZEFscGhhID0gZmFsc2VcclxuXHRcdH0gPSBvcHRpb25zO1xyXG5cdFx0aWYgKHNvdXJjZSBpbnN0YW5jZW9mIFRleHR1cmUpIHtcclxuXHRcdFx0bGV0IGNvbW1hbmRFbmNvZGVyID0gdGhpcy5jb250ZXh0LmRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpO1xyXG5cdFx0XHRjb21tYW5kRW5jb2Rlci5jb3B5VGV4dHVyZVRvVGV4dHVyZShcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHR0ZXh0dXJlOiA8R1BVVGV4dHVyZT5zb3VyY2UuZ3B1VGV4dHVyZSxcclxuXHRcdFx0XHRcdG9yaWdpbjogW3NvdXJjZVgsIHNvdXJjZVldXHJcblx0XHRcdFx0XHQvLyBhc3BlY3RcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdHRleHR1cmU6IHRoaXMuZ3B1VGV4dHVyZSxcclxuXHRcdFx0XHRcdG9yaWdpbjogeyB4OiAwLCB5OiAwLCB6IH0sXHJcblx0XHRcdFx0XHRtaXBMZXZlbFxyXG5cdFx0XHRcdFx0Ly8gYXNwZWN0XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHR3aWR0aCxcclxuXHRcdFx0XHRcdGhlaWdodCxcclxuXHRcdFx0XHRcdGRlcHRoT3JBcnJheUxheWVyczogMVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdFx0dGhpcy5jb250ZXh0LmRldmljZS5xdWV1ZS5zdWJtaXQoW2NvbW1hbmRFbmNvZGVyLmZpbmlzaCgpXSk7XHJcblx0XHRcdGNvbW1hbmRFbmNvZGVyID0gbnVsbDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuY29udGV4dC5kZXZpY2UucXVldWUuY29weUV4dGVybmFsSW1hZ2VUb1RleHR1cmUoXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0c291cmNlLFxyXG5cdFx0XHRcdFx0b3JpZ2luOiBbc291cmNlWCwgc291cmNlWV1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdHRleHR1cmU6IHRoaXMuZ3B1VGV4dHVyZSxcclxuXHRcdFx0XHRcdG9yaWdpbjogW3gsIHksIHpdLFxyXG5cdFx0XHRcdFx0bWlwTGV2ZWwsXHJcblx0XHRcdFx0XHRhc3BlY3QsXHJcblx0XHRcdFx0XHRjb2xvclNwYWNlLFxyXG5cdFx0XHRcdFx0cHJlbXVsdGlwbGllZEFscGhhXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRbd2lkdGgsIGhlaWdodCwgZGVwdGhdXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHNldFNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGRlcHRoPzogbnVtYmVyKSB7XHJcblx0XHRpZiAodGhpcy5maXhlZFNpemUpIHJldHVybjtcclxuXHRcdHRoaXMudGV4dHVyZVByb3Auc2l6ZS53aWR0aCA9IHdpZHRoO1xyXG5cdFx0dGhpcy50ZXh0dXJlUHJvcC5zaXplLmhlaWdodCA9IGhlaWdodDtcclxuXHRcdGlmIChkZXB0aCkgdGhpcy50ZXh0dXJlUHJvcC5zaXplLmRlcHRoID0gZGVwdGg7XHJcblx0XHR0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHR9XHJcblx0ZGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuZ3B1VGV4dHVyZS5kZXN0cm95KCk7XHJcblx0fVxyXG5cdHByaXZhdGUgY3JlYXRlR1BVVGV4dHVyZSgpIHtcclxuXHRcdGlmICh0eXBlb2YgdGhpcy50ZXh0dXJlUHJvcC5mb3JtYXQgPT09IFwibnVtYmVyXCIpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibnVtYmVyIGZvcm1hdFwiKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZGVwdGggfSA9IHRoaXMudGV4dHVyZVByb3Auc2l6ZTtcclxuXHRcdHJldHVybiB0aGlzLmNvbnRleHQuZGV2aWNlLmNyZWF0ZVRleHR1cmUoe1xyXG5cdFx0XHRsYWJlbDogdGhpcy50ZXh0dXJlUHJvcD8ubGFiZWwgfHwgXCJ1bmRlZmluZWRcIixcclxuXHRcdFx0c2l6ZTogW3dpZHRoLCBoZWlnaHQsIGRlcHRoXSxcclxuXHRcdFx0ZGltZW5zaW9uOiB0aGlzLnRleHR1cmVQcm9wLmRpbWVuc2lvbiB8fCBcIjJkXCIsXHJcblx0XHRcdGZvcm1hdDogdGhpcy50ZXh0dXJlUHJvcC5mb3JtYXQgYXMgR1BVVGV4dHVyZUZvcm1hdCxcclxuXHRcdFx0dXNhZ2U6IHRoaXMudGV4dHVyZVByb3AudXNhZ2UsXHJcblx0XHRcdG1pcExldmVsQ291bnQ6IHRoaXMudGV4dHVyZVByb3AubWlwTGV2ZWxDb3VudCB8fCAxLFxyXG5cdFx0XHRzYW1wbGVDb3VudDogdGhpcy50ZXh0dXJlUHJvcC5zYW1wbGVDb3VudCB8fCAxXHJcblx0XHR9KTtcclxuXHR9XHJcblx0cHJpdmF0ZSBjaGVja05lZWRDcmVhdGVUZXh0dXJlKCkge1xyXG5cdFx0Y29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBkZXB0aCB9ID0gdGhpcy50ZXh0dXJlUHJvcC5zaXplO1xyXG5cdFx0aWYgKHRoaXMuZ3B1VGV4dHVyZSkge1xyXG5cdFx0XHRpZiAod2lkdGggIT0gdGhpcy5ncHVUZXh0dXJlLndpZHRoIHx8IGhlaWdodCAhPSB0aGlzLmdwdVRleHR1cmUuaGVpZ2h0KSB7XHJcblx0XHRcdFx0dGhpcy5fdGV4dHVyZVZpZXcgPSB1bmRlZmluZWQ7XHJcblx0XHRcdFx0dGhpcy5ncHVUZXh0dXJlLmRlc3Ryb3koKTtcclxuXHRcdFx0XHR0aGlzLmdwdVRleHR1cmUgPSB0aGlzLmNyZWF0ZUdQVVRleHR1cmUoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5ncHVUZXh0dXJlID0gdGhpcy5jcmVhdGVHUFVUZXh0dXJlKCk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDb250ZXh0IGZyb20gXCIuL0NvbnRleHRcIjtcclxuXHJcbmNsYXNzIFNhbXBsZXIge1xyXG5cdHB1YmxpYyBncHVTYW1wbGVyOiBHUFVTYW1wbGVyO1xyXG5cdHB1YmxpYyBsYXlvdXRUeXBlOiBHUFVTYW1wbGVyQmluZGluZ0xheW91dDtcclxuXHJcblx0c3RhdGljIGJhc2VTYW1wbGVyID0gbmV3IFNhbXBsZXIoe1xyXG5cdFx0bWFnRmlsdGVyOiBcImxpbmVhclwiLFxyXG5cdFx0bWluRmlsdGVyOiBcImxpbmVhclwiXHJcblx0fSk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIGRlc2NyaXB0b3I/OiBHUFVTYW1wbGVyRGVzY3JpcHRvcixcclxuXHRcdGxheW91dFR5cGU6IEdQVVNhbXBsZXJCaW5kaW5nTGF5b3V0ID0ge1xyXG5cdFx0XHR0eXBlOiBcImZpbHRlcmluZ1wiXHJcblx0XHR9XHJcblx0KSB7XHJcblx0XHR0aGlzLmRlc2NyaXB0b3IgPSB7fTtcclxuXHRcdE9iamVjdC5hc3NpZ24oXHJcblx0XHRcdHRoaXMuZGVzY3JpcHRvcixcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG1hZ0ZpbHRlcjogXCJsaW5lYXJcIixcclxuXHRcdFx0XHRtaW5GaWx0ZXI6IFwibGluZWFyXCIsXHJcblx0XHRcdFx0Ly8gbWlwbWFwRmlsdGVyOiBcImxpbmVhclwiLFxyXG5cdFx0XHRcdGFkZHJlc3NNb2RlVTogXCJjbGFtcC10by1lZGdlXCIsXHJcblx0XHRcdFx0YWRkcmVzc01vZGVWOiBcImNsYW1wLXRvLWVkZ2VcIlxyXG5cdFx0XHRcdC8vIGFkZHJlc3NNb2RlVzogXCJjbGFtcC10by1lZGdlXCIsXHJcblx0XHRcdH0sXHJcblx0XHRcdGRlc2NyaXB0b3JcclxuXHRcdCk7XHJcblx0XHR0aGlzLmxheW91dFR5cGUgPSBsYXlvdXRUeXBlO1xyXG5cdH1cclxuXHR1cGRhdGUoY29udGV4dDogQ29udGV4dCkge1xyXG5cdFx0aWYgKCF0aGlzLmdwdVNhbXBsZXIpIHRoaXMuZ3B1U2FtcGxlciA9IGNvbnRleHQuZGV2aWNlLmNyZWF0ZVNhbXBsZXIodGhpcy5kZXNjcmlwdG9yKTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNhbXBsZXI7XHJcbiIsImltcG9ydCB7IEF0dGFjaG1lbnRPcHRpb25zIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4vVGV4dHVyZVwiO1xyXG5cclxuY2xhc3MgQXR0YWNobWVudCB7XHJcblx0cHVibGljIG9wOiBHUFVMb2FkT3AgPSBcImNsZWFyXCI7XHJcblx0cHVibGljIHN0b3JlT3A6IEdQVVN0b3JlT3AgPSBcInN0b3JlXCI7XHJcblxyXG5cdHB1YmxpYyB0ZXh0dXJlPzogVGV4dHVyZTtcclxuXHRwdWJsaWMgcmVzb2x2ZVRhcmdldD86IFRleHR1cmU7XHJcblxyXG5cdHB1YmxpYyByZWFkT25seT86IGJvb2xlYW47XHJcblxyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyB2YWx1ZTogR1BVQ29sb3JEaWN0IHwgR1BVQ29sb3IgfCBudW1iZXIsIG9wdGlvbnM/OiBBdHRhY2htZW50T3B0aW9ucykge1xyXG5cdFx0T2JqZWN0LmFzc2lnbih0aGlzLCBvcHRpb25zKTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEF0dGFjaG1lbnQ7XHJcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZmluZWQodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGw7XG59XG4iLCIvKlxuICBodHRwczovL2dpdGh1Yi5jb20vYmFua3NlYW4gd3JhcHBlZCBNYWtvdG8gTWF0c3Vtb3RvIGFuZCBUYWt1amkgTmlzaGltdXJhJ3MgY29kZSBpbiBhIG5hbWVzcGFjZVxuICBzbyBpdCdzIGJldHRlciBlbmNhcHN1bGF0ZWQuIE5vdyB5b3UgY2FuIGhhdmUgbXVsdGlwbGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3JzXG4gIGFuZCB0aGV5IHdvbid0IHN0b21wIGFsbCBvdmVyIGVhY2hvdGhlcidzIHN0YXRlLlxuXG4gIElmIHlvdSB3YW50IHRvIHVzZSB0aGlzIGFzIGEgc3Vic3RpdHV0ZSBmb3IgTWF0aC5yYW5kb20oKSwgdXNlIHRoZSByYW5kb20oKVxuICBtZXRob2QgbGlrZSBzbzpcblxuICB2YXIgbSA9IG5ldyBNZXJzZW5uZVR3aXN0ZXIoKTtcbiAgdmFyIHJhbmRvbU51bWJlciA9IG0ucmFuZG9tKCk7XG5cbiAgWW91IGNhbiBhbHNvIGNhbGwgdGhlIG90aGVyIGdlbnJhbmRfe2Zvb30oKSBtZXRob2RzIG9uIHRoZSBpbnN0YW5jZS5cblxuICBJZiB5b3Ugd2FudCB0byB1c2UgYSBzcGVjaWZpYyBzZWVkIGluIG9yZGVyIHRvIGdldCBhIHJlcGVhdGFibGUgcmFuZG9tXG4gIHNlcXVlbmNlLCBwYXNzIGFuIGludGVnZXIgaW50byB0aGUgY29uc3RydWN0b3I6XG5cbiAgdmFyIG0gPSBuZXcgTWVyc2VubmVUd2lzdGVyKDEyMyk7XG5cbiAgYW5kIHRoYXQgd2lsbCBhbHdheXMgcHJvZHVjZSB0aGUgc2FtZSByYW5kb20gc2VxdWVuY2UuXG5cbiAgU2VhbiBNY0N1bGxvdWdoIChiYW5rc2VhbkBnbWFpbC5jb20pXG4qL1xuXG4vKlxuICAgQSBDLXByb2dyYW0gZm9yIE1UMTk5MzcsIHdpdGggaW5pdGlhbGl6YXRpb24gaW1wcm92ZWQgMjAwMi8xLzI2LlxuICAgQ29kZWQgYnkgVGFrdWppIE5pc2hpbXVyYSBhbmQgTWFrb3RvIE1hdHN1bW90by5cblxuICAgQmVmb3JlIHVzaW5nLCBpbml0aWFsaXplIHRoZSBzdGF0ZSBieSB1c2luZyBpbml0X3NlZWQoc2VlZClcbiAgIG9yIGluaXRfYnlfYXJyYXkoaW5pdF9rZXksIGtleV9sZW5ndGgpLlxuXG4gICBDb3B5cmlnaHQgKEMpIDE5OTcgLSAyMDAyLCBNYWtvdG8gTWF0c3Vtb3RvIGFuZCBUYWt1amkgTmlzaGltdXJhLFxuICAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnNcbiAgIGFyZSBtZXQ6XG5cbiAgICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgICAzLiBUaGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlXG4gICAgICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlblxuICAgICAgICBwZXJtaXNzaW9uLlxuXG4gICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gICBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUlxuICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsXG4gICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sXG4gICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1JcbiAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0ZcbiAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HXG4gICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcbiAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5cbiAgIEFueSBmZWVkYmFjayBpcyB2ZXJ5IHdlbGNvbWUuXG4gICBodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwL35tLW1hdC9NVC9lbXQuaHRtbFxuICAgZW1haWw6IG0tbWF0IEAgbWF0aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAgKHJlbW92ZSBzcGFjZSlcbiovXG5cbnZhciBNZXJzZW5uZVR3aXN0ZXIgPSBmdW5jdGlvbihzZWVkKSB7XG5cdGlmIChzZWVkID09IHVuZGVmaW5lZCkge1xuXHRcdHNlZWQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblx0fVxuXG5cdC8qIFBlcmlvZCBwYXJhbWV0ZXJzICovXG5cdHRoaXMuTiA9IDYyNDtcblx0dGhpcy5NID0gMzk3O1xuXHR0aGlzLk1BVFJJWF9BID0gMHg5OTA4YjBkZjsgICAvKiBjb25zdGFudCB2ZWN0b3IgYSAqL1xuXHR0aGlzLlVQUEVSX01BU0sgPSAweDgwMDAwMDAwOyAvKiBtb3N0IHNpZ25pZmljYW50IHctciBiaXRzICovXG5cdHRoaXMuTE9XRVJfTUFTSyA9IDB4N2ZmZmZmZmY7IC8qIGxlYXN0IHNpZ25pZmljYW50IHIgYml0cyAqL1xuXG5cdHRoaXMubXQgPSBuZXcgQXJyYXkodGhpcy5OKTsgLyogdGhlIGFycmF5IGZvciB0aGUgc3RhdGUgdmVjdG9yICovXG5cdHRoaXMubXRpPXRoaXMuTisxOyAvKiBtdGk9PU4rMSBtZWFucyBtdFtOXSBpcyBub3QgaW5pdGlhbGl6ZWQgKi9cblxuXHRpZiAoc2VlZC5jb25zdHJ1Y3RvciA9PSBBcnJheSkge1xuXHRcdHRoaXMuaW5pdF9ieV9hcnJheShzZWVkLCBzZWVkLmxlbmd0aCk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0dGhpcy5pbml0X3NlZWQoc2VlZCk7XG5cdH1cbn1cblxuLyogaW5pdGlhbGl6ZXMgbXRbTl0gd2l0aCBhIHNlZWQgKi9cbi8qIG9yaWdpbiBuYW1lIGluaXRfZ2VucmFuZCAqL1xuTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5pbml0X3NlZWQgPSBmdW5jdGlvbihzKSB7XG5cdHRoaXMubXRbMF0gPSBzID4+PiAwO1xuXHRmb3IgKHRoaXMubXRpPTE7IHRoaXMubXRpPHRoaXMuTjsgdGhpcy5tdGkrKykge1xuXHRcdHZhciBzID0gdGhpcy5tdFt0aGlzLm10aS0xXSBeICh0aGlzLm10W3RoaXMubXRpLTFdID4+PiAzMCk7XG5cdFx0dGhpcy5tdFt0aGlzLm10aV0gPSAoKCgoKHMgJiAweGZmZmYwMDAwKSA+Pj4gMTYpICogMTgxMjQzMzI1MykgPDwgMTYpICsgKHMgJiAweDAwMDBmZmZmKSAqIDE4MTI0MzMyNTMpXG5cdFx0KyB0aGlzLm10aTtcblx0XHQvKiBTZWUgS251dGggVEFPQ1AgVm9sMi4gM3JkIEVkLiBQLjEwNiBmb3IgbXVsdGlwbGllci4gKi9cblx0XHQvKiBJbiB0aGUgcHJldmlvdXMgdmVyc2lvbnMsIE1TQnMgb2YgdGhlIHNlZWQgYWZmZWN0ICAgKi9cblx0XHQvKiBvbmx5IE1TQnMgb2YgdGhlIGFycmF5IG10W10uICAgICAgICAgICAgICAgICAgICAgICAgKi9cblx0XHQvKiAyMDAyLzAxLzA5IG1vZGlmaWVkIGJ5IE1ha290byBNYXRzdW1vdG8gICAgICAgICAgICAgKi9cblx0XHR0aGlzLm10W3RoaXMubXRpXSA+Pj49IDA7XG5cdFx0LyogZm9yID4zMiBiaXQgbWFjaGluZXMgKi9cblx0fVxufVxuXG4vKiBpbml0aWFsaXplIGJ5IGFuIGFycmF5IHdpdGggYXJyYXktbGVuZ3RoICovXG4vKiBpbml0X2tleSBpcyB0aGUgYXJyYXkgZm9yIGluaXRpYWxpemluZyBrZXlzICovXG4vKiBrZXlfbGVuZ3RoIGlzIGl0cyBsZW5ndGggKi9cbi8qIHNsaWdodCBjaGFuZ2UgZm9yIEMrKywgMjAwNC8yLzI2ICovXG5NZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLmluaXRfYnlfYXJyYXkgPSBmdW5jdGlvbihpbml0X2tleSwga2V5X2xlbmd0aCkge1xuXHR2YXIgaSwgaiwgaztcblx0dGhpcy5pbml0X3NlZWQoMTk2NTAyMTgpO1xuXHRpPTE7IGo9MDtcblx0ayA9ICh0aGlzLk4+a2V5X2xlbmd0aCA/IHRoaXMuTiA6IGtleV9sZW5ndGgpO1xuXHRmb3IgKDsgazsgay0tKSB7XG5cdFx0dmFyIHMgPSB0aGlzLm10W2ktMV0gXiAodGhpcy5tdFtpLTFdID4+PiAzMClcblx0XHR0aGlzLm10W2ldID0gKHRoaXMubXRbaV0gXiAoKCgoKHMgJiAweGZmZmYwMDAwKSA+Pj4gMTYpICogMTY2NDUyNSkgPDwgMTYpICsgKChzICYgMHgwMDAwZmZmZikgKiAxNjY0NTI1KSkpXG5cdFx0KyBpbml0X2tleVtqXSArIGo7IC8qIG5vbiBsaW5lYXIgKi9cblx0XHR0aGlzLm10W2ldID4+Pj0gMDsgLyogZm9yIFdPUkRTSVpFID4gMzIgbWFjaGluZXMgKi9cblx0XHRpKys7IGorKztcblx0XHRpZiAoaT49dGhpcy5OKSB7IHRoaXMubXRbMF0gPSB0aGlzLm10W3RoaXMuTi0xXTsgaT0xOyB9XG5cdFx0aWYgKGo+PWtleV9sZW5ndGgpIGo9MDtcblx0fVxuXHRmb3IgKGs9dGhpcy5OLTE7IGs7IGstLSkge1xuXHRcdHZhciBzID0gdGhpcy5tdFtpLTFdIF4gKHRoaXMubXRbaS0xXSA+Pj4gMzApO1xuXHRcdHRoaXMubXRbaV0gPSAodGhpcy5tdFtpXSBeICgoKCgocyAmIDB4ZmZmZjAwMDApID4+PiAxNikgKiAxNTY2MDgzOTQxKSA8PCAxNikgKyAocyAmIDB4MDAwMGZmZmYpICogMTU2NjA4Mzk0MSkpXG5cdFx0LSBpOyAvKiBub24gbGluZWFyICovXG5cdFx0dGhpcy5tdFtpXSA+Pj49IDA7IC8qIGZvciBXT1JEU0laRSA+IDMyIG1hY2hpbmVzICovXG5cdFx0aSsrO1xuXHRcdGlmIChpPj10aGlzLk4pIHsgdGhpcy5tdFswXSA9IHRoaXMubXRbdGhpcy5OLTFdOyBpPTE7IH1cblx0fVxuXG5cdHRoaXMubXRbMF0gPSAweDgwMDAwMDAwOyAvKiBNU0IgaXMgMTsgYXNzdXJpbmcgbm9uLXplcm8gaW5pdGlhbCBhcnJheSAqL1xufVxuXG4vKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDB4ZmZmZmZmZmZdLWludGVydmFsICovXG4vKiBvcmlnaW4gbmFtZSBnZW5yYW5kX2ludDMyICovXG5NZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLnJhbmRvbV9pbnQgPSBmdW5jdGlvbigpIHtcblx0dmFyIHk7XG5cdHZhciBtYWcwMSA9IG5ldyBBcnJheSgweDAsIHRoaXMuTUFUUklYX0EpO1xuXHQvKiBtYWcwMVt4XSA9IHggKiBNQVRSSVhfQSAgZm9yIHg9MCwxICovXG5cblx0aWYgKHRoaXMubXRpID49IHRoaXMuTikgeyAvKiBnZW5lcmF0ZSBOIHdvcmRzIGF0IG9uZSB0aW1lICovXG5cdFx0dmFyIGtrO1xuXG5cdFx0aWYgKHRoaXMubXRpID09IHRoaXMuTisxKSAgLyogaWYgaW5pdF9zZWVkKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCwgKi9cblx0XHRcdHRoaXMuaW5pdF9zZWVkKDU0ODkpOyAgLyogYSBkZWZhdWx0IGluaXRpYWwgc2VlZCBpcyB1c2VkICovXG5cblx0XHRmb3IgKGtrPTA7a2s8dGhpcy5OLXRoaXMuTTtraysrKSB7XG5cdFx0XHR5ID0gKHRoaXMubXRba2tdJnRoaXMuVVBQRVJfTUFTSyl8KHRoaXMubXRba2srMV0mdGhpcy5MT1dFUl9NQVNLKTtcblx0XHRcdHRoaXMubXRba2tdID0gdGhpcy5tdFtrayt0aGlzLk1dIF4gKHkgPj4+IDEpIF4gbWFnMDFbeSAmIDB4MV07XG5cdFx0fVxuXHRcdGZvciAoO2trPHRoaXMuTi0xO2trKyspIHtcblx0XHRcdHkgPSAodGhpcy5tdFtra10mdGhpcy5VUFBFUl9NQVNLKXwodGhpcy5tdFtraysxXSZ0aGlzLkxPV0VSX01BU0spO1xuXHRcdFx0dGhpcy5tdFtra10gPSB0aGlzLm10W2trKyh0aGlzLk0tdGhpcy5OKV0gXiAoeSA+Pj4gMSkgXiBtYWcwMVt5ICYgMHgxXTtcblx0XHR9XG5cdFx0eSA9ICh0aGlzLm10W3RoaXMuTi0xXSZ0aGlzLlVQUEVSX01BU0spfCh0aGlzLm10WzBdJnRoaXMuTE9XRVJfTUFTSyk7XG5cdFx0dGhpcy5tdFt0aGlzLk4tMV0gPSB0aGlzLm10W3RoaXMuTS0xXSBeICh5ID4+PiAxKSBeIG1hZzAxW3kgJiAweDFdO1xuXG5cdFx0dGhpcy5tdGkgPSAwO1xuXHR9XG5cblx0eSA9IHRoaXMubXRbdGhpcy5tdGkrK107XG5cblx0LyogVGVtcGVyaW5nICovXG5cdHkgXj0gKHkgPj4+IDExKTtcblx0eSBePSAoeSA8PCA3KSAmIDB4OWQyYzU2ODA7XG5cdHkgXj0gKHkgPDwgMTUpICYgMHhlZmM2MDAwMDtcblx0eSBePSAoeSA+Pj4gMTgpO1xuXG5cdHJldHVybiB5ID4+PiAwO1xufVxuXG4vKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDB4N2ZmZmZmZmZdLWludGVydmFsICovXG4vKiBvcmlnaW4gbmFtZSBnZW5yYW5kX2ludDMxICovXG5NZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLnJhbmRvbV9pbnQzMSA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gKHRoaXMucmFuZG9tX2ludCgpPj4+MSk7XG59XG5cbi8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMV0tcmVhbC1pbnRlcnZhbCAqL1xuLyogb3JpZ2luIG5hbWUgZ2VucmFuZF9yZWFsMSAqL1xuTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5yYW5kb21faW5jbCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5yYW5kb21faW50KCkqKDEuMC80Mjk0OTY3Mjk1LjApO1xuXHQvKiBkaXZpZGVkIGJ5IDJeMzItMSAqL1xufVxuXG4vKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDEpLXJlYWwtaW50ZXJ2YWwgKi9cbk1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUucmFuZG9tID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnJhbmRvbV9pbnQoKSooMS4wLzQyOTQ5NjcyOTYuMCk7XG5cdC8qIGRpdmlkZWQgYnkgMl4zMiAqL1xufVxuXG4vKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uICgwLDEpLXJlYWwtaW50ZXJ2YWwgKi9cbi8qIG9yaWdpbiBuYW1lIGdlbnJhbmRfcmVhbDMgKi9cbk1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUucmFuZG9tX2V4Y2wgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuICh0aGlzLnJhbmRvbV9pbnQoKSArIDAuNSkqKDEuMC80Mjk0OTY3Mjk2LjApO1xuXHQvKiBkaXZpZGVkIGJ5IDJeMzIgKi9cbn1cblxuLyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxKSB3aXRoIDUzLWJpdCByZXNvbHV0aW9uKi9cbi8qIG9yaWdpbiBuYW1lIGdlbnJhbmRfcmVzNTMgKi9cbk1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUucmFuZG9tX2xvbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIGE9dGhpcy5yYW5kb21faW50KCk+Pj41LCBiPXRoaXMucmFuZG9tX2ludCgpPj4+Njtcblx0cmV0dXJuKGEqNjcxMDg4NjQuMCtiKSooMS4wLzkwMDcxOTkyNTQ3NDA5OTIuMCk7XG59XG5cbi8qIFRoZXNlIHJlYWwgdmVyc2lvbnMgYXJlIGR1ZSB0byBJc2FrdSBXYWRhLCAyMDAyLzAxLzA5IGFkZGVkICovXG5cbm1vZHVsZS5leHBvcnRzID0gTWVyc2VubmVUd2lzdGVyO1xuIiwiaW1wb3J0IE1lcnNlbm5lVHdpc3RlciBmcm9tIFwibWVyc2VubmUtdHdpc3RlclwiO1xyXG5pbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuXHJcbmNsYXNzIEdNYXRoIHtcclxuXHRwdWJsaWMgc3RhdGljIEVQU0lMT04xID0gMC4xO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEVQU0lMT04yID0gMC4wMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OMyA9IDAuMDAxO1xyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjQgPSAwLjAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjUgPSAwLjAwMDAxO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEVQU0lMT042ID0gMC4wMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjcgPSAwLjAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjggPSAwLjAwMDAwMDAxO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEVQU0lMT045ID0gMC4wMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjEwID0gMC4wMDAwMDAwMDAxO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEVQU0lMT04xMSA9IDAuMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjEyID0gMC4wMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjEzID0gMC4wMDAwMDAwMDAwMDAxO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEVQU0lMT04xNCA9IDAuMDAwMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjE1ID0gMC4wMDAwMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjE2ID0gMC4wMDAwMDAwMDAwMDAwMDAxO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEVQU0lMT04xNyA9IDAuMDAwMDAwMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjE4ID0gMC4wMDAwMDAwMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjE5ID0gMC4wMDAwMDAwMDAwMDAwMDAwMDAxO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEVQU0lMT04yMCA9IDAuMDAwMDAwMDAwMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjIxID0gMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgR1JBVklUQVRJT05BTFBBUkFNRVRFUiA9IDMuOTg2MDA0NDE4ZTE0O1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIFNJWFRZX0ZPVVJfS0lMT0JZVEVTID0gNjQgKiAxMDI0O1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEZPVVJfR0lHQUJZVEVTID0gNCAqIDEwMjQgKiAxMDI0ICogMTAyNDtcclxuXHJcblx0c3RhdGljIHNpZ24gPSBkZWZhdWx0VmFsdWUoTWF0aC5zaWduLCBmdW5jdGlvbiBzaWduKHZhbHVlKSB7XHJcblx0XHR2YWx1ZSA9ICt2YWx1ZTsgLy8gY29lcmNlIHRvIG51bWJlclxyXG5cdFx0aWYgKHZhbHVlID09PSAwIHx8IHZhbHVlICE9PSB2YWx1ZSkge1xyXG5cdFx0XHQvLyB6ZXJvIG9yIE5hTlxyXG5cdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdmFsdWUgPiAwID8gMSA6IC0xO1xyXG5cdH0pO1xyXG5cclxuXHRzdGF0aWMgc2lnbk5vdFplcm8odmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZSA8IDAuMCA/IC0xLjAgOiAxLjA7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgdG9TTm9ybSh2YWx1ZTogbnVtYmVyLCByYW5nZU1heGltdW06IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyYW5nZU1heGltdW0gPSBkZWZhdWx0VmFsdWUocmFuZ2VNYXhpbXVtLCAyNTUpO1xyXG5cdFx0cmV0dXJuIE1hdGgucm91bmQoKEdNYXRoLmNsYW1wKHZhbHVlLCAtMS4wLCAxLjApICogMC41ICsgMC41KSAqIHJhbmdlTWF4aW11bSk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVNOb3JtKHZhbHVlOiBudW1iZXIsIHJhbmdlTWF4aW11bTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdHJhbmdlTWF4aW11bSA9IGRlZmF1bHRWYWx1ZShyYW5nZU1heGltdW0sIDI1NSk7XHJcblx0XHRyZXR1cm4gKEdNYXRoLmNsYW1wKHZhbHVlLCAwLjAsIHJhbmdlTWF4aW11bSkgLyByYW5nZU1heGltdW0pICogMi4wIC0gMS4wO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG5vcm1hbGl6ZSh2YWx1ZTogbnVtYmVyLCByYW5nZU1pbmltdW06IG51bWJlciwgcmFuZ2VNYXhpbXVtOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0cmFuZ2VNYXhpbXVtID0gTWF0aC5tYXgocmFuZ2VNYXhpbXVtIC0gcmFuZ2VNaW5pbXVtLCAwLjApO1xyXG5cdFx0cmV0dXJuIHJhbmdlTWF4aW11bSA9PT0gMC4wID8gMC4wIDogR01hdGguY2xhbXAoKHZhbHVlIC0gcmFuZ2VNaW5pbXVtKSAvIHJhbmdlTWF4aW11bSwgMC4wLCAxLjApO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHNpbmggPSBkZWZhdWx0VmFsdWUoTWF0aC5zaW5oLCBmdW5jdGlvbiBzaW5oKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gKE1hdGguZXhwKHZhbHVlKSAtIE1hdGguZXhwKC12YWx1ZSkpIC8gMi4wO1xyXG5cdH0pO1xyXG5cclxuXHRzdGF0aWMgY29zaCA9IGRlZmF1bHRWYWx1ZShNYXRoLmNvc2gsIGZ1bmN0aW9uIGNvc2godmFsdWUpIHtcclxuXHRcdHJldHVybiAoTWF0aC5leHAodmFsdWUpICsgTWF0aC5leHAoLXZhbHVlKSkgLyAyLjA7XHJcblx0fSk7XHJcblxyXG5cdHN0YXRpYyBsZXJwKHA6IG51bWJlciwgcTogbnVtYmVyLCB0aW1lOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuICgxLjAgLSB0aW1lKSAqIHAgKyB0aW1lICogcTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBQSSA9IE1hdGguUEk7XHJcblxyXG5cdHN0YXRpYyBPTkVfT1ZFUl9QSSA9IDEuMCAvIE1hdGguUEk7XHJcblxyXG5cdHN0YXRpYyBQSV9PVkVSX1RXTyA9IE1hdGguUEkgLyAyLjA7XHJcblxyXG5cdHN0YXRpYyBQSV9PVkVSX1RIUkVFID0gTWF0aC5QSSAvIDMuMDtcclxuXHJcblx0c3RhdGljIFBJX09WRVJfRk9VUiA9IE1hdGguUEkgLyA0LjA7XHJcblxyXG5cdHN0YXRpYyBQSV9PVkVSX1NJWCA9IE1hdGguUEkgLyA2LjA7XHJcblxyXG5cdHN0YXRpYyBUSFJFRV9QSV9PVkVSX1RXTyA9ICgzLjAgKiBNYXRoLlBJKSAvIDIuMDtcclxuXHJcblx0c3RhdGljIFRXT19QSSA9IDIuMCAqIE1hdGguUEk7XHJcblxyXG5cdHN0YXRpYyBPTkVfT1ZFUl9UV09fUEkgPSAxLjAgLyAoMi4wICogTWF0aC5QSSk7XHJcblxyXG5cdHN0YXRpYyBSQURJQU5TX1BFUl9ERUdSRUUgPSBNYXRoLlBJIC8gMTgwLjA7XHJcblxyXG5cdHN0YXRpYyBERUdSRUVTX1BFUl9SQURJQU4gPSAxODAuMCAvIE1hdGguUEk7XHJcblxyXG5cdHN0YXRpYyBSQURJQU5TX1BFUl9BUkNTRUNPTkQgPSBHTWF0aC5SQURJQU5TX1BFUl9ERUdSRUUgLyAzNjAwLjA7XHJcblxyXG5cdHN0YXRpYyB0b1JhZGlhbnMoZGVncmVlczogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdGlmICghZGVmaW5lZChkZWdyZWVzKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkZWdyZWVzIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBkZWdyZWVzICogR01hdGguUkFESUFOU19QRVJfREVHUkVFO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHRvRGVncmVlcyhyYWRpYW5zOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHJhZGlhbnMpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInJhZGlhbnMgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJhZGlhbnMgKiBHTWF0aC5ERUdSRUVTX1BFUl9SQURJQU47XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbmVnYXRpdmVQaVRvUGkoYW5nbGU6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRpZiAoIWRlZmluZWQoYW5nbGUpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImFuZ2xlIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmIChhbmdsZSA+PSAtR01hdGguUEkgJiYgYW5nbGUgPD0gR01hdGguUEkpIHtcclxuXHRcdFx0Ly8gRWFybHkgZXhpdCBpZiB0aGUgaW5wdXQgaXMgYWxyZWFkeSBpbnNpZGUgdGhlIHJhbmdlLiBUaGlzIGF2b2lkc1xyXG5cdFx0XHQvLyB1bm5lY2Vzc2FyeSBtYXRoIHdoaWNoIGNvdWxkIGludHJvZHVjZSBmbG9hdGluZyBwb2ludCBlcnJvci5cclxuXHRcdFx0cmV0dXJuIGFuZ2xlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIEdNYXRoLnplcm9Ub1R3b1BpKGFuZ2xlICsgR01hdGguUEkpIC0gR01hdGguUEk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgemVyb1RvVHdvUGkoYW5nbGU6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRpZiAoIWRlZmluZWQoYW5nbGUpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImFuZ2xlIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmIChhbmdsZSA+PSAwICYmIGFuZ2xlIDw9IEdNYXRoLlRXT19QSSkge1xyXG5cdFx0XHQvLyBFYXJseSBleGl0IGlmIHRoZSBpbnB1dCBpcyBhbHJlYWR5IGluc2lkZSB0aGUgcmFuZ2UuIFRoaXMgYXZvaWRzXHJcblx0XHRcdC8vIHVubmVjZXNzYXJ5IG1hdGggd2hpY2ggY291bGQgaW50cm9kdWNlIGZsb2F0aW5nIHBvaW50IGVycm9yLlxyXG5cdFx0XHRyZXR1cm4gYW5nbGU7XHJcblx0XHR9XHJcblx0XHRjb25zdCBtb2QgPSBHTWF0aC5tb2QoYW5nbGUsIEdNYXRoLlRXT19QSSk7XHJcblx0XHRpZiAoTWF0aC5hYnMobW9kKSA8IEdNYXRoLkVQU0lMT04xNCAmJiBNYXRoLmFicyhhbmdsZSkgPiBHTWF0aC5FUFNJTE9OMTQpIHtcclxuXHRcdFx0cmV0dXJuIEdNYXRoLlRXT19QSTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtb2Q7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbW9kKG06IG51bWJlciwgbjogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdGlmICghZGVmaW5lZChtKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChuKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJuIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmIChuID09PSAwLjApIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZGl2aXNvciBjYW5ub3QgYmUgMC5cIik7XHJcblx0XHR9XHJcblx0XHRpZiAoR01hdGguc2lnbihtKSA9PT0gR01hdGguc2lnbihuKSAmJiBNYXRoLmFicyhtKSA8IE1hdGguYWJzKG4pKSB7XHJcblx0XHRcdC8vIEVhcmx5IGV4aXQgaWYgdGhlIGlucHV0IGRvZXMgbm90IG5lZWQgdG8gYmUgbW9kZGVkLiBUaGlzIGF2b2lkc1xyXG5cdFx0XHQvLyB1bm5lY2Vzc2FyeSBtYXRoIHdoaWNoIGNvdWxkIGludHJvZHVjZSBmbG9hdGluZyBwb2ludCBlcnJvci5cclxuXHRcdFx0cmV0dXJuIG07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuICgobSAlIG4pICsgbikgJSBuO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFsc0Vwc2lsb24oXHJcblx0XHRsZWZ0OiBudW1iZXIsXHJcblx0XHRyaWdodDogbnVtYmVyLFxyXG5cdFx0cmVsYXRpdmVFcHNpbG9uOiBudW1iZXIsXHJcblx0XHRhYnNvbHV0ZUVwc2lsb246IG51bWJlciA9IHJlbGF0aXZlRXBzaWxvblxyXG5cdCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGxlZnQpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImxlZnQgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJpZ2h0KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJyaWdodCBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVsYXRpdmVFcHNpbG9uID0gZGVmYXVsdFZhbHVlKHJlbGF0aXZlRXBzaWxvbiwgMC4wKTtcclxuXHRcdGFic29sdXRlRXBzaWxvbiA9IGRlZmF1bHRWYWx1ZShhYnNvbHV0ZUVwc2lsb24sIHJlbGF0aXZlRXBzaWxvbik7XHJcblx0XHRjb25zdCBhYnNEaWZmID0gTWF0aC5hYnMobGVmdCAtIHJpZ2h0KTtcclxuXHRcdHJldHVybiBhYnNEaWZmIDw9IGFic29sdXRlRXBzaWxvbiB8fCBhYnNEaWZmIDw9IHJlbGF0aXZlRXBzaWxvbiAqIE1hdGgubWF4KE1hdGguYWJzKGxlZnQpLCBNYXRoLmFicyhyaWdodCkpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGxlc3NUaGFuKGxlZnQ6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYWJzb2x1dGVFcHNpbG9uID0gMCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGxlZnQpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImZpcnN0IGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyaWdodCkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic2Vjb25kIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChhYnNvbHV0ZUVwc2lsb24pKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImFic29sdXRlRXBzaWxvbiBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbGVmdCAtIHJpZ2h0IDwgLWFic29sdXRlRXBzaWxvbjtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBsZXNzVGhhbk9yRXF1YWxzKGxlZnQ6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYWJzb2x1dGVFcHNpbG9uID0gMCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGxlZnQpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImZpcnN0IGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyaWdodCkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic2Vjb25kIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChhYnNvbHV0ZUVwc2lsb24pKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImFic29sdXRlRXBzaWxvbiBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbGVmdCAtIHJpZ2h0IDwgYWJzb2x1dGVFcHNpbG9uO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdyZWF0ZXJUaGFuKGxlZnQ6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYWJzb2x1dGVFcHNpbG9uID0gMCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGxlZnQpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImZpcnN0IGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyaWdodCkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic2Vjb25kIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChhYnNvbHV0ZUVwc2lsb24pKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImFic29sdXRlRXBzaWxvbiBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbGVmdCAtIHJpZ2h0ID4gYWJzb2x1dGVFcHNpbG9uO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdyZWF0ZXJUaGFuT3JFcXVhbHMobGVmdDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBhYnNvbHV0ZUVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIWRlZmluZWQobGVmdCkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZmlyc3QgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJpZ2h0KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzZWNvbmQgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKGFic29sdXRlRXBzaWxvbikpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYWJzb2x1dGVFcHNpbG9uIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBsZWZ0IC0gcmlnaHQgPiAtYWJzb2x1dGVFcHNpbG9uO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGlzUG93ZXJPZlR3byhuOiBudW1iZXIpOiBib29sZWFuIHtcclxuXHRcdC8vID4+aW5jbHVkZVN0YXJ0KCdkZWJ1ZycsIHByYWdtYXMuZGVidWcpO1xyXG5cdFx0aWYgKHR5cGVvZiBuICE9PSBcIm51bWJlclwiIHx8IG4gPCAwIHx8IG4gPiA0Mjk0OTY3Mjk1KSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKDJeMzIpLTEgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gPj5pbmNsdWRlRW5kKCdkZWJ1ZycpO1xyXG5cclxuXHRcdHJldHVybiBuICE9PSAwICYmIChuICYgKG4gLSAxKSkgPT09IDA7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbmV4dFBvd2VyT2ZUd28objogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdGlmICh0eXBlb2YgbiAhPT0gXCJudW1iZXJcIiB8fCBuIDwgMCB8fCBuID4gMjE0NzQ4MzY0OCkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDJeMzEgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gRnJvbSBodHRwOi8vZ3JhcGhpY3Muc3RhbmZvcmQuZWR1L35zZWFuZGVyL2JpdGhhY2tzLmh0bWwjUm91bmRVcFBvd2VyT2YyXHJcblx0XHQtLW47XHJcblx0XHRuIHw9IG4gPj4gMTtcclxuXHRcdG4gfD0gbiA+PiAyO1xyXG5cdFx0biB8PSBuID4+IDQ7XHJcblx0XHRuIHw9IG4gPj4gODtcclxuXHRcdG4gfD0gbiA+PiAxNjtcclxuXHRcdCsrbjtcclxuXHJcblx0XHRyZXR1cm4gbjtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBwcmV2aW91c1Bvd2VyT2ZUd28objogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdGlmICh0eXBlb2YgbiAhPT0gXCJudW1iZXJcIiB8fCBuIDwgMCB8fCBuID4gNDI5NDk2NzI5NSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBIG51bWJlciBiZXR3ZWVuIDAgYW5kICgyXjMyKS0xIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRuIHw9IG4gPj4gMTtcclxuXHRcdG4gfD0gbiA+PiAyO1xyXG5cdFx0biB8PSBuID4+IDQ7XHJcblx0XHRuIHw9IG4gPj4gODtcclxuXHRcdG4gfD0gbiA+PiAxNjtcclxuXHRcdG4gfD0gbiA+PiAzMjtcclxuXHJcblx0XHQvLyBUaGUgcHJldmlvdXMgYml0d2lzZSBvcGVyYXRpb25zIGltcGxpY2l0bHkgY29udmVydCB0byBzaWduZWQgMzItYml0LiBVc2UgYD4+PmAgdG8gY29udmVydCB0byB1bnNpZ25lZFxyXG5cdFx0biA9IChuID4+PiAwKSAtIChuID4+PiAxKTtcclxuXHJcblx0XHRyZXR1cm4gbjtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjbGFtcCh2YWx1ZTogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHZhbHVlIDwgbWluID8gbWluIDogdmFsdWUgPiBtYXggPyBtYXggOiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBuZXh0UmFuZG9tTnVtYmVyID0gZnVuY3Rpb24gKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gcmFuZG9tTnVtYmVyR2VuZXJhdG9yLnJhbmRvbSgpO1xyXG5cdH07XHJcblxyXG5cdHN0YXRpYyByYW5kb21CZXR3ZWVuID0gZnVuY3Rpb24gKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gR01hdGgubmV4dFJhbmRvbU51bWJlcigpICogKG1heCAtIG1pbikgKyBtaW47XHJcblx0fTtcclxuXHJcblx0c3RhdGljIGFjb3NDbGFtcGVkID0gZnVuY3Rpb24gKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHZhbHVlKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ2YWx1ZSBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguYWNvcyhHTWF0aC5jbGFtcCh2YWx1ZSwgLTEuMCwgMS4wKSk7XHJcblx0fTtcclxuXHJcblx0c3RhdGljIGFzaW5DbGFtcGVkID0gZnVuY3Rpb24gKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHZhbHVlKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ2YWx1ZSBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguYXNpbihHTWF0aC5jbGFtcCh2YWx1ZSwgLTEuMCwgMS4wKSk7XHJcblx0fTtcclxuXHJcblx0c3RhdGljIGNob3JkTGVuZ3RoID0gZnVuY3Rpb24gKGFuZ2xlOiBudW1iZXIsIHJhZGl1czogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdGlmICghZGVmaW5lZChhbmdsZSkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYW5nbGUgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJhZGl1cykpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicmFkaXVzIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gMi4wICogcmFkaXVzICogTWF0aC5zaW4oYW5nbGUgKiAwLjUpO1xyXG5cdH07XHJcblxyXG5cdHN0YXRpYyBsb2dCYXNlID0gZnVuY3Rpb24gKG51bWJlcjogbnVtYmVyLCBiYXNlOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKG51bWJlcikpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibnVtYmVyIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChiYXNlKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJiYXNlIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gTWF0aC5sb2cobnVtYmVyKSAvIE1hdGgubG9nKGJhc2UpO1xyXG5cdH07XHJcblxyXG5cdHN0YXRpYyBjYnJ0ID0gZGVmYXVsdFZhbHVlKE1hdGguY2JydCwgZnVuY3Rpb24gY2JydChudW1iZXIpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IE1hdGgucG93KE1hdGguYWJzKG51bWJlciksIDEuMCAvIDMuMCk7XHJcblx0XHRyZXR1cm4gbnVtYmVyIDwgMC4wID8gLXJlc3VsdCA6IHJlc3VsdDtcclxuXHR9KTtcclxuXHRzdGF0aWMgbG9nMiA9IGRlZmF1bHRWYWx1ZShNYXRoLmxvZzIsIGZ1bmN0aW9uIGxvZzIobnVtYmVyKSB7XHJcblx0XHRyZXR1cm4gTWF0aC5sb2cobnVtYmVyKSAqIE1hdGguTE9HMkU7XHJcblx0fSk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0c3RhdGljIGZvZyhkaXN0YW5jZVRvQ2FtZXJhOiBudW1iZXIsIGRlbnNpdHk6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRjb25zdCBzY2FsYXIgPSBkaXN0YW5jZVRvQ2FtZXJhICogZGVuc2l0eTtcclxuXHRcdHJldHVybiAxLjAgLSBNYXRoLmV4cCgtKHNjYWxhciAqIHNjYWxhcikpO1xyXG5cdH1cclxufVxyXG5jb25zdCByYW5kb21OdW1iZXJHZW5lcmF0b3IgPSBuZXcgTWVyc2VubmVUd2lzdGVyKCk7XHJcbmNvbnN0IGZhY3RvcmlhbHMgPSBbMV07XHJcbmV4cG9ydCBkZWZhdWx0IEdNYXRoO1xyXG4iLCJpbXBvcnQgeyBBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vcmVuZGVyL0F0dHJpYnV0ZVwiO1xyXG5pbXBvcnQgZGVmaW5lZCBmcm9tIFwiLi4vdXRpbHMvZGVmaW5lZFwiO1xyXG5pbXBvcnQgR01hdGggZnJvbSBcIi4vTWF0aFwiO1xyXG5pbXBvcnQgTWF0cml4MyBmcm9tIFwiLi9NYXRyaXgzXCI7XHJcbi8qKlxyXG4gKiBBIDJEIENhcnRlc2lhbiBwb2ludC5cclxuICogQGFsaWFzIFZlY3RvcjJcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbeD0wLjBdIFRoZSBYIGNvbXBvbmVudC5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFt5PTAuMF0gVGhlIFkgY29tcG9uZW50LlxyXG4gKlxyXG4gKi9cclxuY2xhc3MgVmVjdG9yMiB7XHJcblx0cHVibGljIHN0YXRpYyBaRVJPID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yMigwLjAsIDAuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIE9ORSA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjIoMS4wLCAxLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBVTklUX1ggPSBPYmplY3QuZnJlZXplKG5ldyBWZWN0b3IyKDEuMCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgVU5JVF9ZID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yMigwLjAsIDEuMCkpO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgeDogbnVtYmVyID0gMC4wLCBwdWJsaWMgeTogbnVtYmVyID0gMC4wKSB7XHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHR9XHJcblx0c2V0KHg6IG51bWJlciwgeTogbnVtYmVyKTogVmVjdG9yMiB7XHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHR0b0FycmF5KCkge1xyXG5cdFx0cmV0dXJuIFt0aGlzLngsIHRoaXMueV07XHJcblx0fVxyXG5cclxuXHRjbG9uZShyZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdHJldHVybiBWZWN0b3IyLmNsb25lKHRoaXMsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRlcXVhbHMocmlnaHQ6IFZlY3RvcjIpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBWZWN0b3IyLmVxdWFscyh0aGlzLCByaWdodCk7XHJcblx0fVxyXG5cdGVxdWFsc0Vwc2lsb24ocmlnaHQ6IFZlY3RvcjIsIHJlbGF0aXZlRXBzaWxvbiA9IDAsIGFic29sdXRlRXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBWZWN0b3IyLmVxdWFsc0Vwc2lsb24odGhpcywgcmlnaHQsIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKTtcclxuXHR9XHJcblxyXG5cdHRvU3RyaW5nKCkge1xyXG5cdFx0cmV0dXJuIGAoJHt0aGlzLnh9LCAke3RoaXMueX0pYDtcclxuXHR9XHJcblx0ZnJvbUJ1ZmZlckF0dHJpYnV0ZShhdHRyaWJ1dGU6IEF0dHJpYnV0ZSwgaW5kZXg6IG51bWJlcik6IFZlY3RvcjIge1xyXG5cdFx0dGhpcy54ID0gYXR0cmlidXRlLmdldFgoaW5kZXgpO1xyXG5cdFx0dGhpcy55ID0gYXR0cmlidXRlLmdldFkoaW5kZXgpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdGFwcGx5TWF0cml4MyhtYXRyaXgzOiBNYXRyaXgzKTogVmVjdG9yMiB7XHJcblx0XHRjb25zdCB4ID0gdGhpcy54LFxyXG5cdFx0XHR5ID0gdGhpcy55O1xyXG5cdFx0dGhpcy54ID0gbWF0cml4M1swXSAqIHggKyBtYXRyaXgzWzNdICogeSArIG1hdHJpeDNbNl07XHJcblx0XHR0aGlzLnkgPSBtYXRyaXgzWzFdICogeCArIG1hdHJpeDNbNF0gKiB5ICsgbWF0cml4M1s3XTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21FbGVtZW50cyh4OiBudW1iZXIsIHk6IG51bWJlciwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFZlY3RvcjIoeCwgeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjbG9uZShjYXJ0ZXNpYW46IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGNhcnRlc2lhbikpIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yMihjYXJ0ZXNpYW4ueCwgY2FydGVzaWFuLnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLng7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtYXhpbXVtQ29tcG9uZW50KGNhcnRlc2lhbjogVmVjdG9yMik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gTWF0aC5tYXgoY2FydGVzaWFuLngsIGNhcnRlc2lhbi55KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtaW5pbXVtQ29tcG9uZW50KGNhcnRlc2lhbjogVmVjdG9yMik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gTWF0aC5taW4oY2FydGVzaWFuLngsIGNhcnRlc2lhbi55KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtaW5pbXVtQnlDb21wb25lbnQoZmlyc3Q6IFZlY3RvcjIsIHNlY29uZDogVmVjdG9yMiwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRyZXN1bHQueCA9IE1hdGgubWluKGZpcnN0LngsIHNlY29uZC54KTtcclxuXHRcdHJlc3VsdC55ID0gTWF0aC5taW4oZmlyc3QueSwgc2Vjb25kLnkpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWF4aW11bUJ5Q29tcG9uZW50KGZpcnN0OiBWZWN0b3IyLCBzZWNvbmQ6IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0cmVzdWx0LnggPSBNYXRoLm1heChmaXJzdC54LCBzZWNvbmQueCk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGgubWF4KGZpcnN0LnksIHNlY29uZC55KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY2xhbXAodmFsdWU6IFZlY3RvcjIsIG1pbjogVmVjdG9yMiwgbWF4OiBWZWN0b3IyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdGNvbnN0IHggPSBHTWF0aC5jbGFtcCh2YWx1ZS54LCBtaW4ueCwgbWF4LngpO1xyXG5cdFx0Y29uc3QgeSA9IEdNYXRoLmNsYW1wKHZhbHVlLnksIG1pbi55LCBtYXgueSk7XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWFnbml0dWRlU3F1YXJlZChjYXJ0ZXNpYW46IFZlY3RvcjIpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIGNhcnRlc2lhbi54ICogY2FydGVzaWFuLnggKyBjYXJ0ZXNpYW4ueSAqIGNhcnRlc2lhbi55O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1hZ25pdHVkZShjYXJ0ZXNpYW46IFZlY3RvcjIpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIE1hdGguc3FydChWZWN0b3IyLm1hZ25pdHVkZVNxdWFyZWQoY2FydGVzaWFuKSk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZGlzdGFuY2UobGVmdDogVmVjdG9yMiwgcmlnaHQ6IFZlY3RvcjIpOiBudW1iZXIge1xyXG5cdFx0VmVjdG9yMi5zdWJ0cmFjdChsZWZ0LCByaWdodCwgZGlzdGFuY2VTY3JhdGNoKTtcclxuXHRcdHJldHVybiBWZWN0b3IyLm1hZ25pdHVkZShkaXN0YW5jZVNjcmF0Y2gpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRpc3RhbmNlU3F1YXJlZChsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMik6IG51bWJlciB7XHJcblx0XHRWZWN0b3IyLnN1YnRyYWN0KGxlZnQsIHJpZ2h0LCBkaXN0YW5jZVNjcmF0Y2gpO1xyXG5cdFx0cmV0dXJuIFZlY3RvcjIubWFnbml0dWRlU3F1YXJlZChkaXN0YW5jZVNjcmF0Y2gpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG5vcm1hbGl6ZShjYXJ0ZXNpYW46IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0Y29uc3QgbWFnbml0dWRlID0gVmVjdG9yMi5tYWduaXR1ZGUoY2FydGVzaWFuKTtcclxuXHJcblx0XHRyZXN1bHQueCA9IGNhcnRlc2lhbi54IC8gbWFnbml0dWRlO1xyXG5cdFx0cmVzdWx0LnkgPSBjYXJ0ZXNpYW4ueSAvIG1hZ25pdHVkZTtcclxuXHJcblx0XHQvLyA+PmluY2x1ZGVTdGFydCgnZGVidWcnLCBwcmFnbWFzLmRlYnVnKTtcclxuXHRcdGlmIChpc05hTihyZXN1bHQueCkgfHwgaXNOYU4ocmVzdWx0LnkpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vcm1hbGl6ZWQgcmVzdWx0IGlzIG5vdCBhIG51bWJlclwiKTtcclxuXHRcdH1cclxuXHRcdC8vID4+aW5jbHVkZUVuZCgnZGVidWcnKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRvdChsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gbGVmdC54ICogcmlnaHQueCArIGxlZnQueSAqIHJpZ2h0Lnk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY3Jvc3MobGVmdDogVmVjdG9yMiwgcmlnaHQ6IFZlY3RvcjIpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIGxlZnQueCAqIHJpZ2h0LnkgLSBsZWZ0LnkgKiByaWdodC54O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5Q29tcG9uZW50cyhsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMiwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCAqIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSAqIHJpZ2h0Lnk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRpdmlkZUNvbXBvbmVudHMobGVmdDogVmVjdG9yMiwgcmlnaHQ6IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0cmVzdWx0LnggPSBsZWZ0LnggLyByaWdodC54O1xyXG5cdFx0cmVzdWx0LnkgPSBsZWZ0LnkgLyByaWdodC55O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhZGQobGVmdDogVmVjdG9yMiwgcmlnaHQ6IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0cmVzdWx0LnggPSBsZWZ0LnggKyByaWdodC54O1xyXG5cdFx0cmVzdWx0LnkgPSBsZWZ0LnkgKyByaWdodC55O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzdWJ0cmFjdChsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMiwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCAtIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSAtIHJpZ2h0Lnk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlTY2FsYXIoY2FydGVzaWFuOiBWZWN0b3IyLCBzY2FsYXI6IG51bWJlciwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRyZXN1bHQueCA9IGNhcnRlc2lhbi54ICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnkgPSBjYXJ0ZXNpYW4ueSAqIHNjYWxhcjtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZGl2aWRlQnlTY2FsYXIoY2FydGVzaWFuOiBWZWN0b3IyLCBzY2FsYXI6IG51bWJlciwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRyZXN1bHQueCA9IGNhcnRlc2lhbi54IC8gc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnkgPSBjYXJ0ZXNpYW4ueSAvIHNjYWxhcjtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbmVnYXRlKGNhcnRlc2lhbjogVmVjdG9yMiwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRyZXN1bHQueCA9IC1jYXJ0ZXNpYW4ueDtcclxuXHRcdHJlc3VsdC55ID0gLWNhcnRlc2lhbi55O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhYnMoY2FydGVzaWFuOiBWZWN0b3IyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdHJlc3VsdC54ID0gTWF0aC5hYnMoY2FydGVzaWFuLngpO1xyXG5cdFx0cmVzdWx0LnkgPSBNYXRoLmFicyhjYXJ0ZXNpYW4ueSk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGxlcnAoc3RhcnQ6IFZlY3RvcjIsIGVuZDogVmVjdG9yMiwgdDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdFZlY3RvcjIubXVsdGlwbHlCeVNjYWxhcihlbmQsIHQsIGxlcnBTY3JhdGNoKTtcclxuXHRcdHJlc3VsdCA9IFZlY3RvcjIubXVsdGlwbHlCeVNjYWxhcihzdGFydCwgMS4wIC0gdCwgcmVzdWx0KTtcclxuXHRcdHJldHVybiBWZWN0b3IyLmFkZChsZXJwU2NyYXRjaCwgcmVzdWx0LCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFuZ2xlQmV0d2VlbihsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMik6IG51bWJlciB7XHJcblx0XHRWZWN0b3IyLm5vcm1hbGl6ZShsZWZ0LCBhbmdsZUJldHdlZW5TY3JhdGNoKTtcclxuXHRcdFZlY3RvcjIubm9ybWFsaXplKHJpZ2h0LCBhbmdsZUJldHdlZW5TY3JhdGNoMik7XHJcblx0XHRyZXR1cm4gR01hdGguYWNvc0NsYW1wZWQoVmVjdG9yMi5kb3QoYW5nbGVCZXR3ZWVuU2NyYXRjaCwgYW5nbGVCZXR3ZWVuU2NyYXRjaDIpKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtb3N0T3J0aG9nb25hbEF4aXMoY2FydGVzaWFuOiBWZWN0b3IyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdGNvbnN0IGYgPSBWZWN0b3IyLm5vcm1hbGl6ZShjYXJ0ZXNpYW4sIG1vc3RPcnRob2dvbmFsQXhpc1NjcmF0Y2gpO1xyXG5cdFx0VmVjdG9yMi5hYnMoZiwgZik7XHJcblxyXG5cdFx0aWYgKGYueCA8PSBmLnkpIHtcclxuXHRcdFx0cmVzdWx0ID0gVmVjdG9yMi5jbG9uZShWZWN0b3IyLlVOSVRfWCwgcmVzdWx0KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJlc3VsdCA9IFZlY3RvcjIuY2xvbmUoVmVjdG9yMi5VTklUX1ksIHJlc3VsdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHMobGVmdDogVmVjdG9yMiwgcmlnaHQ6IFZlY3RvcjIpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBsZWZ0ID09PSByaWdodCB8fCAoZGVmaW5lZChsZWZ0KSAmJiBkZWZpbmVkKHJpZ2h0KSAmJiBsZWZ0LnggPT09IHJpZ2h0LnggJiYgbGVmdC55ID09PSByaWdodC55KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0c3RhdGljIGVxdWFsc0FycmF5KGNhcnRlc2lhbjogVmVjdG9yMiwgYXJyYXk6IG51bWJlcltdLCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIGNhcnRlc2lhbi54ID09PSBhcnJheVtvZmZzZXRdICYmIGNhcnRlc2lhbi55ID09PSBhcnJheVtvZmZzZXQgKyAxXTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHNFcHNpbG9uKGxlZnQ6IFZlY3RvcjIsIHJpZ2h0OiBWZWN0b3IyLCByZWxhdGl2ZUVwc2lsb24gPSAwLCBhYnNvbHV0ZUVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRsZWZ0ID09PSByaWdodCB8fFxyXG5cdFx0XHQoZGVmaW5lZChsZWZ0KSAmJlxyXG5cdFx0XHRcdGRlZmluZWQocmlnaHQpICYmXHJcblx0XHRcdFx0R01hdGguZXF1YWxzRXBzaWxvbihsZWZ0LngsIHJpZ2h0LngsIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKSAmJlxyXG5cdFx0XHRcdEdNYXRoLmVxdWFsc0Vwc2lsb24obGVmdC55LCByaWdodC55LCByZWxhdGl2ZUVwc2lsb24sIGFic29sdXRlRXBzaWxvbikpXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG5jb25zdCBkaXN0YW5jZVNjcmF0Y2ggPSBuZXcgVmVjdG9yMigpO1xyXG5jb25zdCBsZXJwU2NyYXRjaCA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IGFuZ2xlQmV0d2VlblNjcmF0Y2ggPSBuZXcgVmVjdG9yMigpO1xyXG5jb25zdCBhbmdsZUJldHdlZW5TY3JhdGNoMiA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IG1vc3RPcnRob2dvbmFsQXhpc1NjcmF0Y2ggPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yMjtcclxuIiwiaW1wb3J0IHsgQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IEdNYXRoIGZyb20gXCIuL01hdGhcIjtcclxuaW1wb3J0IE1hdHJpeDMgZnJvbSBcIi4vTWF0cml4M1wiO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tIFwiLi9NYXRyaXg0XCI7XHJcbmltcG9ydCB7IFF1YXRlcm5pb24gfSBmcm9tIFwiLi9RdWF0ZXJuaW9uXCI7XHJcbmltcG9ydCB7IFNwaGVyaWNhbCB9IGZyb20gXCIuL1NwaGVyaWNhbFwiO1xyXG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi9WZWN0b3I0XCI7XHJcbmNsYXNzIFZlY3RvcjMge1xyXG5cdHB1YmxpYyBzdGF0aWMgWkVSTyA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjMoMC4wLCAwLjAsIDAuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIE9ORSA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjMoMS4wLCAxLjAsIDEuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIFVOSVRfWCA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjMoMS4wLCAwLjAsIDAuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIFVOSVRfWSA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjMoMC4wLCAxLjAsIDAuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIFVOSVRfWiA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjMoMC4wLCAwLjAsIDEuMCkpO1xyXG5cdHg6IG51bWJlcjtcclxuXHR5OiBudW1iZXI7XHJcblx0ejogbnVtYmVyO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcih4ID0gMCwgeSA9IDAsIHogPSAwKSB7XHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHRoaXMueiA9IHo7XHJcblx0fVxyXG5cdHNldCh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKTogVmVjdG9yMyB7XHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHRoaXMueiA9IHo7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0dG9BcnJheSgpOiBudW1iZXJbXSB7XHJcblx0XHRyZXR1cm4gW3RoaXMueCwgdGhpcy55LCB0aGlzLnpdO1xyXG5cdH1cclxuXHJcblx0Y29weSh2OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHR0aGlzLnggPSB2Lng7XHJcblx0XHR0aGlzLnkgPSB2Lnk7XHJcblx0XHR0aGlzLnogPSB2Lno7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0bGVycChlbmQ6IFZlY3RvcjMsIHQ6IG51bWJlcik6IFZlY3RvcjMge1xyXG5cdFx0VmVjdG9yMy5sZXJwKHRoaXMsIGVuZCwgdCwgdGhpcyk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0YWRkKHY6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdFZlY3RvcjMuYWRkKHRoaXMsIHYsIHRoaXMpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdGFkZFNjYWxlZFZlY3Rvcih2OiBWZWN0b3IzLCBzOiBudW1iZXIpOiBWZWN0b3IzIHtcclxuXHRcdHRoaXMueCArPSB2LnggKiBzO1xyXG5cdFx0dGhpcy55ICs9IHYueSAqIHM7XHJcblx0XHR0aGlzLnogKz0gdi56ICogcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRzdWJ0cmFjdCh2OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRWZWN0b3IzLnN1YnRyYWN0KHRoaXMsIHYsIHRoaXMpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdGFwcGx5UXVhdGVybmlvbihxOiBRdWF0ZXJuaW9uKTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCB4ID0gdGhpcy54LFxyXG5cdFx0XHR5ID0gdGhpcy55LFxyXG5cdFx0XHR6ID0gdGhpcy56O1xyXG5cdFx0Y29uc3QgcXggPSBxLngsXHJcblx0XHRcdHF5ID0gcS55LFxyXG5cdFx0XHRxeiA9IHEueixcclxuXHRcdFx0cXcgPSBxLnc7XHJcblxyXG5cdFx0Ly8gY2FsY3VsYXRlIHF1YXQgKiB2ZWN0b3JcclxuXHJcblx0XHRjb25zdCBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeTtcclxuXHRcdGNvbnN0IGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6O1xyXG5cdFx0Y29uc3QgaXogPSBxdyAqIHogKyBxeCAqIHkgLSBxeSAqIHg7XHJcblx0XHRjb25zdCBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XHJcblxyXG5cdFx0Ly8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2UgcXVhdFxyXG5cclxuXHRcdHRoaXMueCA9IGl4ICogcXcgKyBpdyAqIC1xeCArIGl5ICogLXF6IC0gaXogKiAtcXk7XHJcblx0XHR0aGlzLnkgPSBpeSAqIHF3ICsgaXcgKiAtcXkgKyBpeiAqIC1xeCAtIGl4ICogLXF6O1xyXG5cdFx0dGhpcy56ID0gaXogKiBxdyArIGl3ICogLXF6ICsgaXggKiAtcXkgLSBpeSAqIC1xeDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0c2V0RnJvbU1hdHJpeENvbHVtbihtOiBNYXRyaXgzIHwgTWF0cml4NCwgaW5kZXg6IG51bWJlcik6IFZlY3RvcjMge1xyXG5cdFx0cmV0dXJuIHRoaXMuZnJvbUFycmF5KG0sIGluZGV4ICogNCk7XHJcblx0fVxyXG5cdGZyb21BcnJheShhcnJheTogTWF0cml4MyB8IE1hdHJpeDQsIG9mZnNldCA9IDApOiBWZWN0b3IzIHtcclxuXHRcdHRoaXMueCA9IGFycmF5W29mZnNldF07XHJcblx0XHR0aGlzLnkgPSBhcnJheVtvZmZzZXQgKyAxXTtcclxuXHRcdHRoaXMueiA9IGFycmF5W29mZnNldCArIDJdO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0bXVsdGlwbHlCeVNjYWxhcihzY2FsZTogbnVtYmVyKTogVmVjdG9yMyB7XHJcblx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIodGhpcywgc2NhbGUsIHRoaXMpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRjbG9uZSgpOiBWZWN0b3IzIHtcclxuXHRcdHJldHVybiBWZWN0b3IzLmNsb25lKHRoaXMsIG5ldyBWZWN0b3IzKCkpO1xyXG5cdH1cclxuXHRsZW5ndGgoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBNYXRoLnNxcnQodGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICsgdGhpcy56ICogdGhpcy56KTtcclxuXHR9XHJcblx0YXBwbHlNYXRyaXg0KG1hdHJpeDogTWF0cml4NCk6IFZlY3RvcjMge1xyXG5cdFx0Y29uc3QgeCA9IHRoaXMueCxcclxuXHRcdFx0eSA9IHRoaXMueSxcclxuXHRcdFx0eiA9IHRoaXMuejtcclxuXHRcdGNvbnN0IGUgPSBtYXRyaXg7XHJcblx0XHRjb25zdCB3ID0gMSAvIChlWzNdICogeCArIGVbN10gKiB5ICsgZVsxMV0gKiB6ICsgZVsxNV0pO1xyXG5cdFx0dGhpcy54ID0gKGVbMF0gKiB4ICsgZVs0XSAqIHkgKyBlWzhdICogeiArIGVbMTJdKSAqIHc7XHJcblx0XHR0aGlzLnkgPSAoZVsxXSAqIHggKyBlWzVdICogeSArIGVbOV0gKiB6ICsgZVsxM10pICogdztcclxuXHRcdHRoaXMueiA9IChlWzJdICogeCArIGVbNl0gKiB5ICsgZVsxMF0gKiB6ICsgZVsxNF0pICogdztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRhcHBseU1hdHJpeDMobWF0cml4OiBNYXRyaXgzKTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCB4ID0gdGhpcy54LFxyXG5cdFx0XHR5ID0gdGhpcy55LFxyXG5cdFx0XHR6ID0gdGhpcy56O1xyXG5cdFx0dGhpcy54ID0geCAqIG1hdHJpeFswXSArIHkgKiBtYXRyaXhbM10gKyB6ICogbWF0cml4WzZdO1xyXG5cdFx0dGhpcy55ID0geCAqIG1hdHJpeFsxXSArIHkgKiBtYXRyaXhbNF0gKyB6ICogbWF0cml4WzddO1xyXG5cdFx0dGhpcy56ID0geCAqIG1hdHJpeFsyXSArIHkgKiBtYXRyaXhbNV0gKyB6ICogbWF0cml4WzhdO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdHRyYW5zZm9ybURpcmVjdGlvbihtYXRyaXg6IE1hdHJpeDMgfCBNYXRyaXg0KTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCB4ID0gdGhpcy54LFxyXG5cdFx0XHR5ID0gdGhpcy55LFxyXG5cdFx0XHR6ID0gdGhpcy56O1xyXG5cdFx0Y29uc3QgZSA9IG1hdHJpeDtcclxuXHRcdHRoaXMueCA9IGVbMF0gKiB4ICsgZVs0XSAqIHkgKyBlWzhdICogejtcclxuXHRcdHRoaXMueSA9IGVbMV0gKiB4ICsgZVs1XSAqIHkgKyBlWzldICogejtcclxuXHRcdHRoaXMueiA9IGVbMl0gKiB4ICsgZVs2XSAqIHkgKyBlWzEwXSAqIHo7XHJcblx0XHRyZXR1cm4gdGhpcy5ub3JtYWxpemUoKTtcclxuXHR9XHJcblxyXG5cdHNldEZyb21NYXRyaXhQb3NpdGlvbihtYXRyaXg6IE1hdHJpeDQpIHtcclxuXHRcdGNvbnN0IGUgPSBtYXRyaXg7XHJcblxyXG5cdFx0dGhpcy54ID0gZVsxMl07XHJcblx0XHR0aGlzLnkgPSBlWzEzXTtcclxuXHRcdHRoaXMueiA9IGVbMTRdO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0bm9ybWFsaXplKCk6IFZlY3RvcjMge1xyXG5cdFx0VmVjdG9yMy5ub3JtYWxpemUodGhpcywgdGhpcyk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGVxdWFscyhyaWdodDogVmVjdG9yMyk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIFZlY3RvcjMuZXF1YWxzKHRoaXMsIHJpZ2h0KTtcclxuXHR9XHJcblxyXG5cdGVxdWFsc0Vwc2lsb24ocmlnaHQ6IFZlY3RvcjMsIHJlbGF0aXZlRXBzaWxvbiA9IDAsIGFic29sdXRlRXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBWZWN0b3IzLmVxdWFsc0Vwc2lsb24odGhpcywgcmlnaHQsIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKTtcclxuXHR9XHJcblxyXG5cdHRvU3RyaW5nKCkge1xyXG5cdFx0cmV0dXJuIGAoJHt0aGlzLnh9LCAke3RoaXMueX0sICR7dGhpcy56fSlgO1xyXG5cdH1cclxuXHRmcm9tQnVmZmVyQXR0cmlidXRlKGF0dHJpYnV0ZTogQXR0cmlidXRlLCBpbmRleDogbnVtYmVyKTogVmVjdG9yMyB7XHJcblx0XHR0aGlzLnggPSBhdHRyaWJ1dGUuZ2V0WChpbmRleCk7XHJcblx0XHR0aGlzLnkgPSBhdHRyaWJ1dGUuZ2V0WShpbmRleCk7XHJcblx0XHR0aGlzLnogPSBhdHRyaWJ1dGUuZ2V0WihpbmRleCk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0c3RhdGljIGZyb21WZWN0b3I0KHZlYzQ6IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSB2ZWM0Lng7XHJcblx0XHRyZXN1bHQueSA9IHZlYzQueTtcclxuXHRcdHJlc3VsdC56ID0gdmVjNC56O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tU3BoZXJpY2FsKHNwaGVyaWNhbDogU3BoZXJpY2FsLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJlc3VsdCA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHR9XHJcblx0XHRjb25zdCB7IHBoaSwgcmFkaXVzLCB0aGV0YSB9ID0gc3BoZXJpY2FsO1xyXG5cdFx0Y29uc3Qgc2luUGhpUmFkaXVzID0gTWF0aC5zaW4ocGhpKSAqIHJhZGl1cztcclxuXHRcdHJlc3VsdC54ID0gc2luUGhpUmFkaXVzICogTWF0aC5zaW4odGhldGEpO1xyXG5cdFx0cmVzdWx0LnkgPSBNYXRoLmNvcyhwaGkpICogcmFkaXVzO1xyXG5cdFx0cmVzdWx0LnogPSBzaW5QaGlSYWRpdXMgKiBNYXRoLmNvcyh0aGV0YSk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21FbGVtZW50cyh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yMyh4LCB5LCB6KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNsb25lKGNhcnRlc2lhbjogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKSk6IFZlY3RvcjMge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGNhcnRlc2lhbikpIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yMyhjYXJ0ZXNpYW4ueCwgY2FydGVzaWFuLnksIGNhcnRlc2lhbi56KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQueCA9IGNhcnRlc2lhbi54O1xyXG5cdFx0cmVzdWx0LnkgPSBjYXJ0ZXNpYW4ueTtcclxuXHRcdHJlc3VsdC56ID0gY2FydGVzaWFuLno7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1heGltdW1Db21wb25lbnQoY2FydGVzaWFuOiBWZWN0b3IzKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBNYXRoLm1heChjYXJ0ZXNpYW4ueCwgY2FydGVzaWFuLnksIGNhcnRlc2lhbi56KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtaW5pbXVtQ29tcG9uZW50KGNhcnRlc2lhbjogVmVjdG9yMyk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gTWF0aC5taW4oY2FydGVzaWFuLngsIGNhcnRlc2lhbi55LCBjYXJ0ZXNpYW4ueik7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWluaW11bUJ5Q29tcG9uZW50KGZpcnN0OiBWZWN0b3IzLCBzZWNvbmQ6IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSBNYXRoLm1pbihmaXJzdC54LCBzZWNvbmQueCk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGgubWluKGZpcnN0LnksIHNlY29uZC55KTtcclxuXHRcdHJlc3VsdC56ID0gTWF0aC5taW4oZmlyc3Queiwgc2Vjb25kLnopO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWF4aW11bUJ5Q29tcG9uZW50KGZpcnN0OiBWZWN0b3IzLCBzZWNvbmQ6IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSBNYXRoLm1heChmaXJzdC54LCBzZWNvbmQueCk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGgubWF4KGZpcnN0LnksIHNlY29uZC55KTtcclxuXHRcdHJlc3VsdC56ID0gTWF0aC5tYXgoZmlyc3Queiwgc2Vjb25kLnopO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjbGFtcCh2YWx1ZTogVmVjdG9yMywgbWluOiBWZWN0b3IzLCBtYXg6IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0Y29uc3QgeCA9IEdNYXRoLmNsYW1wKHZhbHVlLngsIG1pbi54LCBtYXgueCk7XHJcblx0XHRjb25zdCB5ID0gR01hdGguY2xhbXAodmFsdWUueSwgbWluLnksIG1heC55KTtcclxuXHRcdGNvbnN0IHogPSBHTWF0aC5jbGFtcCh2YWx1ZS56LCBtaW4ueiwgbWF4LnopO1xyXG5cclxuXHRcdHJlc3VsdC54ID0geDtcclxuXHRcdHJlc3VsdC55ID0geTtcclxuXHRcdHJlc3VsdC56ID0gejtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1hZ25pdHVkZVNxdWFyZWQoY2FydGVzaWFuOiBWZWN0b3IzKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBjYXJ0ZXNpYW4ueCAqIGNhcnRlc2lhbi54ICsgY2FydGVzaWFuLnkgKiBjYXJ0ZXNpYW4ueSArIGNhcnRlc2lhbi56ICogY2FydGVzaWFuLno7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWFnbml0dWRlKGNhcnRlc2lhbjogVmVjdG9yMyk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KFZlY3RvcjMubWFnbml0dWRlU3F1YXJlZChjYXJ0ZXNpYW4pKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXN0YW5jZShsZWZ0OiBWZWN0b3IzLCByaWdodDogVmVjdG9yMyk6IG51bWJlciB7XHJcblx0XHRWZWN0b3IzLnN1YnRyYWN0KGxlZnQsIHJpZ2h0LCBkaXN0YW5jZVNjcmF0Y2gpO1xyXG5cdFx0cmV0dXJuIFZlY3RvcjMubWFnbml0dWRlKGRpc3RhbmNlU2NyYXRjaCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZGlzdGFuY2VTcXVhcmVkKGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzKTogbnVtYmVyIHtcclxuXHRcdFZlY3RvcjMuc3VidHJhY3QobGVmdCwgcmlnaHQsIGRpc3RhbmNlU2NyYXRjaCk7XHJcblx0XHRyZXR1cm4gVmVjdG9yMy5tYWduaXR1ZGVTcXVhcmVkKGRpc3RhbmNlU2NyYXRjaCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbm9ybWFsaXplKGNhcnRlc2lhbjogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCBtYWduaXR1ZGUgPSBWZWN0b3IzLm1hZ25pdHVkZShjYXJ0ZXNpYW4pO1xyXG5cclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLnggLyBtYWduaXR1ZGU7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55IC8gbWFnbml0dWRlO1xyXG5cdFx0cmVzdWx0LnogPSBjYXJ0ZXNpYW4ueiAvIG1hZ25pdHVkZTtcclxuXHJcblx0XHRpZiAoaXNOYU4ocmVzdWx0LngpIHx8IGlzTmFOKHJlc3VsdC55KSB8fCBpc05hTihyZXN1bHQueikpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm9ybWFsaXplZCByZXN1bHQgaXMgbm90IGEgbnVtYmVyXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZG90KGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBsZWZ0LnggKiByaWdodC54ICsgbGVmdC55ICogcmlnaHQueSArIGxlZnQueiAqIHJpZ2h0Lno7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbXVsdGlwbHlDb21wb25lbnRzKGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHJlc3VsdC54ID0gbGVmdC54ICogcmlnaHQueDtcclxuXHRcdHJlc3VsdC55ID0gbGVmdC55ICogcmlnaHQueTtcclxuXHRcdHJlc3VsdC56ID0gbGVmdC56ICogcmlnaHQuejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZGl2aWRlQ29tcG9uZW50cyhsZWZ0OiBWZWN0b3IzLCByaWdodDogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKSB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCAvIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSAvIHJpZ2h0Lnk7XHJcblx0XHRyZXN1bHQueiA9IGxlZnQueiAvIHJpZ2h0Lno7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFkZChsZWZ0OiBWZWN0b3IzLCByaWdodDogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCArIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSArIHJpZ2h0Lnk7XHJcblx0XHRyZXN1bHQueiA9IGxlZnQueiArIHJpZ2h0Lno7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHN1YnRyYWN0KGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHJlc3VsdC54ID0gbGVmdC54IC0gcmlnaHQueDtcclxuXHRcdHJlc3VsdC55ID0gbGVmdC55IC0gcmlnaHQueTtcclxuXHRcdHJlc3VsdC56ID0gbGVmdC56IC0gcmlnaHQuejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbXVsdGlwbHlCeVNjYWxhcihjYXJ0ZXNpYW46IFZlY3RvcjMsIHNjYWxhcjogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLnggKiBzY2FsYXI7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55ICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnogPSBjYXJ0ZXNpYW4ueiAqIHNjYWxhcjtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZGl2aWRlQnlTY2FsYXIoY2FydGVzaWFuOiBWZWN0b3IzLCBzY2FsYXI6IG51bWJlciwgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRyZXN1bHQueCA9IGNhcnRlc2lhbi54IC8gc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnkgPSBjYXJ0ZXNpYW4ueSAvIHNjYWxhcjtcclxuXHRcdHJlc3VsdC56ID0gY2FydGVzaWFuLnogLyBzY2FsYXI7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG5lZ2F0ZShjYXJ0ZXNpYW46IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSAtY2FydGVzaWFuLng7XHJcblx0XHRyZXN1bHQueSA9IC1jYXJ0ZXNpYW4ueTtcclxuXHRcdHJlc3VsdC56ID0gLWNhcnRlc2lhbi56O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhYnMoY2FydGVzaWFuOiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHJlc3VsdC54ID0gTWF0aC5hYnMoY2FydGVzaWFuLngpO1xyXG5cdFx0cmVzdWx0LnkgPSBNYXRoLmFicyhjYXJ0ZXNpYW4ueSk7XHJcblx0XHRyZXN1bHQueiA9IE1hdGguYWJzKGNhcnRlc2lhbi56KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbGVycChzdGFydDogVmVjdG9yMywgZW5kOiBWZWN0b3IzLCB0OiBudW1iZXIsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGVuZCwgdCwgbGVycFNjcmF0Y2gpO1xyXG5cdFx0cmVzdWx0ID0gVmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKHN0YXJ0LCAxLjAgLSB0LCByZXN1bHQpO1xyXG5cdFx0cmV0dXJuIFZlY3RvcjMuYWRkKGxlcnBTY3JhdGNoLCByZXN1bHQsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYW5nbGVCZXR3ZWVuKGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzKTogbnVtYmVyIHtcclxuXHRcdFZlY3RvcjMubm9ybWFsaXplKGxlZnQsIGFuZ2xlQmV0d2VlblNjcmF0Y2gpO1xyXG5cdFx0VmVjdG9yMy5ub3JtYWxpemUocmlnaHQsIGFuZ2xlQmV0d2VlblNjcmF0Y2gyKTtcclxuXHRcdGNvbnN0IGNvc2luZSA9IFZlY3RvcjMuZG90KGFuZ2xlQmV0d2VlblNjcmF0Y2gsIGFuZ2xlQmV0d2VlblNjcmF0Y2gyKTtcclxuXHRcdGNvbnN0IHNpbmUgPSBWZWN0b3IzLm1hZ25pdHVkZShWZWN0b3IzLmNyb3NzKGFuZ2xlQmV0d2VlblNjcmF0Y2gsIGFuZ2xlQmV0d2VlblNjcmF0Y2gyLCBhbmdsZUJldHdlZW5TY3JhdGNoKSk7XHJcblx0XHRyZXR1cm4gTWF0aC5hdGFuMihzaW5lLCBjb3NpbmUpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1vc3RPcnRob2dvbmFsQXhpcyhjYXJ0ZXNpYW46IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0Y29uc3QgZiA9IFZlY3RvcjMubm9ybWFsaXplKGNhcnRlc2lhbiwgbW9zdE9ydGhvZ29uYWxBeGlzU2NyYXRjaCk7XHJcblx0XHRWZWN0b3IzLmFicyhmLCBmKTtcclxuXHJcblx0XHRpZiAoZi54IDw9IGYueSkge1xyXG5cdFx0XHRpZiAoZi54IDw9IGYueikge1xyXG5cdFx0XHRcdHJlc3VsdCA9IFZlY3RvcjMuY2xvbmUoVmVjdG9yMy5VTklUX1gsIHJlc3VsdCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmVzdWx0ID0gVmVjdG9yMy5jbG9uZShWZWN0b3IzLlVOSVRfWiwgcmVzdWx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChmLnkgPD0gZi56KSB7XHJcblx0XHRcdHJlc3VsdCA9IFZlY3RvcjMuY2xvbmUoVmVjdG9yMy5VTklUX1ksIHJlc3VsdCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXN1bHQgPSBWZWN0b3IzLmNsb25lKFZlY3RvcjMuVU5JVF9aLCByZXN1bHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgcHJvamVjdFZlY3RvcihhOiBWZWN0b3IzLCBiOiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IHNjYWxhciA9IFZlY3RvcjMuZG90KGEsIGIpIC8gVmVjdG9yMy5kb3QoYiwgYik7XHJcblx0XHRyZXR1cm4gVmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGIsIHNjYWxhciwgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHMobGVmdDogVmVjdG9yMywgcmlnaHQ6IFZlY3RvcjMpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGxlZnQgPT09IHJpZ2h0IHx8XHJcblx0XHRcdChkZWZpbmVkKGxlZnQpICYmIGRlZmluZWQocmlnaHQpICYmIGxlZnQueCA9PT0gcmlnaHQueCAmJiBsZWZ0LnkgPT09IHJpZ2h0LnkgJiYgbGVmdC56ID09PSByaWdodC56KVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0c3RhdGljIGVxdWFsc0FycmF5KGNhcnRlc2lhbjogVmVjdG9yMywgYXJyYXk6IG51bWJlcltdLCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIGNhcnRlc2lhbi54ID09PSBhcnJheVtvZmZzZXRdICYmIGNhcnRlc2lhbi55ID09PSBhcnJheVtvZmZzZXQgKyAxXSAmJiBjYXJ0ZXNpYW4ueiA9PT0gYXJyYXlbb2Zmc2V0ICsgMl07XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZXF1YWxzRXBzaWxvbihsZWZ0OiBWZWN0b3IzLCByaWdodDogVmVjdG9yMywgcmVsYXRpdmVFcHNpbG9uID0gMCwgYWJzb2x1dGVFcHNpbG9uID0gMCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdEdNYXRoLmVxdWFsc0Vwc2lsb24obGVmdC54LCByaWdodC54LCByZWxhdGl2ZUVwc2lsb24sIGFic29sdXRlRXBzaWxvbikgJiZcclxuXHRcdFx0XHRHTWF0aC5lcXVhbHNFcHNpbG9uKGxlZnQueSwgcmlnaHQueSwgcmVsYXRpdmVFcHNpbG9uLCBhYnNvbHV0ZUVwc2lsb24pICYmXHJcblx0XHRcdFx0R01hdGguZXF1YWxzRXBzaWxvbihsZWZ0LnosIHJpZ2h0LnosIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY3Jvc3MobGVmdDogVmVjdG9yMywgcmlnaHQ6IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0Y29uc3QgbGVmdFggPSBsZWZ0Lng7XHJcblx0XHRjb25zdCBsZWZ0WSA9IGxlZnQueTtcclxuXHRcdGNvbnN0IGxlZnRaID0gbGVmdC56O1xyXG5cdFx0Y29uc3QgcmlnaHRYID0gcmlnaHQueDtcclxuXHRcdGNvbnN0IHJpZ2h0WSA9IHJpZ2h0Lnk7XHJcblx0XHRjb25zdCByaWdodFogPSByaWdodC56O1xyXG5cclxuXHRcdGNvbnN0IHggPSBsZWZ0WSAqIHJpZ2h0WiAtIGxlZnRaICogcmlnaHRZO1xyXG5cdFx0Y29uc3QgeSA9IGxlZnRaICogcmlnaHRYIC0gbGVmdFggKiByaWdodFo7XHJcblx0XHRjb25zdCB6ID0gbGVmdFggKiByaWdodFkgLSBsZWZ0WSAqIHJpZ2h0WDtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1pZHBvaW50ID0gZnVuY3Rpb24gKGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHJlc3VsdC54ID0gKGxlZnQueCArIHJpZ2h0LngpICogMC41O1xyXG5cdFx0cmVzdWx0LnkgPSAobGVmdC55ICsgcmlnaHQueSkgKiAwLjU7XHJcblx0XHRyZXN1bHQueiA9IChsZWZ0LnogKyByaWdodC56KSAqIDAuNTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH07XHJcbn1cclxuY29uc3QgZGlzdGFuY2VTY3JhdGNoID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3QgbGVycFNjcmF0Y2ggPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBhbmdsZUJldHdlZW5TY3JhdGNoID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3QgYW5nbGVCZXR3ZWVuU2NyYXRjaDIgPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBtb3N0T3J0aG9nb25hbEF4aXNTY3JhdGNoID0gbmV3IFZlY3RvcjMoKTtcclxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yMztcclxuIiwiaW1wb3J0IHsgVmVydGV4Rm9ybWF0IH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4uL21hdGgvVmVjdG9yMlwiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQXR0cmlidXRlIHtcclxuXHRwdWJsaWMgb2Zmc2V0OiBudW1iZXI7XHJcblx0cHVibGljIHNoYWRlckxvY2F0aW9uOiBudW1iZXI7XHJcblx0cHVibGljIHR5cGU6IHN0cmluZztcclxuXHRwdWJsaWMgZm9ybWF0OiBzdHJpbmc7XHJcblx0cHVibGljIGF0dHJpYnV0ZUJ5dGVTaXplOiBudW1iZXI7XHJcblx0cHVibGljIGF0dHJpYnV0ZVR5cGU6QXR0cmlidXRlVHlwZTtcclxuXHRwdWJsaWMgc3RhdGljIHYzID0gbmV3IFZlY3RvcjMoKTtcclxuXHRwdWJsaWMgc3RhdGljIHYyID0gbmV3IFZlY3RvcjIoKTtcclxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nLCBwdWJsaWMgdmFsdWU6IEFycmF5PG51bWJlcj4sIHB1YmxpYyBpdGVtU2l6ZTogbnVtYmVyKSB7XHJcblx0XHR0aGlzLm5hbWUgPSBuYW1lO1xyXG5cdFx0dGhpcy5vZmZzZXQgPSAwO1xyXG5cdFx0dGhpcy5zaGFkZXJMb2NhdGlvbiA9IDA7XHJcblx0XHR0aGlzLmF0dHJpYnV0ZVR5cGU9QXR0cmlidXRlVHlwZS5hdHRyaWJ1dGU7XHJcblx0fVxyXG5cdGdldEdQVUF0dHJpYnV0ZSgpOkFycmF5PEdQVUF0dHJpYnV0ZT4ge1xyXG5cdFx0cmV0dXJuIFt7XHJcblx0XHRcdHNoYWRlckxvY2F0aW9uOiB0aGlzLnNoYWRlckxvY2F0aW9uLFxyXG5cdFx0XHRmb3JtYXQ6IHRoaXMuZm9ybWF0LFxyXG5cdFx0XHRvZmZzZXQ6IHRoaXMub2Zmc2V0XHJcblx0XHR9XTtcclxuXHR9XHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXMudmFsdWUgPSBbXTtcclxuXHR9XHJcblx0YXBwbHlNYXRyaXgzKG1hdHJpeDMpIHtcclxuXHRcdGlmICh0aGlzLml0ZW1TaXplID09PSAyKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy52YWx1ZS5sZW5ndGggLyB0aGlzLml0ZW1TaXplOyBpIDwgbDsgaSsrKSB7XHJcblx0XHRcdFx0QXR0cmlidXRlLnYyLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcywgaSk7XHJcblx0XHRcdFx0QXR0cmlidXRlLnYyLmFwcGx5TWF0cml4MyhtYXRyaXgzKTtcclxuXHRcdFx0XHR0aGlzLnNldFhZKGksIEF0dHJpYnV0ZS52Mi54LCBBdHRyaWJ1dGUudjIueSk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAodGhpcy5pdGVtU2l6ZSA9PT0gMykge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMudmFsdWUubGVuZ3RoIC8gdGhpcy5pdGVtU2l6ZTsgaSA8IGw7IGkrKykge1xyXG5cdFx0XHRcdEF0dHJpYnV0ZS52My5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsIGkpO1xyXG5cdFx0XHRcdEF0dHJpYnV0ZS52My5hcHBseU1hdHJpeDMobWF0cml4Myk7XHJcblx0XHRcdFx0dGhpcy5zZXRYWVooaSwgQXR0cmlidXRlLnYzLngsIEF0dHJpYnV0ZS52My55LCBBdHRyaWJ1dGUudjMueik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRhcHBseU1hdHJpeDQobWF0cml4NCkge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnZhbHVlLmxlbmd0aCAvIHRoaXMuaXRlbVNpemU7IGkgPCBsOyBpKyspIHtcclxuXHRcdFx0QXR0cmlidXRlLnYzLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcywgaSk7XHJcblx0XHRcdEF0dHJpYnV0ZS52My5hcHBseU1hdHJpeDQobWF0cml4NCk7XHJcblx0XHRcdHRoaXMuc2V0WFlaKGksIEF0dHJpYnV0ZS52My54LCBBdHRyaWJ1dGUudjMueSwgQXR0cmlidXRlLnYzLnopO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdHNldFgoaW5kZXgsIHgpIHtcclxuXHRcdHRoaXMudmFsdWVbaW5kZXggKiB0aGlzLml0ZW1TaXplXSA9IHg7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0Z2V0WChpbmRleCkge1xyXG5cdFx0Y29uc3QgeCA9IHRoaXMudmFsdWVbaW5kZXggKiB0aGlzLml0ZW1TaXplXTtcclxuXHRcdHJldHVybiB4O1xyXG5cdH1cclxuXHRzZXRZKGluZGV4LCB5KSB7XHJcblx0XHR0aGlzLnZhbHVlW2luZGV4ICogdGhpcy5pdGVtU2l6ZSArIDFdID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRnZXRZKGluZGV4KSB7XHJcblx0XHRjb25zdCB5ID0gdGhpcy52YWx1ZVtpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAxXTtcclxuXHRcdHJldHVybiB5O1xyXG5cdH1cclxuXHRzZXRaKGluZGV4LCB6KSB7XHJcblx0XHR0aGlzLnZhbHVlW2luZGV4ICogdGhpcy5pdGVtU2l6ZSArIDJdID0gejtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRnZXRaKGluZGV4KSB7XHJcblx0XHRjb25zdCB6ID0gdGhpcy52YWx1ZVtpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAyXTtcclxuXHRcdHJldHVybiB6O1xyXG5cdH1cclxuXHRnZXRXKGluZGV4KSB7XHJcblx0XHRjb25zdCB3ID0gdGhpcy52YWx1ZVtpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAzXTtcclxuXHRcdHJldHVybiB3O1xyXG5cdH1cclxuXHRzZXRYWShpbmRleCwgeCwgeSkge1xyXG5cdFx0aW5kZXggKj0gdGhpcy5pdGVtU2l6ZTtcclxuXHRcdHRoaXMudmFsdWVbaW5kZXggKyAwXSA9IHg7XHJcblx0XHR0aGlzLnZhbHVlW2luZGV4ICsgMV0gPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdHNldFhZWihpbmRleCwgeCwgeSwgeikge1xyXG5cdFx0aW5kZXggKj0gdGhpcy5pdGVtU2l6ZTtcclxuXHRcdHRoaXMudmFsdWVbaW5kZXggKyAwXSA9IHg7XHJcblx0XHR0aGlzLnZhbHVlW2luZGV4ICsgMV0gPSB5O1xyXG5cdFx0dGhpcy52YWx1ZVtpbmRleCArIDJdID0gejtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRzZXRYWVpXKGluZGV4LCB4LCB5LCB6LCB3KSB7XHJcblx0XHRpbmRleCAqPSB0aGlzLml0ZW1TaXplO1xyXG5cdFx0dGhpcy52YWx1ZVtpbmRleCArIDBdID0geDtcclxuXHRcdHRoaXMudmFsdWVbaW5kZXggKyAxXSA9IHk7XHJcblx0XHR0aGlzLnZhbHVlW2luZGV4ICsgMl0gPSB6O1xyXG5cdFx0dGhpcy52YWx1ZVtpbmRleCArIDNdID0gdztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgSW50ZXJsZWF2ZWRBdHRyaWJ1dGUge1xyXG5cdHB1YmxpYyBuYW1lczpzdHJpbmdbXTtcclxuXHRwdWJsaWMgdmFsdWU6QXJyYXk8bnVtYmVyPjtcclxuXHRwdWJsaWMgaXRlbVNpemVzOm51bWJlcltdO1xyXG5cdHB1YmxpYyBmb3JtYXQ6IHN0cmluZztcclxuXHRwdWJsaWMgYnl0ZVNpemU6bnVtYmVyO1xyXG5cdHB1YmxpYyBhdHRyaWJ1dGVUeXBlOkF0dHJpYnV0ZVR5cGU7XHJcblx0Y29uc3RydWN0b3IobmFtZXM6IHN0cmluZ1tdLCB2YWx1ZTogQXJyYXk8bnVtYmVyPiwgaXRlbVNpemVzOiBudW1iZXJbXSl7XHJcbiAgICAgIHRoaXMubmFtZXM9bmFtZXM7XHJcblx0XHRcdHRoaXMuaXRlbVNpemVzPWl0ZW1TaXplcztcclxuXHRcdFx0dGhpcy52YWx1ZT12YWx1ZTtcclxuXHRcdFx0dGhpcy5hdHRyaWJ1dGVUeXBlPUF0dHJpYnV0ZVR5cGUuaW50ZXJsZWF2ZWRBdHRyaWJ1dGU7XHJcblx0fVxyXG5cdGdldEdQVUF0dHJpYnV0ZSgpOkFycmF5PEdQVUF0dHJpYnV0ZT57XHJcblx0XHRjb25zdCByZXN1bHQ9W107XHJcbiAgICB0aGlzLml0ZW1TaXplcy5yZWR1Y2UoKHRvdGFsLGN1cnJlbnQsaW5kZXgpPT57XHJcblx0XHRcdHJlc3VsdC5wdXNoKHtcclxuXHRcdFx0XHRzaGFkZXJMb2NhdGlvbjogaW5kZXgsXHJcblx0XHRcdFx0Zm9ybWF0OiB0aGlzLmZvcm1hdCxcclxuXHRcdFx0XHRvZmZzZXQ6IHRvdGFsKnRoaXMuYnl0ZVNpemVcclxuXHRcdFx0fSlcclxuICAgICAgIHJldHVybiB0b3RhbCs9Y3VycmVudDtcclxuXHRcdH0sMCk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHRkZXN0cm95KCl7XHJcblx0XHR0aGlzLnZhbHVlPW51bGw7XHJcblx0XHR0aGlzLm5hbWVzPW51bGw7XHJcblx0XHR0aGlzLml0ZW1TaXplcz1udWxsO1xyXG5cdH1cclxuXHRcclxufVxyXG5leHBvcnQgY2xhc3MgRmxvYXQzMkF0dHJpYnV0ZSBleHRlbmRzIEF0dHJpYnV0ZSB7XHJcblx0Y29uc3RydWN0b3IobmFtZTogc3RyaW5nLCB2YWx1ZTogQXJyYXk8bnVtYmVyPiwgaXRlbVNpemU6IG51bWJlcikge1xyXG5cdFx0c3VwZXIobmFtZSwgdmFsdWUsIGl0ZW1TaXplKTtcclxuXHRcdGNvbnN0IHtmb3JtYXQsdG90YWxCeXRlU2l6ZX09Z2V0QXR0cmlidXRlRm9ybWF0KFZlcnRleEZvcm1hdC5GbG9hdDMyLCBpdGVtU2l6ZSk7XHJcblx0XHR0aGlzLmZvcm1hdCA9Zm9ybWF0IFxyXG5cdFx0dGhpcy5hdHRyaWJ1dGVCeXRlU2l6ZSA9IHRvdGFsQnl0ZVNpemU7XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBJbnRlcmxlYXZlZEZsb2F0MzJBdHRyaWJ1dGUgZXh0ZW5kcyBJbnRlcmxlYXZlZEF0dHJpYnV0ZXtcclxuXHRjb25zdHJ1Y3RvcihuYW1lczogc3RyaW5nW10sIHZhbHVlOiBBcnJheTxudW1iZXI+LCBpdGVtU2l6ZXM6IG51bWJlcltdKXtcclxuXHRcdHN1cGVyKG5hbWVzLHZhbHVlLGl0ZW1TaXplcyk7XHJcblx0XHR0aGlzLmZvcm1hdD1WZXJ0ZXhGb3JtYXQuRmxvYXQzMjtcclxuXHRcdHRoaXMuYnl0ZVNpemU9RmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO1xyXG5cdH1cclxufVxyXG5leHBvcnQgZW51bSBBdHRyaWJ1dGVUeXBlIHtcclxuXHRpbnRlcmxlYXZlZEF0dHJpYnV0ZT0wLFxyXG4gIGF0dHJpYnV0ZT0xXHJcbn1cclxuZXhwb3J0IHR5cGUgR1BVQXR0cmlidXRlPXtcclxuXHRzaGFkZXJMb2NhdGlvbjpudW1iZXIsXHJcblx0Zm9ybWF0OiBzdHJpbmcsXHJcblx0b2Zmc2V0Om51bWJlclxyXG59XHJcbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZUZvcm1hdCh0eXBlOiBzdHJpbmcsIGl0ZW1TaXplOiBudW1iZXIpIHtcclxuXHRjb25zdCBrZXkgPSBgJHt0eXBlfXgke2l0ZW1TaXplfWA7XHJcblx0cmV0dXJuIHtcclxuXHRcdFtWZXJ0ZXhGb3JtYXQuRmxvYXQzMl06e2Zvcm1hdDpcImZsb2F0MzJcIix0b3RhbEJ5dGVTaXplOkZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCppdGVtU2l6ZSxieXRlU2l6ZTpGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlR9LFxyXG5cdFx0W1ZlcnRleEZvcm1hdC5GbG9hdDMyeDJdOntmb3JtYXQ6XCJmbG9hdDMyeDJcIix0b3RhbEJ5dGVTaXplOkZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCppdGVtU2l6ZSxieXRlU2l6ZTpGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlR9LFxyXG5cdFx0W1ZlcnRleEZvcm1hdC5GbG9hdDMyeDNdOntmb3JtYXQ6XCJmbG9hdDMyeDNcIix0b3RhbEJ5dGVTaXplOkZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCppdGVtU2l6ZSxieXRlU2l6ZTpGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlR9LFxyXG5cdFx0W1ZlcnRleEZvcm1hdC5GbG9hdDMyeDRdOntmb3JtYXQ6XCJmbG9hdDMyeDRcIix0b3RhbEJ5dGVTaXplOkZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCppdGVtU2l6ZSxieXRlU2l6ZTpGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlR9LFxyXG5cdH1ba2V5XVxyXG59XHJcbiIsImltcG9ydCB7IEJpbmRHcm91cENhY2hlT3B0aW9ucyB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmNvbnN0IGJpbmRHcm91cENhY2hlID0gbmV3IE1hcCgpO1xyXG5jbGFzcyBCaW5kR3JvdXAge1xyXG5cdGRldmljZTogR1BVRGV2aWNlO1xyXG5cdGdwdUJpbmRHcm91cDogR1BVQmluZEdyb3VwO1xyXG5cdGxhYmVsOiBzdHJpbmc7XHJcblx0aW5kZXg6IG51bWJlcjtcclxuXHRkaXJ0eTogYm9vbGVhbjtcclxuXHRvZmZzZXQ/OiBudW1iZXI7XHJcblx0Ly8gY29uc3QgdW5pZm9ybUJ5dGVzID0gNSAqIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtcclxuXHQvLyBjb25zdCBhbGlnbmVkU2l6ZUJ5dGVzID0gTWF0aC5jZWlsKHVuaWZvcm1CeXRlcyAvIDI1NikgKiAyNTY7XHJcblx0Ly8gY29uc3QgYWxpZ25lZFNpemUgPWFsaWduZWRTaXplQnl0ZXMgLyBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7XHJcblx0YWxpZ25lZFNpemU/OiBudW1iZXI7XHJcblx0bWF4T2Zmc2V0PzogbnVtYmVyO1xyXG5cdGR5bmFtaWM/OiBib29sZWFuO1xyXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJpbmRHcm91cENhY2hlT3B0aW9ucykge1xyXG5cdFx0dGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXggfHwgMDtcclxuXHRcdHRoaXMub2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQgPz8gMDtcclxuXHRcdHRoaXMuYWxpZ25lZFNpemUgPSBvcHRpb25zLmFsaWduZWRTaXplID8/IDA7XHJcblx0XHR0aGlzLm1heE9mZnNldCA9IG9wdGlvbnMubWF4T2Zmc2V0ID8/IDA7XHJcblx0XHR0aGlzLmR5bmFtaWMgPSBvcHRpb25zLmR5bmFtaWMgPz8gZmFsc2U7XHJcblx0XHR0aGlzLmdwdUJpbmRHcm91cCA9IG9wdGlvbnMuZGV2aWNlLmNyZWF0ZUJpbmRHcm91cCh7XHJcblx0XHRcdGxhYmVsOiBvcHRpb25zLmxhYmVsLFxyXG5cdFx0XHRsYXlvdXQ6IG9wdGlvbnMubGF5b3V0LmdwdUJpbmRHcm91cExheW91dCxcclxuXHRcdFx0ZW50cmllczogb3B0aW9ucy5lbnRpcmVzLm1hcCgoZW50aXR5KSA9PiAoe1xyXG5cdFx0XHRcdGJpbmRpbmc6IGVudGl0eS5iaW5kaW5nLFxyXG5cdFx0XHRcdHJlc291cmNlOiBlbnRpdHkucmVzb3VyY2VcclxuXHRcdFx0fSkpXHJcblx0XHR9KTtcclxuXHR9XHJcblx0YmluZChwYXNzRW5jb2RlcjogR1BVUmVuZGVyUGFzc0VuY29kZXIpIHtcclxuXHRcdC8vIGR5bmFtaWMgdW5pZm9ybXMgbXVzdCBiaW5kIG11bHRpcGxlIHRpbWVzXHJcblx0XHRpZiAodGhpcy5keW5hbWljKSB7XHJcblx0XHRcdGNvbnN0IGR5bmFtaWNPZmZzZXRzID0gWzBdO1xyXG5cdFx0XHRkeW5hbWljT2Zmc2V0c1swXSA9IHRoaXMub2Zmc2V0ICogdGhpcy5hbGlnbmVkU2l6ZTtcclxuXHRcdFx0dGhpcy5vZmZzZXQgPSArK3RoaXMub2Zmc2V0IDwgdGhpcy5tYXhPZmZzZXQgPyB0aGlzLm9mZnNldCA6IDA7XHJcblx0XHRcdHBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCh0aGlzLmluZGV4LCB0aGlzLmdwdUJpbmRHcm91cCwgZHluYW1pY09mZnNldHMpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKHRoaXMuaW5kZXgsIHRoaXMuZ3B1QmluZEdyb3VwKTtcclxuXHRcdH1cclxuXHR9XHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXMuZ3B1QmluZEdyb3VwID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5kZXZpY2UgPSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cdHN0YXRpYyBnZXRCaW5kR3JvdXBGcm9tQ2FjaGUob3B0aW9uczogQmluZEdyb3VwQ2FjaGVPcHRpb25zKTogQmluZEdyb3VwIHtcclxuXHRcdGlmIChiaW5kR3JvdXBDYWNoZS5oYXMob3B0aW9ucy5sYWJlbCkpIHtcclxuXHRcdFx0cmV0dXJuIGJpbmRHcm91cENhY2hlLmdldChvcHRpb25zLmxhYmVsKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnN0IGJpbmRHcm91cCA9IG5ldyBCaW5kR3JvdXAob3B0aW9ucyk7XHJcblx0XHRcdGJpbmRHcm91cENhY2hlLnNldChvcHRpb25zLmxhYmVsLCBiaW5kR3JvdXApO1xyXG5cdFx0XHRyZXR1cm4gYmluZEdyb3VwO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRzdGF0aWMgcmVtb3ZlQmluZEdyb3VwRnJvbUNhY2hlKGJpbmRHcm91cDogQmluZEdyb3VwKSB7XHJcblx0XHRiaW5kR3JvdXBDYWNoZS5kZWxldGUoYmluZEdyb3VwKTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJpbmRHcm91cDtcclxuIiwiaW1wb3J0IHsgQmluZEdyb3VwRW50aXR5T3B0aW9ucyB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaW5kR3JvdXBFbnRpdHkge1xuXHRiaW5kaW5nOiBudW1iZXI7XG5cdHJlc291cmNlOiBHUFVCaW5kaW5nUmVzb3VyY2U7XG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJpbmRHcm91cEVudGl0eU9wdGlvbnMpIHtcblx0XHR0aGlzLmJpbmRpbmcgPSBvcHRpb25zLmJpbmRpbmc7XG5cdFx0dGhpcy5yZXNvdXJjZSA9IG9wdGlvbnMucmVzb3VyY2U7XG5cdH1cblx0cHVibGljIGdldEdQVUdyb3VwRW50aXR5KCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRiaW5kaW5nOiB0aGlzLmJpbmRpbmcsXG5cdFx0XHRyZXNvdXJjZTogdGhpcy5yZXNvdXJjZVxuXHRcdH07XG5cdH1cbn1cbiIsImltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xyXG5pbXBvcnQgZGVmaW5lZCBmcm9tIFwiLi4vdXRpbHMvZGVmaW5lZFwiO1xyXG5pbXBvcnQgR01hdGggZnJvbSBcIi4vTWF0aFwiO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tIFwiLi9NYXRyaXg0XCI7XHJcbmltcG9ydCB7IFF1YXRlcm5pb24gfSBmcm9tIFwiLi9RdWF0ZXJuaW9uXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuL1ZlY3RvcjNcIjtcclxuLyoqXHJcbiAqIEEgM3gzIG1hdHJpeCwgaW5kZXhhYmxlIGFzIGEgY29sdW1uLW1ham9yIG9yZGVyIGFycmF5LlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjBSb3cwPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMCwgcm93IDAuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMVJvdzA9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAxLCByb3cgMC5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4yUm93MD0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDIsIHJvdyAwLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjBSb3cxPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMCwgcm93IDEuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMVJvdzE9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAxLCByb3cgMS5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4yUm93MT0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDIsIHJvdyAxLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjBSb3cyPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMCwgcm93IDIuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMVJvdzI9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAxLCByb3cgMi5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4yUm93Mj0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDIsIHJvdyAyLlxyXG4gKi9cclxuY2xhc3MgTWF0cml4MyB7XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRjb2x1bW4wUm93MCA9IDAsXHJcblx0XHRjb2x1bW4xUm93MCA9IDAsXHJcblx0XHRjb2x1bW4yUm93MCA9IDAsXHJcblx0XHRjb2x1bW4wUm93MSA9IDAsXHJcblx0XHRjb2x1bW4xUm93MSA9IDAsXHJcblx0XHRjb2x1bW4yUm93MSA9IDAsXHJcblx0XHRjb2x1bW4wUm93MiA9IDAsXHJcblx0XHRjb2x1bW4xUm93MiA9IDAsXHJcblx0XHRjb2x1bW4yUm93MiA9IDBcclxuXHQpIHtcclxuXHRcdHRoaXNbMF0gPSBjb2x1bW4wUm93MDtcclxuXHRcdHRoaXNbMV0gPSBjb2x1bW4wUm93MTtcclxuXHRcdHRoaXNbMl0gPSBjb2x1bW4wUm93MjtcclxuXHRcdHRoaXNbM10gPSBjb2x1bW4xUm93MDtcclxuXHRcdHRoaXNbNF0gPSBjb2x1bW4xUm93MTtcclxuXHRcdHRoaXNbNV0gPSBjb2x1bW4xUm93MjtcclxuXHRcdHRoaXNbNl0gPSBjb2x1bW4yUm93MDtcclxuXHRcdHRoaXNbN10gPSBjb2x1bW4yUm93MTtcclxuXHRcdHRoaXNbOF0gPSBjb2x1bW4yUm93MjtcclxuXHR9XHJcblx0c2V0RnJvbU1hdHJpeDQobWF0cml4OiBNYXRyaXg0KTogTWF0cml4MyB7XHJcblx0XHR0aGlzWzBdID0gbWF0cml4WzBdO1xyXG5cdFx0dGhpc1sxXSA9IG1hdHJpeFsxXTtcclxuXHRcdHRoaXNbMl0gPSBtYXRyaXhbMl07XHJcblx0XHR0aGlzWzNdID0gbWF0cml4WzRdO1xyXG5cdFx0dGhpc1s0XSA9IG1hdHJpeFs1XTtcclxuXHRcdHRoaXNbNV0gPSBtYXRyaXhbMl07XHJcblx0XHR0aGlzWzZdID0gbWF0cml4WzhdO1xyXG5cdFx0dGhpc1s3XSA9IG1hdHJpeFs5XTtcclxuXHRcdHRoaXNbOF0gPSBtYXRyaXhbMTBdO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdGdldE5vcm1hbE1hdHJpeChtYXRyaXg0OiBNYXRyaXg0KTogTWF0cml4MyB7XHJcblx0XHR0aGlzLnNldEZyb21NYXRyaXg0KG1hdHJpeDQpO1xyXG5cdFx0TWF0cml4My5pbnZlcnNlKHRoaXMsIHRoaXMpO1xyXG5cdFx0TWF0cml4My50cmFuc3Bvc2UodGhpcywgdGhpcyk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjbG9uZShtYXRyaXg6IE1hdHJpeDMgfCBudW1iZXJbXSwgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRpZiAoIWRlZmluZWQobWF0cml4KSkge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBNYXRyaXgzKFxyXG5cdFx0XHRcdG1hdHJpeFswXSxcclxuXHRcdFx0XHRtYXRyaXhbM10sXHJcblx0XHRcdFx0bWF0cml4WzZdLFxyXG5cdFx0XHRcdG1hdHJpeFsxXSxcclxuXHRcdFx0XHRtYXRyaXhbNF0sXHJcblx0XHRcdFx0bWF0cml4WzddLFxyXG5cdFx0XHRcdG1hdHJpeFsyXSxcclxuXHRcdFx0XHRtYXRyaXhbNV0sXHJcblx0XHRcdFx0bWF0cml4WzhdXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF07XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV07XHJcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl07XHJcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XHJcblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF07XHJcblx0XHRyZXN1bHRbNV0gPSBtYXRyaXhbNV07XHJcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXhbNl07XHJcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN107XHJcblx0XHRyZXN1bHRbOF0gPSBtYXRyaXhbOF07XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Db2x1bW5NYWpvckFycmF5KHZhbHVlczogQXJyYXk8bnVtYmVyPiwgcmVzdWx0PzogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmVzdWx0ID0gbmV3IE1hdHJpeDMoKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBNYXRyaXgzLmNsb25lKHZhbHVlcywgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tUm93TWFqb3JBcnJheSh2YWx1ZXM6IEFycmF5PG51bWJlcj4sIHJlc3VsdD86IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgTWF0cml4MyhcclxuXHRcdFx0XHR2YWx1ZXNbMF0sXHJcblx0XHRcdFx0dmFsdWVzWzFdLFxyXG5cdFx0XHRcdHZhbHVlc1syXSxcclxuXHRcdFx0XHR2YWx1ZXNbM10sXHJcblx0XHRcdFx0dmFsdWVzWzRdLFxyXG5cdFx0XHRcdHZhbHVlc1s1XSxcclxuXHRcdFx0XHR2YWx1ZXNbNl0sXHJcblx0XHRcdFx0dmFsdWVzWzddLFxyXG5cdFx0XHRcdHZhbHVlc1s4XVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdFx0cmVzdWx0WzBdID0gdmFsdWVzWzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gdmFsdWVzWzNdO1xyXG5cdFx0cmVzdWx0WzJdID0gdmFsdWVzWzZdO1xyXG5cdFx0cmVzdWx0WzNdID0gdmFsdWVzWzFdO1xyXG5cdFx0cmVzdWx0WzRdID0gdmFsdWVzWzRdO1xyXG5cdFx0cmVzdWx0WzVdID0gdmFsdWVzWzddO1xyXG5cdFx0cmVzdWx0WzZdID0gdmFsdWVzWzJdO1xyXG5cdFx0cmVzdWx0WzddID0gdmFsdWVzWzVdO1xyXG5cdFx0cmVzdWx0WzhdID0gdmFsdWVzWzhdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tUXVhdGVybmlvbihxdWF0ZXJuaW9uOiBRdWF0ZXJuaW9uLCByZXN1bHQ/OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRjb25zdCB4MiA9IHF1YXRlcm5pb24ueCAqIHF1YXRlcm5pb24ueDtcclxuXHRcdGNvbnN0IHh5ID0gcXVhdGVybmlvbi54ICogcXVhdGVybmlvbi55O1xyXG5cdFx0Y29uc3QgeHogPSBxdWF0ZXJuaW9uLnggKiBxdWF0ZXJuaW9uLno7XHJcblx0XHRjb25zdCB4dyA9IHF1YXRlcm5pb24ueCAqIHF1YXRlcm5pb24udztcclxuXHRcdGNvbnN0IHkyID0gcXVhdGVybmlvbi55ICogcXVhdGVybmlvbi55O1xyXG5cdFx0Y29uc3QgeXogPSBxdWF0ZXJuaW9uLnkgKiBxdWF0ZXJuaW9uLno7XHJcblx0XHRjb25zdCB5dyA9IHF1YXRlcm5pb24ueSAqIHF1YXRlcm5pb24udztcclxuXHRcdGNvbnN0IHoyID0gcXVhdGVybmlvbi56ICogcXVhdGVybmlvbi56O1xyXG5cdFx0Y29uc3QgencgPSBxdWF0ZXJuaW9uLnogKiBxdWF0ZXJuaW9uLnc7XHJcblx0XHRjb25zdCB3MiA9IHF1YXRlcm5pb24udyAqIHF1YXRlcm5pb24udztcclxuXHJcblx0XHRjb25zdCBtMDAgPSB4MiAtIHkyIC0gejIgKyB3MjtcclxuXHRcdGNvbnN0IG0wMSA9IDIuMCAqICh4eSAtIHp3KTtcclxuXHRcdGNvbnN0IG0wMiA9IDIuMCAqICh4eiArIHl3KTtcclxuXHJcblx0XHRjb25zdCBtMTAgPSAyLjAgKiAoeHkgKyB6dyk7XHJcblx0XHRjb25zdCBtMTEgPSAteDIgKyB5MiAtIHoyICsgdzI7XHJcblx0XHRjb25zdCBtMTIgPSAyLjAgKiAoeXogLSB4dyk7XHJcblxyXG5cdFx0Y29uc3QgbTIwID0gMi4wICogKHh6IC0geXcpO1xyXG5cdFx0Y29uc3QgbTIxID0gMi4wICogKHl6ICsgeHcpO1xyXG5cdFx0Y29uc3QgbTIyID0gLXgyIC0geTIgKyB6MiArIHcyO1xyXG5cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgTWF0cml4MyhtMDAsIG0wMSwgbTAyLCBtMTAsIG0xMSwgbTEyLCBtMjAsIG0yMSwgbTIyKTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IG0wMDtcclxuXHRcdHJlc3VsdFsxXSA9IG0xMDtcclxuXHRcdHJlc3VsdFsyXSA9IG0yMDtcclxuXHRcdHJlc3VsdFszXSA9IG0wMTtcclxuXHRcdHJlc3VsdFs0XSA9IG0xMTtcclxuXHRcdHJlc3VsdFs1XSA9IG0yMTtcclxuXHRcdHJlc3VsdFs2XSA9IG0wMjtcclxuXHRcdHJlc3VsdFs3XSA9IG0xMjtcclxuXHRcdHJlc3VsdFs4XSA9IG0yMjtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVNjYWxlKHNjYWxlOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgTWF0cml4MyhzY2FsZS54LCAwLjAsIDAuMCwgMC4wLCBzY2FsZS55LCAwLjAsIDAuMCwgMC4wLCBzY2FsZS56KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHRbMF0gPSBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzFdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzJdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzNdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzRdID0gc2NhbGUueTtcclxuXHRcdHJlc3VsdFs1XSA9IDAuMDtcclxuXHRcdHJlc3VsdFs2XSA9IDAuMDtcclxuXHRcdHJlc3VsdFs3XSA9IDAuMDtcclxuXHRcdHJlc3VsdFs4XSA9IHNjYWxlLno7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Sb3RhdGlvblgoYW5nbGU6IG51bWJlciwgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRjb25zdCBjb3NBbmdsZSA9IE1hdGguY29zKGFuZ2xlKTtcclxuXHRcdGNvbnN0IHNpbkFuZ2xlID0gTWF0aC5zaW4oYW5nbGUpO1xyXG5cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgTWF0cml4MygxLjAsIDAuMCwgMC4wLCAwLjAsIGNvc0FuZ2xlLCAtc2luQW5nbGUsIDAuMCwgc2luQW5nbGUsIGNvc0FuZ2xlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHRbMF0gPSAxLjA7XHJcblx0XHRyZXN1bHRbMV0gPSAwLjA7XHJcblx0XHRyZXN1bHRbMl0gPSAwLjA7XHJcblx0XHRyZXN1bHRbM10gPSAwLjA7XHJcblx0XHRyZXN1bHRbNF0gPSBjb3NBbmdsZTtcclxuXHRcdHJlc3VsdFs1XSA9IHNpbkFuZ2xlO1xyXG5cdFx0cmVzdWx0WzZdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzddID0gLXNpbkFuZ2xlO1xyXG5cdFx0cmVzdWx0WzhdID0gY29zQW5nbGU7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tUm90YXRpb25ZKGFuZ2xlOiBudW1iZXIsIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0Y29uc3QgY29zQW5nbGUgPSBNYXRoLmNvcyhhbmdsZSk7XHJcblx0XHRjb25zdCBzaW5BbmdsZSA9IE1hdGguc2luKGFuZ2xlKTtcclxuXHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDMoY29zQW5nbGUsIDAuMCwgc2luQW5nbGUsIDAuMCwgMS4wLCAwLjAsIC1zaW5BbmdsZSwgMC4wLCBjb3NBbmdsZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gY29zQW5nbGU7XHJcblx0XHRyZXN1bHRbMV0gPSAwLjA7XHJcblx0XHRyZXN1bHRbMl0gPSAtc2luQW5nbGU7XHJcblx0XHRyZXN1bHRbM10gPSAwLjA7XHJcblx0XHRyZXN1bHRbNF0gPSAxLjA7XHJcblx0XHRyZXN1bHRbNV0gPSAwLjA7XHJcblx0XHRyZXN1bHRbNl0gPSBzaW5BbmdsZTtcclxuXHRcdHJlc3VsdFs3XSA9IDAuMDtcclxuXHRcdHJlc3VsdFs4XSA9IGNvc0FuZ2xlO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVJvdGF0aW9uWnN0YXRpYyhhbmdsZTogbnVtYmVyLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGNvbnN0IGNvc0FuZ2xlID0gTWF0aC5jb3MoYW5nbGUpO1xyXG5cdFx0Y29uc3Qgc2luQW5nbGUgPSBNYXRoLnNpbihhbmdsZSk7XHJcblxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBNYXRyaXgzKGNvc0FuZ2xlLCAtc2luQW5nbGUsIDAuMCwgc2luQW5nbGUsIGNvc0FuZ2xlLCAwLjAsIDAuMCwgMC4wLCAxLjApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdFswXSA9IGNvc0FuZ2xlO1xyXG5cdFx0cmVzdWx0WzFdID0gc2luQW5nbGU7XHJcblx0XHRyZXN1bHRbMl0gPSAwLjA7XHJcblx0XHRyZXN1bHRbM10gPSAtc2luQW5nbGU7XHJcblx0XHRyZXN1bHRbNF0gPSBjb3NBbmdsZTtcclxuXHRcdHJlc3VsdFs1XSA9IDAuMDtcclxuXHRcdHJlc3VsdFs2XSA9IDAuMDtcclxuXHRcdHJlc3VsdFs3XSA9IDAuMDtcclxuXHRcdHJlc3VsdFs4XSA9IDEuMDtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHR0b0FycmF5KCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XHJcblx0XHRNYXRyaXgzLnRvQXJyYXkodGhpcywgcmVzdWx0KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgdG9BcnJheShtYXRyaXg6IE1hdHJpeDMsIHJlc3VsdDogbnVtYmVyW10pOiBudW1iZXJbXSB7XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gW21hdHJpeFswXSwgbWF0cml4WzFdLCBtYXRyaXhbMl0sIG1hdHJpeFszXSwgbWF0cml4WzRdLCBtYXRyaXhbNV0sIG1hdHJpeFs2XSwgbWF0cml4WzddLCBtYXRyaXhbOF1dO1xyXG5cdFx0fVxyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdO1xyXG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzRdO1xyXG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdO1xyXG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdO1xyXG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddO1xyXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRFbGVtZW50SW5kZXgoY29sdW1uOiBudW1iZXIsIHJvdzogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBjb2x1bW4gKiAzICsgcm93O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldENvbHVtbihtYXRyaXg6IE1hdHJpeDMsIGluZGV4OiBudW1iZXIsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0Y29uc3Qgc3RhcnRJbmRleCA9IGluZGV4ICogMztcclxuXHRcdGNvbnN0IHggPSBtYXRyaXhbc3RhcnRJbmRleF07XHJcblx0XHRjb25zdCB5ID0gbWF0cml4W3N0YXJ0SW5kZXggKyAxXTtcclxuXHRcdGNvbnN0IHogPSBtYXRyaXhbc3RhcnRJbmRleCArIDJdO1xyXG5cclxuXHRcdHJlc3VsdC54ID0geDtcclxuXHRcdHJlc3VsdC55ID0geTtcclxuXHRcdHJlc3VsdC56ID0gejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc2V0Q29sdW1uKG1hdHJpeDogTWF0cml4MywgaW5kZXg6IG51bWJlciwgY2FydGVzaWFuOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdHJlc3VsdCA9IE1hdHJpeDMuY2xvbmUobWF0cml4LCByZXN1bHQpO1xyXG5cdFx0Y29uc3Qgc3RhcnRJbmRleCA9IGluZGV4ICogMztcclxuXHRcdHJlc3VsdFtzdGFydEluZGV4XSA9IGNhcnRlc2lhbi54O1xyXG5cdFx0cmVzdWx0W3N0YXJ0SW5kZXggKyAxXSA9IGNhcnRlc2lhbi55O1xyXG5cdFx0cmVzdWx0W3N0YXJ0SW5kZXggKyAyXSA9IGNhcnRlc2lhbi56O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRSb3cobWF0cml4OiBNYXRyaXgzLCBpbmRleDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IHggPSBtYXRyaXhbaW5kZXhdO1xyXG5cdFx0Y29uc3QgeSA9IG1hdHJpeFtpbmRleCArIDNdO1xyXG5cdFx0Y29uc3QgeiA9IG1hdHJpeFtpbmRleCArIDZdO1xyXG5cclxuXHRcdHJlc3VsdC54ID0geDtcclxuXHRcdHJlc3VsdC55ID0geTtcclxuXHRcdHJlc3VsdC56ID0gejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc2V0Um93KG1hdHJpeDogTWF0cml4MywgaW5kZXg6IG51bWJlciwgY2FydGVzaWFuOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdHJlc3VsdCA9IE1hdHJpeDMuY2xvbmUobWF0cml4LCByZXN1bHQpO1xyXG5cdFx0cmVzdWx0W2luZGV4XSA9IGNhcnRlc2lhbi54O1xyXG5cdFx0cmVzdWx0W2luZGV4ICsgM10gPSBjYXJ0ZXNpYW4ueTtcclxuXHRcdHJlc3VsdFtpbmRleCArIDZdID0gY2FydGVzaWFuLno7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHNldFNjYWxlKG1hdHJpeDogTWF0cml4Mywgc2NhbGU6IFZlY3RvcjMsIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0Y29uc3QgZXhpc3RpbmdTY2FsZSA9IE1hdHJpeDMuZ2V0U2NhbGUobWF0cml4LCBzY2FsZVNjcmF0Y2gxKTtcclxuXHRcdGNvbnN0IHNjYWxlUmF0aW9YID0gc2NhbGUueCAvIGV4aXN0aW5nU2NhbGUueDtcclxuXHRcdGNvbnN0IHNjYWxlUmF0aW9ZID0gc2NhbGUueSAvIGV4aXN0aW5nU2NhbGUueTtcclxuXHRcdGNvbnN0IHNjYWxlUmF0aW9aID0gc2NhbGUueiAvIGV4aXN0aW5nU2NhbGUuejtcclxuXHJcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF0gKiBzY2FsZVJhdGlvWDtcclxuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXSAqIHNjYWxlUmF0aW9YO1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdICogc2NhbGVSYXRpb1g7XHJcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM10gKiBzY2FsZVJhdGlvWTtcclxuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeFs0XSAqIHNjYWxlUmF0aW9ZO1xyXG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdICogc2NhbGVSYXRpb1k7XHJcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXhbNl0gKiBzY2FsZVJhdGlvWjtcclxuXHRcdHJlc3VsdFs3XSA9IG1hdHJpeFs3XSAqIHNjYWxlUmF0aW9aO1xyXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdICogc2NhbGVSYXRpb1o7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRTY2FsZShtYXRyaXg6IE1hdHJpeDMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSBWZWN0b3IzLm1hZ25pdHVkZShWZWN0b3IzLmZyb21FbGVtZW50cyhtYXRyaXhbMF0sIG1hdHJpeFsxXSwgbWF0cml4WzJdLCBzY3JhdGNoQ29sdW1uKSk7XHJcblx0XHRyZXN1bHQueSA9IFZlY3RvcjMubWFnbml0dWRlKFZlY3RvcjMuZnJvbUVsZW1lbnRzKG1hdHJpeFszXSwgbWF0cml4WzRdLCBtYXRyaXhbNV0sIHNjcmF0Y2hDb2x1bW4pKTtcclxuXHRcdHJlc3VsdC56ID0gVmVjdG9yMy5tYWduaXR1ZGUoVmVjdG9yMy5mcm9tRWxlbWVudHMobWF0cml4WzZdLCBtYXRyaXhbN10sIG1hdHJpeFs4XSwgc2NyYXRjaENvbHVtbikpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRNYXhpbXVtU2NhbGUobWF0cml4OiBNYXRyaXgzKTogbnVtYmVyIHtcclxuXHRcdE1hdHJpeDMuZ2V0U2NhbGUobWF0cml4LCBzY2FsZVNjcmF0Y2gzKTtcclxuXHRcdHJldHVybiBWZWN0b3IzLm1heGltdW1Db21wb25lbnQoc2NhbGVTY3JhdGNoMyk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc2V0Um90YXRpb24obWF0cml4OiBNYXRyaXgzLCByb3RhdGlvbjogTWF0cml4MywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRjb25zdCBzY2FsZSA9IE1hdHJpeDMuZ2V0U2NhbGUobWF0cml4LCBzY2FsZVNjcmF0Y2g0KTtcclxuXHJcblx0XHRyZXN1bHRbMF0gPSByb3RhdGlvblswXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMV0gPSByb3RhdGlvblsxXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMl0gPSByb3RhdGlvblsyXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbM10gPSByb3RhdGlvblszXSAqIHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbNF0gPSByb3RhdGlvbls0XSAqIHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbNV0gPSByb3RhdGlvbls1XSAqIHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbNl0gPSByb3RhdGlvbls2XSAqIHNjYWxlLno7XHJcblx0XHRyZXN1bHRbN10gPSByb3RhdGlvbls3XSAqIHNjYWxlLno7XHJcblx0XHRyZXN1bHRbOF0gPSByb3RhdGlvbls4XSAqIHNjYWxlLno7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRSb3RhdGlvbihtYXRyaXg6IE1hdHJpeDMsIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0Y29uc3Qgc2NhbGUgPSBNYXRyaXgzLmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoNSk7XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdIC8gc2NhbGUueDtcclxuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXSAvIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl0gLyBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdIC8gc2NhbGUueTtcclxuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeFs0XSAvIHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbNV0gPSBtYXRyaXhbNV0gLyBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdIC8gc2NhbGUuejtcclxuXHRcdHJlc3VsdFs3XSA9IG1hdHJpeFs3XSAvIHNjYWxlLno7XHJcblx0XHRyZXN1bHRbOF0gPSBtYXRyaXhbOF0gLyBzY2FsZS56O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbXVsdGlwbHkobGVmdDogTWF0cml4MywgcmlnaHQ6IE1hdHJpeDMsIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0Y29uc3QgY29sdW1uMFJvdzAgPSBsZWZ0WzBdICogcmlnaHRbMF0gKyBsZWZ0WzNdICogcmlnaHRbMV0gKyBsZWZ0WzZdICogcmlnaHRbMl07XHJcblx0XHRjb25zdCBjb2x1bW4wUm93MSA9IGxlZnRbMV0gKiByaWdodFswXSArIGxlZnRbNF0gKiByaWdodFsxXSArIGxlZnRbN10gKiByaWdodFsyXTtcclxuXHRcdGNvbnN0IGNvbHVtbjBSb3cyID0gbGVmdFsyXSAqIHJpZ2h0WzBdICsgbGVmdFs1XSAqIHJpZ2h0WzFdICsgbGVmdFs4XSAqIHJpZ2h0WzJdO1xyXG5cclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cwID0gbGVmdFswXSAqIHJpZ2h0WzNdICsgbGVmdFszXSAqIHJpZ2h0WzRdICsgbGVmdFs2XSAqIHJpZ2h0WzVdO1xyXG5cdFx0Y29uc3QgY29sdW1uMVJvdzEgPSBsZWZ0WzFdICogcmlnaHRbM10gKyBsZWZ0WzRdICogcmlnaHRbNF0gKyBsZWZ0WzddICogcmlnaHRbNV07XHJcblx0XHRjb25zdCBjb2x1bW4xUm93MiA9IGxlZnRbMl0gKiByaWdodFszXSArIGxlZnRbNV0gKiByaWdodFs0XSArIGxlZnRbOF0gKiByaWdodFs1XTtcclxuXHJcblx0XHRjb25zdCBjb2x1bW4yUm93MCA9IGxlZnRbMF0gKiByaWdodFs2XSArIGxlZnRbM10gKiByaWdodFs3XSArIGxlZnRbNl0gKiByaWdodFs4XTtcclxuXHRcdGNvbnN0IGNvbHVtbjJSb3cxID0gbGVmdFsxXSAqIHJpZ2h0WzZdICsgbGVmdFs0XSAqIHJpZ2h0WzddICsgbGVmdFs3XSAqIHJpZ2h0WzhdO1xyXG5cdFx0Y29uc3QgY29sdW1uMlJvdzIgPSBsZWZ0WzJdICogcmlnaHRbNl0gKyBsZWZ0WzVdICogcmlnaHRbN10gKyBsZWZ0WzhdICogcmlnaHRbOF07XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gY29sdW1uMFJvdzA7XHJcblx0XHRyZXN1bHRbMV0gPSBjb2x1bW4wUm93MTtcclxuXHRcdHJlc3VsdFsyXSA9IGNvbHVtbjBSb3cyO1xyXG5cdFx0cmVzdWx0WzNdID0gY29sdW1uMVJvdzA7XHJcblx0XHRyZXN1bHRbNF0gPSBjb2x1bW4xUm93MTtcclxuXHRcdHJlc3VsdFs1XSA9IGNvbHVtbjFSb3cyO1xyXG5cdFx0cmVzdWx0WzZdID0gY29sdW1uMlJvdzA7XHJcblx0XHRyZXN1bHRbN10gPSBjb2x1bW4yUm93MTtcclxuXHRcdHJlc3VsdFs4XSA9IGNvbHVtbjJSb3cyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhZGQobGVmdDogTWF0cml4MywgcmlnaHQ6IE1hdHJpeDMsIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0cmVzdWx0WzBdID0gbGVmdFswXSArIHJpZ2h0WzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gbGVmdFsxXSArIHJpZ2h0WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gbGVmdFsyXSArIHJpZ2h0WzJdO1xyXG5cdFx0cmVzdWx0WzNdID0gbGVmdFszXSArIHJpZ2h0WzNdO1xyXG5cdFx0cmVzdWx0WzRdID0gbGVmdFs0XSArIHJpZ2h0WzRdO1xyXG5cdFx0cmVzdWx0WzVdID0gbGVmdFs1XSArIHJpZ2h0WzVdO1xyXG5cdFx0cmVzdWx0WzZdID0gbGVmdFs2XSArIHJpZ2h0WzZdO1xyXG5cdFx0cmVzdWx0WzddID0gbGVmdFs3XSArIHJpZ2h0WzddO1xyXG5cdFx0cmVzdWx0WzhdID0gbGVmdFs4XSArIHJpZ2h0WzhdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzdWJ0cmFjdChsZWZ0OiBNYXRyaXgzLCByaWdodDogTWF0cml4MywgcmVzdWx0OiBNYXRyaXgzKSB7XHJcblx0XHRyZXN1bHRbMF0gPSBsZWZ0WzBdIC0gcmlnaHRbMF07XHJcblx0XHRyZXN1bHRbMV0gPSBsZWZ0WzFdIC0gcmlnaHRbMV07XHJcblx0XHRyZXN1bHRbMl0gPSBsZWZ0WzJdIC0gcmlnaHRbMl07XHJcblx0XHRyZXN1bHRbM10gPSBsZWZ0WzNdIC0gcmlnaHRbM107XHJcblx0XHRyZXN1bHRbNF0gPSBsZWZ0WzRdIC0gcmlnaHRbNF07XHJcblx0XHRyZXN1bHRbNV0gPSBsZWZ0WzVdIC0gcmlnaHRbNV07XHJcblx0XHRyZXN1bHRbNl0gPSBsZWZ0WzZdIC0gcmlnaHRbNl07XHJcblx0XHRyZXN1bHRbN10gPSBsZWZ0WzddIC0gcmlnaHRbN107XHJcblx0XHRyZXN1bHRbOF0gPSBsZWZ0WzhdIC0gcmlnaHRbOF07XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlWZWN0b3IobWF0cml4OiBNYXRyaXgzLCBjYXJ0ZXNpYW46IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0Y29uc3QgdlggPSBjYXJ0ZXNpYW4ueDtcclxuXHRcdGNvbnN0IHZZID0gY2FydGVzaWFuLnk7XHJcblx0XHRjb25zdCB2WiA9IGNhcnRlc2lhbi56O1xyXG5cclxuXHRcdGNvbnN0IHggPSBtYXRyaXhbMF0gKiB2WCArIG1hdHJpeFszXSAqIHZZICsgbWF0cml4WzZdICogdlo7XHJcblx0XHRjb25zdCB5ID0gbWF0cml4WzFdICogdlggKyBtYXRyaXhbNF0gKiB2WSArIG1hdHJpeFs3XSAqIHZaO1xyXG5cdFx0Y29uc3QgeiA9IG1hdHJpeFsyXSAqIHZYICsgbWF0cml4WzVdICogdlkgKyBtYXRyaXhbOF0gKiB2WjtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlTY2FsYXIobWF0cml4OiBNYXRyaXgzLCBzY2FsYXI6IG51bWJlciwgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF0gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl0gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM10gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF0gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbNV0gPSBtYXRyaXhbNV0gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXhbNl0gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN10gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbOF0gPSBtYXRyaXhbOF0gKiBzY2FsYXI7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlTY2FsZShtYXRyaXg6IE1hdHJpeDMsIHNjYWxlOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdICogc2NhbGUueDtcclxuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXSAqIHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF0gKiBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdICogc2NhbGUueTtcclxuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XSAqIHNjYWxlLno7XHJcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN10gKiBzY2FsZS56O1xyXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdICogc2NhbGUuejtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG5lZ2F0ZShtYXRyaXg6IE1hdHJpeDMsIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0cmVzdWx0WzBdID0gLW1hdHJpeFswXTtcclxuXHRcdHJlc3VsdFsxXSA9IC1tYXRyaXhbMV07XHJcblx0XHRyZXN1bHRbMl0gPSAtbWF0cml4WzJdO1xyXG5cdFx0cmVzdWx0WzNdID0gLW1hdHJpeFszXTtcclxuXHRcdHJlc3VsdFs0XSA9IC1tYXRyaXhbNF07XHJcblx0XHRyZXN1bHRbNV0gPSAtbWF0cml4WzVdO1xyXG5cdFx0cmVzdWx0WzZdID0gLW1hdHJpeFs2XTtcclxuXHRcdHJlc3VsdFs3XSA9IC1tYXRyaXhbN107XHJcblx0XHRyZXN1bHRbOF0gPSAtbWF0cml4WzhdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyB0cmFuc3Bvc2UobWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGNvbnN0IGNvbHVtbjBSb3cwID0gbWF0cml4WzBdO1xyXG5cdFx0Y29uc3QgY29sdW1uMFJvdzEgPSBtYXRyaXhbM107XHJcblx0XHRjb25zdCBjb2x1bW4wUm93MiA9IG1hdHJpeFs2XTtcclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cwID0gbWF0cml4WzFdO1xyXG5cdFx0Y29uc3QgY29sdW1uMVJvdzEgPSBtYXRyaXhbNF07XHJcblx0XHRjb25zdCBjb2x1bW4xUm93MiA9IG1hdHJpeFs3XTtcclxuXHRcdGNvbnN0IGNvbHVtbjJSb3cwID0gbWF0cml4WzJdO1xyXG5cdFx0Y29uc3QgY29sdW1uMlJvdzEgPSBtYXRyaXhbNV07XHJcblx0XHRjb25zdCBjb2x1bW4yUm93MiA9IG1hdHJpeFs4XTtcclxuXHJcblx0XHRyZXN1bHRbMF0gPSBjb2x1bW4wUm93MDtcclxuXHRcdHJlc3VsdFsxXSA9IGNvbHVtbjBSb3cxO1xyXG5cdFx0cmVzdWx0WzJdID0gY29sdW1uMFJvdzI7XHJcblx0XHRyZXN1bHRbM10gPSBjb2x1bW4xUm93MDtcclxuXHRcdHJlc3VsdFs0XSA9IGNvbHVtbjFSb3cxO1xyXG5cdFx0cmVzdWx0WzVdID0gY29sdW1uMVJvdzI7XHJcblx0XHRyZXN1bHRbNl0gPSBjb2x1bW4yUm93MDtcclxuXHRcdHJlc3VsdFs3XSA9IGNvbHVtbjJSb3cxO1xyXG5cdFx0cmVzdWx0WzhdID0gY29sdW1uMlJvdzI7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFicyhtYXRyaXg6IE1hdHJpeDMsIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0cmVzdWx0WzBdID0gTWF0aC5hYnMobWF0cml4WzBdKTtcclxuXHRcdHJlc3VsdFsxXSA9IE1hdGguYWJzKG1hdHJpeFsxXSk7XHJcblx0XHRyZXN1bHRbMl0gPSBNYXRoLmFicyhtYXRyaXhbMl0pO1xyXG5cdFx0cmVzdWx0WzNdID0gTWF0aC5hYnMobWF0cml4WzNdKTtcclxuXHRcdHJlc3VsdFs0XSA9IE1hdGguYWJzKG1hdHJpeFs0XSk7XHJcblx0XHRyZXN1bHRbNV0gPSBNYXRoLmFicyhtYXRyaXhbNV0pO1xyXG5cdFx0cmVzdWx0WzZdID0gTWF0aC5hYnMobWF0cml4WzZdKTtcclxuXHRcdHJlc3VsdFs3XSA9IE1hdGguYWJzKG1hdHJpeFs3XSk7XHJcblx0XHRyZXN1bHRbOF0gPSBNYXRoLmFicyhtYXRyaXhbOF0pO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZGV0ZXJtaW5hbnQobWF0cml4OiBNYXRyaXgzKTogbnVtYmVyIHtcclxuXHRcdGNvbnN0IG0xMSA9IG1hdHJpeFswXTtcclxuXHRcdGNvbnN0IG0yMSA9IG1hdHJpeFszXTtcclxuXHRcdGNvbnN0IG0zMSA9IG1hdHJpeFs2XTtcclxuXHRcdGNvbnN0IG0xMiA9IG1hdHJpeFsxXTtcclxuXHRcdGNvbnN0IG0yMiA9IG1hdHJpeFs0XTtcclxuXHRcdGNvbnN0IG0zMiA9IG1hdHJpeFs3XTtcclxuXHRcdGNvbnN0IG0xMyA9IG1hdHJpeFsyXTtcclxuXHRcdGNvbnN0IG0yMyA9IG1hdHJpeFs1XTtcclxuXHRcdGNvbnN0IG0zMyA9IG1hdHJpeFs4XTtcclxuXHJcblx0XHRyZXR1cm4gbTExICogKG0yMiAqIG0zMyAtIG0yMyAqIG0zMikgKyBtMTIgKiAobTIzICogbTMxIC0gbTIxICogbTMzKSArIG0xMyAqIChtMjEgKiBtMzIgLSBtMjIgKiBtMzEpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGludmVyc2UobWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGNvbnN0IG0xMSA9IG1hdHJpeFswXTtcclxuXHRcdGNvbnN0IG0yMSA9IG1hdHJpeFsxXTtcclxuXHRcdGNvbnN0IG0zMSA9IG1hdHJpeFsyXTtcclxuXHRcdGNvbnN0IG0xMiA9IG1hdHJpeFszXTtcclxuXHRcdGNvbnN0IG0yMiA9IG1hdHJpeFs0XTtcclxuXHRcdGNvbnN0IG0zMiA9IG1hdHJpeFs1XTtcclxuXHRcdGNvbnN0IG0xMyA9IG1hdHJpeFs2XTtcclxuXHRcdGNvbnN0IG0yMyA9IG1hdHJpeFs3XTtcclxuXHRcdGNvbnN0IG0zMyA9IG1hdHJpeFs4XTtcclxuXHJcblx0XHRjb25zdCBkZXRlcm1pbmFudCA9IE1hdHJpeDMuZGV0ZXJtaW5hbnQobWF0cml4KTtcclxuXHJcblx0XHQvLyA+PmluY2x1ZGVTdGFydCgnZGVidWcnLCBwcmFnbWFzLmRlYnVnKTtcclxuXHRcdGlmIChNYXRoLmFicyhkZXRlcm1pbmFudCkgPD0gR01hdGguRVBTSUxPTjE1KSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1hdHJpeCBpcyBub3QgaW52ZXJ0aWJsZVwiKTtcclxuXHRcdH1cclxuXHRcdC8vID4+aW5jbHVkZUVuZCgnZGVidWcnKTtcclxuXHJcblx0XHRyZXN1bHRbMF0gPSBtMjIgKiBtMzMgLSBtMjMgKiBtMzI7XHJcblx0XHRyZXN1bHRbMV0gPSBtMjMgKiBtMzEgLSBtMjEgKiBtMzM7XHJcblx0XHRyZXN1bHRbMl0gPSBtMjEgKiBtMzIgLSBtMjIgKiBtMzE7XHJcblx0XHRyZXN1bHRbM10gPSBtMTMgKiBtMzIgLSBtMTIgKiBtMzM7XHJcblx0XHRyZXN1bHRbNF0gPSBtMTEgKiBtMzMgLSBtMTMgKiBtMzE7XHJcblx0XHRyZXN1bHRbNV0gPSBtMTIgKiBtMzEgLSBtMTEgKiBtMzI7XHJcblx0XHRyZXN1bHRbNl0gPSBtMTIgKiBtMjMgLSBtMTMgKiBtMjI7XHJcblx0XHRyZXN1bHRbN10gPSBtMTMgKiBtMjEgLSBtMTEgKiBtMjM7XHJcblx0XHRyZXN1bHRbOF0gPSBtMTEgKiBtMjIgLSBtMTIgKiBtMjE7XHJcblxyXG5cdFx0Y29uc3Qgc2NhbGUgPSAxLjAgLyBkZXRlcm1pbmFudDtcclxuXHRcdHJldHVybiBNYXRyaXgzLm11bHRpcGx5QnlTY2FsYXIocmVzdWx0LCBzY2FsZSwgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBpbnZlcnNlVHJhbnNwb3NlKG1hdHJpeDogTWF0cml4MywgcmVzdWx0OiBNYXRyaXgzKSB7XHJcblx0XHRyZXR1cm4gTWF0cml4My5pbnZlcnNlKE1hdHJpeDMudHJhbnNwb3NlKG1hdHJpeCwgc2NyYXRjaFRyYW5zcG9zZU1hdHJpeCksIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZXF1YWxzKGxlZnQ6IE1hdHJpeDMsIHJpZ2h0OiBNYXRyaXgzKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRsZWZ0ID09PSByaWdodCB8fFxyXG5cdFx0XHQoZGVmaW5lZChsZWZ0KSAmJlxyXG5cdFx0XHRcdGRlZmluZWQocmlnaHQpICYmXHJcblx0XHRcdFx0bGVmdFswXSA9PT0gcmlnaHRbMF0gJiZcclxuXHRcdFx0XHRsZWZ0WzFdID09PSByaWdodFsxXSAmJlxyXG5cdFx0XHRcdGxlZnRbMl0gPT09IHJpZ2h0WzJdICYmXHJcblx0XHRcdFx0bGVmdFszXSA9PT0gcmlnaHRbM10gJiZcclxuXHRcdFx0XHRsZWZ0WzRdID09PSByaWdodFs0XSAmJlxyXG5cdFx0XHRcdGxlZnRbNV0gPT09IHJpZ2h0WzVdICYmXHJcblx0XHRcdFx0bGVmdFs2XSA9PT0gcmlnaHRbNl0gJiZcclxuXHRcdFx0XHRsZWZ0WzddID09PSByaWdodFs3XSAmJlxyXG5cdFx0XHRcdGxlZnRbOF0gPT09IHJpZ2h0WzhdKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHNFcHNpbG9uKGxlZnQ6IE1hdHJpeDMsIHJpZ2h0OiBNYXRyaXgzLCBlcHNpbG9uID0gMCk6IGJvb2xlYW4ge1xyXG5cdFx0ZXBzaWxvbiA9IGRlZmF1bHRWYWx1ZShlcHNpbG9uLCAwKTtcclxuXHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRsZWZ0ID09PSByaWdodCB8fFxyXG5cdFx0XHQoZGVmaW5lZChsZWZ0KSAmJlxyXG5cdFx0XHRcdGRlZmluZWQocmlnaHQpICYmXHJcblx0XHRcdFx0TWF0aC5hYnMobGVmdFswXSAtIHJpZ2h0WzBdKSA8PSBlcHNpbG9uICYmXHJcblx0XHRcdFx0TWF0aC5hYnMobGVmdFsxXSAtIHJpZ2h0WzFdKSA8PSBlcHNpbG9uICYmXHJcblx0XHRcdFx0TWF0aC5hYnMobGVmdFsyXSAtIHJpZ2h0WzJdKSA8PSBlcHNpbG9uICYmXHJcblx0XHRcdFx0TWF0aC5hYnMobGVmdFszXSAtIHJpZ2h0WzNdKSA8PSBlcHNpbG9uICYmXHJcblx0XHRcdFx0TWF0aC5hYnMobGVmdFs0XSAtIHJpZ2h0WzRdKSA8PSBlcHNpbG9uICYmXHJcblx0XHRcdFx0TWF0aC5hYnMobGVmdFs1XSAtIHJpZ2h0WzVdKSA8PSBlcHNpbG9uICYmXHJcblx0XHRcdFx0TWF0aC5hYnMobGVmdFs2XSAtIHJpZ2h0WzZdKSA8PSBlcHNpbG9uICYmXHJcblx0XHRcdFx0TWF0aC5hYnMobGVmdFs3XSAtIHJpZ2h0WzddKSA8PSBlcHNpbG9uICYmXHJcblx0XHRcdFx0TWF0aC5hYnMobGVmdFs4XSAtIHJpZ2h0WzhdKSA8PSBlcHNpbG9uKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBJREVOVElUWSA9IE9iamVjdC5mcmVlemUobmV3IE1hdHJpeDMoMS4wLCAwLjAsIDAuMCwgMC4wLCAxLjAsIDAuMCwgMC4wLCAwLjAsIDEuMCkpO1xyXG5cclxuXHRzdGF0aWMgWkVSTyA9IE9iamVjdC5mcmVlemUobmV3IE1hdHJpeDMoMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCkpO1xyXG5cclxuXHRjbG9uZShyZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdHJldHVybiBNYXRyaXgzLmNsb25lKHRoaXMsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRlcXVhbHMocmlnaHQ6IE1hdHJpeDMpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBNYXRyaXgzLmVxdWFscyh0aGlzLCByaWdodCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqL1xyXG5cdGVxdWFsc0FycmF5KG1hdHJpeDogTWF0cml4MyB8IG51bWJlcltdLCBhcnJheTogbnVtYmVyW10sIG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRtYXRyaXhbMF0gPT09IGFycmF5W29mZnNldF0gJiZcclxuXHRcdFx0bWF0cml4WzFdID09PSBhcnJheVtvZmZzZXQgKyAxXSAmJlxyXG5cdFx0XHRtYXRyaXhbMl0gPT09IGFycmF5W29mZnNldCArIDJdICYmXHJcblx0XHRcdG1hdHJpeFszXSA9PT0gYXJyYXlbb2Zmc2V0ICsgM10gJiZcclxuXHRcdFx0bWF0cml4WzRdID09PSBhcnJheVtvZmZzZXQgKyA0XSAmJlxyXG5cdFx0XHRtYXRyaXhbNV0gPT09IGFycmF5W29mZnNldCArIDVdICYmXHJcblx0XHRcdG1hdHJpeFs2XSA9PT0gYXJyYXlbb2Zmc2V0ICsgNl0gJiZcclxuXHRcdFx0bWF0cml4WzddID09PSBhcnJheVtvZmZzZXQgKyA3XSAmJlxyXG5cdFx0XHRtYXRyaXhbOF0gPT09IGFycmF5W29mZnNldCArIDhdXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ29tcGFyZXMgdGhpcyBtYXRyaXggdG8gdGhlIHByb3ZpZGVkIG1hdHJpeCBjb21wb25lbnR3aXNlIGFuZCByZXR1cm5zXHJcblx0ICogPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhleSBhcmUgd2l0aGluIHRoZSBwcm92aWRlZCBlcHNpbG9uLFxyXG5cdCAqIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge01hdHJpeDN9IFtyaWdodF0gVGhlIHJpZ2h0IGhhbmQgc2lkZSBtYXRyaXguXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtlcHNpbG9uPTBdIFRoZSBlcHNpbG9uIHRvIHVzZSBmb3IgZXF1YWxpdHkgdGVzdGluZy5cclxuXHQgKiBAcmV0dXJucyB7Qm9vbGVhbn0gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhleSBhcmUgd2l0aGluIHRoZSBwcm92aWRlZCBlcHNpbG9uLCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLlxyXG5cdCAqL1xyXG5cdGVxdWFsc0Vwc2lsb24ocmlnaHQsIGVwc2lsb24pIHtcclxuXHRcdHJldHVybiBNYXRyaXgzLmVxdWFsc0Vwc2lsb24odGhpcywgcmlnaHQsIGVwc2lsb24pO1xyXG5cdH1cclxuXHJcblx0dG9TdHJpbmcoKSB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRgKCR7dGhpc1swXX0sICR7dGhpc1szXX0sICR7dGhpc1s2XX0pXFxuYCArXHJcblx0XHRcdGAoJHt0aGlzWzFdfSwgJHt0aGlzWzRdfSwgJHt0aGlzWzddfSlcXG5gICtcclxuXHRcdFx0YCgke3RoaXNbMl19LCAke3RoaXNbNV19LCAke3RoaXNbOF19KWBcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcblxyXG5jb25zdCBzY2FsZVNjcmF0Y2gxID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3Qgc2NhbGVTY3JhdGNoMiA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHNjcmF0Y2hDb2x1bW4gPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBzY2FsZVNjcmF0Y2gzID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3Qgc2NhbGVTY3JhdGNoNCA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHNjYWxlU2NyYXRjaDUgPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuZnVuY3Rpb24gY29tcHV0ZUZyb2Jlbml1c05vcm0obWF0cml4KSB7XHJcblx0bGV0IG5vcm0gPSAwLjA7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCA5OyArK2kpIHtcclxuXHRcdGNvbnN0IHRlbXAgPSBtYXRyaXhbaV07XHJcblx0XHRub3JtICs9IHRlbXAgKiB0ZW1wO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIE1hdGguc3FydChub3JtKTtcclxufVxyXG5cclxuY29uc3Qgcm93VmFsID0gWzEsIDAsIDBdO1xyXG5jb25zdCBjb2xWYWwgPSBbMiwgMiwgMV07XHJcblxyXG5mdW5jdGlvbiBvZmZEaWFnb25hbEZyb2Jlbml1c05vcm0obWF0cml4KSB7XHJcblx0Ly8gQ29tcHV0ZXMgdGhlIFwib2ZmLWRpYWdvbmFsXCIgRnJvYmVuaXVzIG5vcm0uXHJcblx0Ly8gQXNzdW1lcyBtYXRyaXggaXMgc3ltbWV0cmljLlxyXG5cclxuXHRsZXQgbm9ybSA9IDAuMDtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IDM7ICsraSkge1xyXG5cdFx0Y29uc3QgdGVtcCA9IG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChjb2xWYWxbaV0sIHJvd1ZhbFtpXSldO1xyXG5cdFx0bm9ybSArPSAyLjAgKiB0ZW1wICogdGVtcDtcclxuXHR9XHJcblxyXG5cdHJldHVybiBNYXRoLnNxcnQobm9ybSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNodXJEZWNvbXBvc2l0aW9uKG1hdHJpeCwgcmVzdWx0KSB7XHJcblx0Ly8gVGhpcyByb3V0aW5lIHdhcyBjcmVhdGVkIGJhc2VkIHVwb24gTWF0cml4IENvbXB1dGF0aW9ucywgM3JkIGVkLiwgYnkgR29sdWIgYW5kIFZhbiBMb2FuLFxyXG5cdC8vIHNlY3Rpb24gOC40LjIgVGhlIDJieTIgU3ltbWV0cmljIFNjaHVyIERlY29tcG9zaXRpb24uXHJcblx0Ly9cclxuXHQvLyBUaGUgcm91dGluZSB0YWtlcyBhIG1hdHJpeCwgd2hpY2ggaXMgYXNzdW1lZCB0byBiZSBzeW1tZXRyaWMsIGFuZFxyXG5cdC8vIGZpbmRzIHRoZSBsYXJnZXN0IG9mZi1kaWFnb25hbCB0ZXJtLCBhbmQgdGhlbiBjcmVhdGVzXHJcblx0Ly8gYSBtYXRyaXggKHJlc3VsdCkgd2hpY2ggY2FuIGJlIHVzZWQgdG8gaGVscCByZWR1Y2UgaXRcclxuXHJcblx0Y29uc3QgdG9sZXJhbmNlID0gR01hdGguRVBTSUxPTjE1O1xyXG5cclxuXHRsZXQgbWF4RGlhZ29uYWwgPSAwLjA7XHJcblx0bGV0IHJvdEF4aXMgPSAxO1xyXG5cclxuXHQvLyBmaW5kIHBpdm90IChyb3RBeGlzKSBiYXNlZCBvbiBtYXggZGlhZ29uYWwgb2YgbWF0cml4XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCAzOyArK2kpIHtcclxuXHRcdGNvbnN0IHRlbXAgPSBNYXRoLmFicyhtYXRyaXhbTWF0cml4My5nZXRFbGVtZW50SW5kZXgoY29sVmFsW2ldLCByb3dWYWxbaV0pXSk7XHJcblx0XHRpZiAodGVtcCA+IG1heERpYWdvbmFsKSB7XHJcblx0XHRcdHJvdEF4aXMgPSBpO1xyXG5cdFx0XHRtYXhEaWFnb25hbCA9IHRlbXA7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRsZXQgYyA9IDEuMDtcclxuXHRsZXQgcyA9IDAuMDtcclxuXHJcblx0Y29uc3QgcCA9IHJvd1ZhbFtyb3RBeGlzXTtcclxuXHRjb25zdCBxID0gY29sVmFsW3JvdEF4aXNdO1xyXG5cclxuXHRpZiAoTWF0aC5hYnMobWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KHEsIHApXSkgPiB0b2xlcmFuY2UpIHtcclxuXHRcdGNvbnN0IHFxID0gbWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KHEsIHEpXTtcclxuXHRcdGNvbnN0IHBwID0gbWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KHAsIHApXTtcclxuXHRcdGNvbnN0IHFwID0gbWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KHEsIHApXTtcclxuXHJcblx0XHRjb25zdCB0YXUgPSAocXEgLSBwcCkgLyAyLjAgLyBxcDtcclxuXHRcdGxldCB0O1xyXG5cclxuXHRcdGlmICh0YXUgPCAwLjApIHtcclxuXHRcdFx0dCA9IC0xLjAgLyAoLXRhdSArIE1hdGguc3FydCgxLjAgKyB0YXUgKiB0YXUpKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHQgPSAxLjAgLyAodGF1ICsgTWF0aC5zcXJ0KDEuMCArIHRhdSAqIHRhdSkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGMgPSAxLjAgLyBNYXRoLnNxcnQoMS4wICsgdCAqIHQpO1xyXG5cdFx0cyA9IHQgKiBjO1xyXG5cdH1cclxuXHJcblx0cmVzdWx0ID0gTWF0cml4My5jbG9uZShNYXRyaXgzLklERU5USVRZLCByZXN1bHQpO1xyXG5cclxuXHRyZXN1bHRbTWF0cml4My5nZXRFbGVtZW50SW5kZXgocCwgcCldID0gcmVzdWx0W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KHEsIHEpXSA9IGM7XHJcblx0cmVzdWx0W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KHEsIHApXSA9IHM7XHJcblx0cmVzdWx0W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KHAsIHEpXSA9IC1zO1xyXG5cclxuXHRyZXR1cm4gcmVzdWx0O1xyXG59XHJcbmNvbnN0IHNjcmF0Y2hUcmFuc3Bvc2VNYXRyaXggPSBuZXcgTWF0cml4MygpO1xyXG5leHBvcnQgZGVmYXVsdCBNYXRyaXgzO1xyXG4iLCJpbXBvcnQgeyBBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vcmVuZGVyL0F0dHJpYnV0ZVwiO1xyXG5pbXBvcnQgZGVmaW5lZCBmcm9tIFwiLi4vdXRpbHMvZGVmaW5lZFwiO1xyXG5pbXBvcnQgR01hdGggZnJvbSBcIi4vTWF0aFwiO1xyXG5cclxuY2xhc3MgVmVjdG9yNCB7XHJcblx0cHVibGljIHN0YXRpYyBaRVJPID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yNCgwLjAsIDAuMCwgMC4wLCAwLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBPTkUgPSBPYmplY3QuZnJlZXplKG5ldyBWZWN0b3I0KDEuMCwgMS4wLCAxLjAsIDEuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIFVOSVRfWCA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjQoMS4wLCAwLjAsIDAuMCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgVU5JVF9ZID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yNCgwLjAsIDEuMCwgMC4wLCAwLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBVTklUX1ogPSBPYmplY3QuZnJlZXplKG5ldyBWZWN0b3I0KDAuMCwgMC4wLCAxLjAsIDAuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIFVOSVRfVyA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjQoMC4wLCAwLjAsIDAuMCwgMS4wKSk7XHJcblx0eDogbnVtYmVyO1xyXG5cdHk6IG51bWJlcjtcclxuXHR6OiBudW1iZXI7XHJcblx0dzogbnVtYmVyO1xyXG5cdGNvbnN0cnVjdG9yKHggPSAwLCB5ID0gMCwgeiA9IDAsIHcgPSAwKSB7XHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHRoaXMueiA9IHo7XHJcblx0XHR0aGlzLncgPSB3O1xyXG5cdH1cclxuXHRzZXQoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciwgdzogbnVtYmVyKTogdm9pZCB7XHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHRoaXMueiA9IHo7XHJcblx0XHR0aGlzLncgPSB3O1xyXG5cdH1cclxuXHR0b0FycmF5KCk6IG51bWJlcltdIHtcclxuXHRcdHJldHVybiBbdGhpcy54LCB0aGlzLnksIHRoaXMueiwgdGhpcy53XTtcclxuXHR9XHJcblxyXG5cdGNsb25lKHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0cmV0dXJuIFZlY3RvcjQuY2xvbmUodGhpcywgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdGVxdWFscyhyaWdodDogVmVjdG9yNCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIFZlY3RvcjQuZXF1YWxzKHRoaXMsIHJpZ2h0KTtcclxuXHR9XHJcblxyXG5cdGVxdWFsc0Vwc2lsb24ocmlnaHQ6IFZlY3RvcjQsIHJlbGF0aXZlRXBzaWxvbiA9IDAsIGFic29sdXRlRXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBWZWN0b3I0LmVxdWFsc0Vwc2lsb24odGhpcywgcmlnaHQsIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKTtcclxuXHR9XHJcblxyXG5cdHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gYCgke3RoaXMueH0sICR7dGhpcy55fSwgJHt0aGlzLnp9LCAke3RoaXMud30pYDtcclxuXHR9XHJcblx0ZnJvbUJ1ZmZlckF0dHJpYnV0ZShhdHRyaWJ1dGU6IEF0dHJpYnV0ZSwgaW5kZXg6IG51bWJlcik6IFZlY3RvcjQge1xyXG5cdFx0dGhpcy54ID0gYXR0cmlidXRlLmdldFgoaW5kZXgpO1xyXG5cdFx0dGhpcy55ID0gYXR0cmlidXRlLmdldFkoaW5kZXgpO1xyXG5cdFx0dGhpcy56ID0gYXR0cmlidXRlLmdldFooaW5kZXgpO1xyXG5cdFx0dGhpcy53ID0gYXR0cmlidXRlLmdldFcoaW5kZXgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21FbGVtZW50cyh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyLCB3OiBudW1iZXIsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBWZWN0b3I0KHgsIHksIHosIHcpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdC54ID0geDtcclxuXHRcdHJlc3VsdC55ID0geTtcclxuXHRcdHJlc3VsdC56ID0gejtcclxuXHRcdHJlc3VsdC53ID0gdztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY2xvbmUoY2FydGVzaWFuOiBWZWN0b3I0LCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdGlmICghZGVmaW5lZChjYXJ0ZXNpYW4pKSB7XHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBWZWN0b3I0KGNhcnRlc2lhbi54LCBjYXJ0ZXNpYW4ueSwgY2FydGVzaWFuLnosIGNhcnRlc2lhbi53KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQueCA9IGNhcnRlc2lhbi54O1xyXG5cdFx0cmVzdWx0LnkgPSBjYXJ0ZXNpYW4ueTtcclxuXHRcdHJlc3VsdC56ID0gY2FydGVzaWFuLno7XHJcblx0XHRyZXN1bHQudyA9IGNhcnRlc2lhbi53O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtYXhpbXVtQ29tcG9uZW50KGNhcnRlc2lhbjogVmVjdG9yNCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gTWF0aC5tYXgoY2FydGVzaWFuLngsIGNhcnRlc2lhbi55LCBjYXJ0ZXNpYW4ueiwgY2FydGVzaWFuLncpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1pbmltdW1Db21wb25lbnQoY2FydGVzaWFuOiBWZWN0b3I0KTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBNYXRoLm1pbihjYXJ0ZXNpYW4ueCwgY2FydGVzaWFuLnksIGNhcnRlc2lhbi56LCBjYXJ0ZXNpYW4udyk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWluaW11bUJ5Q29tcG9uZW50KGZpcnN0OiBWZWN0b3I0LCBzZWNvbmQ6IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0cmVzdWx0LnggPSBNYXRoLm1pbihmaXJzdC54LCBzZWNvbmQueCk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGgubWluKGZpcnN0LnksIHNlY29uZC55KTtcclxuXHRcdHJlc3VsdC56ID0gTWF0aC5taW4oZmlyc3Queiwgc2Vjb25kLnopO1xyXG5cdFx0cmVzdWx0LncgPSBNYXRoLm1pbihmaXJzdC53LCBzZWNvbmQudyk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtYXhpbXVtQnlDb21wb25lbnQoZmlyc3Q6IFZlY3RvcjQsIHNlY29uZDogVmVjdG9yNCwgcmVzdWx0OiBWZWN0b3I0KTogVmVjdG9yNCB7XHJcblx0XHRyZXN1bHQueCA9IE1hdGgubWF4KGZpcnN0LngsIHNlY29uZC54KTtcclxuXHRcdHJlc3VsdC55ID0gTWF0aC5tYXgoZmlyc3QueSwgc2Vjb25kLnkpO1xyXG5cdFx0cmVzdWx0LnogPSBNYXRoLm1heChmaXJzdC56LCBzZWNvbmQueik7XHJcblx0XHRyZXN1bHQudyA9IE1hdGgubWF4KGZpcnN0LncsIHNlY29uZC53KTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNsYW1wKHZhbHVlOiBWZWN0b3I0LCBtaW46IFZlY3RvcjQsIG1heDogVmVjdG9yNCwgcmVzdWx0OiBWZWN0b3I0KTogVmVjdG9yNCB7XHJcblx0XHRjb25zdCB4ID0gR01hdGguY2xhbXAodmFsdWUueCwgbWluLngsIG1heC54KTtcclxuXHRcdGNvbnN0IHkgPSBHTWF0aC5jbGFtcCh2YWx1ZS55LCBtaW4ueSwgbWF4LnkpO1xyXG5cdFx0Y29uc3QgeiA9IEdNYXRoLmNsYW1wKHZhbHVlLnosIG1pbi56LCBtYXgueik7XHJcblx0XHRjb25zdCB3ID0gR01hdGguY2xhbXAodmFsdWUudywgbWluLncsIG1heC53KTtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXN1bHQudyA9IHc7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtYWduaXR1ZGVTcXVhcmVkKGNhcnRlc2lhbjogVmVjdG9yNCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRjYXJ0ZXNpYW4ueCAqIGNhcnRlc2lhbi54ICtcclxuXHRcdFx0Y2FydGVzaWFuLnkgKiBjYXJ0ZXNpYW4ueSArXHJcblx0XHRcdGNhcnRlc2lhbi56ICogY2FydGVzaWFuLnogK1xyXG5cdFx0XHRjYXJ0ZXNpYW4udyAqIGNhcnRlc2lhbi53XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1hZ25pdHVkZShjYXJ0ZXNpYW46IFZlY3RvcjQpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIE1hdGguc3FydChWZWN0b3I0Lm1hZ25pdHVkZVNxdWFyZWQoY2FydGVzaWFuKSk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZGlzdGFuY2UobGVmdDogVmVjdG9yNCwgcmlnaHQ6IFZlY3RvcjQpOiBudW1iZXIge1xyXG5cdFx0VmVjdG9yNC5zdWJ0cmFjdChsZWZ0LCByaWdodCwgZGlzdGFuY2VTY3JhdGNoKTtcclxuXHRcdHJldHVybiBWZWN0b3I0Lm1hZ25pdHVkZShkaXN0YW5jZVNjcmF0Y2gpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRpc3RhbmNlU3F1YXJlZChsZWZ0OiBWZWN0b3I0LCByaWdodDogVmVjdG9yNCk6IG51bWJlciB7XHJcblx0XHRWZWN0b3I0LnN1YnRyYWN0KGxlZnQsIHJpZ2h0LCBkaXN0YW5jZVNjcmF0Y2gpO1xyXG5cdFx0cmV0dXJuIFZlY3RvcjQubWFnbml0dWRlU3F1YXJlZChkaXN0YW5jZVNjcmF0Y2gpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG5vcm1hbGl6ZShjYXJ0ZXNpYW46IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0Y29uc3QgbWFnbml0dWRlID0gVmVjdG9yNC5tYWduaXR1ZGUoY2FydGVzaWFuKTtcclxuXHJcblx0XHRyZXN1bHQueCA9IGNhcnRlc2lhbi54IC8gbWFnbml0dWRlO1xyXG5cdFx0cmVzdWx0LnkgPSBjYXJ0ZXNpYW4ueSAvIG1hZ25pdHVkZTtcclxuXHRcdHJlc3VsdC56ID0gY2FydGVzaWFuLnogLyBtYWduaXR1ZGU7XHJcblx0XHRyZXN1bHQudyA9IGNhcnRlc2lhbi53IC8gbWFnbml0dWRlO1xyXG5cclxuXHRcdC8vID4+aW5jbHVkZVN0YXJ0KCdkZWJ1ZycsIHByYWdtYXMuZGVidWcpO1xyXG5cdFx0aWYgKGlzTmFOKHJlc3VsdC54KSB8fCBpc05hTihyZXN1bHQueSkgfHwgaXNOYU4ocmVzdWx0LnopIHx8IGlzTmFOKHJlc3VsdC53KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub3JtYWxpemVkIHJlc3VsdCBpcyBub3QgYSBudW1iZXJcIik7XHJcblx0XHR9XHJcblx0XHQvLyA+PmluY2x1ZGVFbmQoJ2RlYnVnJyk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkb3QobGVmdDogVmVjdG9yNCwgcmlnaHQ6IFZlY3RvcjQpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIGxlZnQueCAqIHJpZ2h0LnggKyBsZWZ0LnkgKiByaWdodC55ICsgbGVmdC56ICogcmlnaHQueiArIGxlZnQudyAqIHJpZ2h0Lnc7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbXVsdGlwbHlDb21wb25lbnRzKGxlZnQ6IFZlY3RvcjQsIHJpZ2h0OiBWZWN0b3I0LCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdHJlc3VsdC54ID0gbGVmdC54ICogcmlnaHQueDtcclxuXHRcdHJlc3VsdC55ID0gbGVmdC55ICogcmlnaHQueTtcclxuXHRcdHJlc3VsdC56ID0gbGVmdC56ICogcmlnaHQuejtcclxuXHRcdHJlc3VsdC53ID0gbGVmdC53ICogcmlnaHQudztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZGl2aWRlQ29tcG9uZW50cyhsZWZ0OiBWZWN0b3I0LCByaWdodDogVmVjdG9yNCwgcmVzdWx0OiBWZWN0b3I0KTogVmVjdG9yNCB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCAvIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSAvIHJpZ2h0Lnk7XHJcblx0XHRyZXN1bHQueiA9IGxlZnQueiAvIHJpZ2h0Lno7XHJcblx0XHRyZXN1bHQudyA9IGxlZnQudyAvIHJpZ2h0Lnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFkZChsZWZ0OiBWZWN0b3I0LCByaWdodDogVmVjdG9yNCwgcmVzdWx0OiBWZWN0b3I0KTogVmVjdG9yNCB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCArIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSArIHJpZ2h0Lnk7XHJcblx0XHRyZXN1bHQueiA9IGxlZnQueiArIHJpZ2h0Lno7XHJcblx0XHRyZXN1bHQudyA9IGxlZnQudyArIHJpZ2h0Lnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHN1YnRyYWN0KGxlZnQ6IFZlY3RvcjQsIHJpZ2h0OiBWZWN0b3I0LCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdHJlc3VsdC54ID0gbGVmdC54IC0gcmlnaHQueDtcclxuXHRcdHJlc3VsdC55ID0gbGVmdC55IC0gcmlnaHQueTtcclxuXHRcdHJlc3VsdC56ID0gbGVmdC56IC0gcmlnaHQuejtcclxuXHRcdHJlc3VsdC53ID0gbGVmdC53IC0gcmlnaHQudztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbXVsdGlwbHlCeVNjYWxhcihjYXJ0ZXNpYW46IFZlY3RvcjQsIHNjYWxhcjogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLnggKiBzY2FsYXI7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55ICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnogPSBjYXJ0ZXNpYW4ueiAqIHNjYWxhcjtcclxuXHRcdHJlc3VsdC53ID0gY2FydGVzaWFuLncgKiBzY2FsYXI7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRpdmlkZUJ5U2NhbGFyKGNhcnRlc2lhbjogVmVjdG9yNCwgc2NhbGFyOiBudW1iZXIsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0cmVzdWx0LnggPSBjYXJ0ZXNpYW4ueCAvIHNjYWxhcjtcclxuXHRcdHJlc3VsdC55ID0gY2FydGVzaWFuLnkgLyBzY2FsYXI7XHJcblx0XHRyZXN1bHQueiA9IGNhcnRlc2lhbi56IC8gc2NhbGFyO1xyXG5cdFx0cmVzdWx0LncgPSBjYXJ0ZXNpYW4udyAvIHNjYWxhcjtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbmVnYXRlKGNhcnRlc2lhbjogVmVjdG9yNCwgcmVzdWx0OiBWZWN0b3I0KTogVmVjdG9yNCB7XHJcblx0XHRyZXN1bHQueCA9IC1jYXJ0ZXNpYW4ueDtcclxuXHRcdHJlc3VsdC55ID0gLWNhcnRlc2lhbi55O1xyXG5cdFx0cmVzdWx0LnogPSAtY2FydGVzaWFuLno7XHJcblx0XHRyZXN1bHQudyA9IC1jYXJ0ZXNpYW4udztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYWJzKGNhcnRlc2lhbjogVmVjdG9yNCwgcmVzdWx0OiBWZWN0b3I0KTogVmVjdG9yNCB7XHJcblx0XHRyZXN1bHQueCA9IE1hdGguYWJzKGNhcnRlc2lhbi54KTtcclxuXHRcdHJlc3VsdC55ID0gTWF0aC5hYnMoY2FydGVzaWFuLnkpO1xyXG5cdFx0cmVzdWx0LnogPSBNYXRoLmFicyhjYXJ0ZXNpYW4ueik7XHJcblx0XHRyZXN1bHQudyA9IE1hdGguYWJzKGNhcnRlc2lhbi53KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbGVycChzdGFydDogVmVjdG9yNCwgZW5kOiBWZWN0b3I0LCB0OiBudW1iZXIsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0VmVjdG9yNC5tdWx0aXBseUJ5U2NhbGFyKGVuZCwgdCwgbGVycFNjcmF0Y2gpO1xyXG5cdFx0cmVzdWx0ID0gVmVjdG9yNC5tdWx0aXBseUJ5U2NhbGFyKHN0YXJ0LCAxLjAgLSB0LCByZXN1bHQpO1xyXG5cdFx0cmV0dXJuIFZlY3RvcjQuYWRkKGxlcnBTY3JhdGNoLCByZXN1bHQsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZXF1YWxzKGxlZnQ6IFZlY3RvcjQsIHJpZ2h0OiBWZWN0b3I0KTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRsZWZ0ID09PSByaWdodCB8fFxyXG5cdFx0XHQoZGVmaW5lZChsZWZ0KSAmJlxyXG5cdFx0XHRcdGRlZmluZWQocmlnaHQpICYmXHJcblx0XHRcdFx0bGVmdC54ID09PSByaWdodC54ICYmXHJcblx0XHRcdFx0bGVmdC55ID09PSByaWdodC55ICYmXHJcblx0XHRcdFx0bGVmdC56ID09PSByaWdodC56ICYmXHJcblx0XHRcdFx0bGVmdC53ID09PSByaWdodC53KVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHNBcnJheShjYXJ0ZXNpYW46IFZlY3RvcjQsIGFycmF5OiBudW1iZXJbXSwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGNhcnRlc2lhbi54ID09PSBhcnJheVtvZmZzZXRdICYmXHJcblx0XHRcdGNhcnRlc2lhbi55ID09PSBhcnJheVtvZmZzZXQgKyAxXSAmJlxyXG5cdFx0XHRjYXJ0ZXNpYW4ueiA9PT0gYXJyYXlbb2Zmc2V0ICsgMl0gJiZcclxuXHRcdFx0Y2FydGVzaWFuLncgPT09IGFycmF5W29mZnNldCArIDNdXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFsc0Vwc2lsb24obGVmdDogVmVjdG9yNCwgcmlnaHQ6IFZlY3RvcjQsIHJlbGF0aXZlRXBzaWxvbiA9IDAsIGFic29sdXRlRXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGxlZnQgPT09IHJpZ2h0IHx8XHJcblx0XHRcdChkZWZpbmVkKGxlZnQpICYmXHJcblx0XHRcdFx0ZGVmaW5lZChyaWdodCkgJiZcclxuXHRcdFx0XHRHTWF0aC5lcXVhbHNFcHNpbG9uKGxlZnQueCwgcmlnaHQueCwgcmVsYXRpdmVFcHNpbG9uLCBhYnNvbHV0ZUVwc2lsb24pICYmXHJcblx0XHRcdFx0R01hdGguZXF1YWxzRXBzaWxvbihsZWZ0LnksIHJpZ2h0LnksIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKSAmJlxyXG5cdFx0XHRcdEdNYXRoLmVxdWFsc0Vwc2lsb24obGVmdC56LCByaWdodC56LCByZWxhdGl2ZUVwc2lsb24sIGFic29sdXRlRXBzaWxvbikgJiZcclxuXHRcdFx0XHRHTWF0aC5lcXVhbHNFcHNpbG9uKGxlZnQudywgcmlnaHQudywgcmVsYXRpdmVFcHNpbG9uLCBhYnNvbHV0ZUVwc2lsb24pKVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuXHJcbi8vIHNjcmF0Y2hVOEFycmF5IGFuZCBzY3JhdGNoRjMyQXJyYXkgYXJlIHZpZXdzIGludG8gdGhlIHNhbWUgYnVmZmVyXHJcbmNvbnN0IHNjcmF0Y2hGMzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XHJcbmNvbnN0IHNjcmF0Y2hVOEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoc2NyYXRjaEYzMkFycmF5LmJ1ZmZlcik7XHJcblxyXG5jb25zdCB0ZXN0VTMyID0gbmV3IFVpbnQzMkFycmF5KFsweDExMjIzMzQ0XSk7XHJcbmNvbnN0IHRlc3RVOCA9IG5ldyBVaW50OEFycmF5KHRlc3RVMzIuYnVmZmVyKTtcclxuY29uc3QgbGl0dGxlRW5kaWFuID0gdGVzdFU4WzBdID09PSAweDQ0O1xyXG5jb25zdCBkaXN0YW5jZVNjcmF0Y2ggPSBuZXcgVmVjdG9yNCgpO1xyXG5jb25zdCBsZXJwU2NyYXRjaCA9IG5ldyBWZWN0b3I0KCk7XHJcbmNvbnN0IG1vc3RPcnRob2dvbmFsQXhpc1NjcmF0Y2ggPSBuZXcgVmVjdG9yNCgpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yNDtcclxuIiwiaW1wb3J0IGRlZmF1bHRWYWx1ZSBmcm9tIFwiLi4vdXRpbHMvZGVmYXVsdFZhbHVlXCI7XG5pbXBvcnQgZGVmaW5lZCBmcm9tIFwiLi4vdXRpbHMvZGVmaW5lZFwiO1xuaW1wb3J0IEdNYXRoIGZyb20gXCIuL01hdGhcIjtcbmltcG9ydCBNYXRyaXgzIGZyb20gXCIuL01hdHJpeDNcIjtcbmltcG9ydCB7IFF1YXRlcm5pb24gfSBmcm9tIFwiLi9RdWF0ZXJuaW9uXCI7XG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi9WZWN0b3IzXCI7XG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi9WZWN0b3I0XCI7XG5jbGFzcyBNYXRyaXg0IHtcblx0cHVibGljIHN0YXRpYyBJREVOVElUWSA9IE9iamVjdC5mcmVlemUoXG5cdFx0bmV3IE1hdHJpeDQoMS4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDEuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAxLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMS4wKVxuXHQpO1xuXHRwdWJsaWMgc3RhdGljIFpFUk8gPSBPYmplY3QuZnJlZXplKFxuXHRcdG5ldyBNYXRyaXg0KDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMClcblx0KTtcblx0LyoqXG5cdCAqIEEgNHg0IG1hdHJpeCwgaW5kZXhhYmxlIGFzIGEgY29sdW1uLW1ham9yIG9yZGVyIGFycmF5LlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjBSb3cwPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMCwgcm93IDAuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMVJvdzA9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAxLCByb3cgMC5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4yUm93MD0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDIsIHJvdyAwLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjNSb3cwPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMywgcm93IDAuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMFJvdzE9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAwLCByb3cgMS5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4xUm93MT0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDEsIHJvdyAxLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjJSb3cxPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMiwgcm93IDEuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uM1JvdzE9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAzLCByb3cgMS5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93Mj0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAyLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3cyPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDIuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMlJvdzI9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAyLCByb3cgMi5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4zUm93Mj0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDMsIHJvdyAyLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjBSb3czPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMCwgcm93IDMuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMVJvdzM9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAxLCByb3cgMy5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4yUm93Mz0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDIsIHJvdyAzLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjNSb3czPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMywgcm93IDMuXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihcblx0XHRjb2x1bW4wUm93MCA9IDAsXG5cdFx0Y29sdW1uMVJvdzAgPSAwLFxuXHRcdGNvbHVtbjJSb3cwID0gMCxcblx0XHRjb2x1bW4zUm93MCA9IDAsXG5cdFx0Y29sdW1uMFJvdzEgPSAwLFxuXHRcdGNvbHVtbjFSb3cxID0gMCxcblx0XHRjb2x1bW4yUm93MSA9IDAsXG5cdFx0Y29sdW1uM1JvdzEgPSAwLFxuXHRcdGNvbHVtbjBSb3cyID0gMCxcblx0XHRjb2x1bW4xUm93MiA9IDAsXG5cdFx0Y29sdW1uMlJvdzIgPSAwLFxuXHRcdGNvbHVtbjNSb3cyID0gMCxcblx0XHRjb2x1bW4wUm93MyA9IDAsXG5cdFx0Y29sdW1uMVJvdzMgPSAwLFxuXHRcdGNvbHVtbjJSb3czID0gMCxcblx0XHRjb2x1bW4zUm93MyA9IDBcblx0KSB7XG5cdFx0dGhpc1swXSA9IGNvbHVtbjBSb3cwO1xuXHRcdHRoaXNbMV0gPSBjb2x1bW4wUm93MTtcblx0XHR0aGlzWzJdID0gY29sdW1uMFJvdzI7XG5cdFx0dGhpc1szXSA9IGNvbHVtbjBSb3czO1xuXHRcdHRoaXNbNF0gPSBjb2x1bW4xUm93MDtcblx0XHR0aGlzWzVdID0gY29sdW1uMVJvdzE7XG5cdFx0dGhpc1s2XSA9IGNvbHVtbjFSb3cyO1xuXHRcdHRoaXNbN10gPSBjb2x1bW4xUm93Mztcblx0XHR0aGlzWzhdID0gY29sdW1uMlJvdzA7XG5cdFx0dGhpc1s5XSA9IGNvbHVtbjJSb3cxO1xuXHRcdHRoaXNbMTBdID0gY29sdW1uMlJvdzI7XG5cdFx0dGhpc1sxMV0gPSBjb2x1bW4yUm93Mztcblx0XHR0aGlzWzEyXSA9IGNvbHVtbjNSb3cwO1xuXHRcdHRoaXNbMTNdID0gY29sdW1uM1JvdzE7XG5cdFx0dGhpc1sxNF0gPSBjb2x1bW4zUm93Mjtcblx0XHR0aGlzWzE1XSA9IGNvbHVtbjNSb3czO1xuXHR9XG5cdC8vID8/Pz9cblx0Y2xvbmUocmVzdWx0OiBNYXRyaXg0ID0gbmV3IE1hdHJpeDQoKSk6IE1hdHJpeDQge1xuXHRcdHJldHVybiBNYXRyaXg0LmNsb25lKHRoaXMsIHJlc3VsdCk7XG5cdH1cblx0c2V0KG1hdDQ6IE1hdHJpeDQpIHtcblx0XHRNYXRyaXg0LmNsb25lKG1hdDQsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGVxdWFscyhyaWdodDogTWF0cml4NCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBNYXRyaXg0LmVxdWFscyh0aGlzLCByaWdodCk7XG5cdH1cblx0Y29tcG9zZShwb3NpdGlvbjogVmVjdG9yMywgcXVhdGVybmlvbjogUXVhdGVybmlvbiwgc2NhbGU6IFZlY3RvcjMpOiBNYXRyaXg0IHtcblx0XHRjb25zdCB0ZSA9IHRoaXM7XG5cblx0XHRjb25zdCB4ID0gcXVhdGVybmlvbi54LFxuXHRcdFx0eSA9IHF1YXRlcm5pb24ueSxcblx0XHRcdHogPSBxdWF0ZXJuaW9uLnosXG5cdFx0XHR3ID0gcXVhdGVybmlvbi53O1xuXHRcdGNvbnN0IHgyID0geCArIHgsXG5cdFx0XHR5MiA9IHkgKyB5LFxuXHRcdFx0ejIgPSB6ICsgejtcblx0XHRjb25zdCB4eCA9IHggKiB4Mixcblx0XHRcdHh5ID0geCAqIHkyLFxuXHRcdFx0eHogPSB4ICogejI7XG5cdFx0Y29uc3QgeXkgPSB5ICogeTIsXG5cdFx0XHR5eiA9IHkgKiB6Mixcblx0XHRcdHp6ID0geiAqIHoyO1xuXHRcdGNvbnN0IHd4ID0gdyAqIHgyLFxuXHRcdFx0d3kgPSB3ICogeTIsXG5cdFx0XHR3eiA9IHcgKiB6MjtcblxuXHRcdGNvbnN0IHN4ID0gc2NhbGUueCxcblx0XHRcdHN5ID0gc2NhbGUueSxcblx0XHRcdHN6ID0gc2NhbGUuejtcblxuXHRcdHRlWzBdID0gKDEgLSAoeXkgKyB6eikpICogc3g7XG5cdFx0dGVbMV0gPSAoeHkgKyB3eikgKiBzeDtcblx0XHR0ZVsyXSA9ICh4eiAtIHd5KSAqIHN4O1xuXHRcdHRlWzNdID0gMDtcblxuXHRcdHRlWzRdID0gKHh5IC0gd3opICogc3k7XG5cdFx0dGVbNV0gPSAoMSAtICh4eCArIHp6KSkgKiBzeTtcblx0XHR0ZVs2XSA9ICh5eiArIHd4KSAqIHN5O1xuXHRcdHRlWzddID0gMDtcblxuXHRcdHRlWzhdID0gKHh6ICsgd3kpICogc3o7XG5cdFx0dGVbOV0gPSAoeXogLSB3eCkgKiBzejtcblx0XHR0ZVsxMF0gPSAoMSAtICh4eCArIHl5KSkgKiBzejtcblx0XHR0ZVsxMV0gPSAwO1xuXG5cdFx0dGVbMTJdID0gcG9zaXRpb24ueDtcblx0XHR0ZVsxM10gPSBwb3NpdGlvbi55O1xuXHRcdHRlWzE0XSA9IHBvc2l0aW9uLno7XG5cdFx0dGVbMTVdID0gMTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGVxdWFsc0Vwc2lsb24ocmlnaHQ6IE1hdHJpeDQsIGVwc2lsb24gPSAwKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIE1hdHJpeDQuZXF1YWxzRXBzaWxvbih0aGlzLCByaWdodCwgZXBzaWxvbik7XG5cdH1cblx0bG9va0F0KGV5ZTogVmVjdG9yMywgdGFyZ2V0OiBWZWN0b3IzLCB1cDogVmVjdG9yMyk6IE1hdHJpeDQge1xuXHRcdGNvbnN0IG1hdHJpeCA9IHRoaXM7XG5cdFx0VmVjdG9yMy5zdWJ0cmFjdChleWUsIHRhcmdldCwgeik7XG5cdFx0aWYgKHoubGVuZ3RoKCkgPT09IDApIHtcblx0XHRcdC8vIGV5ZSBhbmQgdGFyZ2V0IGFyZSBpbiB0aGUgc2FtZSBwb3NpdGlvblxuXHRcdFx0ei56ID0gMTtcblx0XHR9XG5cdFx0ei5ub3JtYWxpemUoKTtcblx0XHRWZWN0b3IzLmNyb3NzKHVwLCB6LCB4KTtcblx0XHRpZiAoeC5sZW5ndGgoKSA9PT0gMCkge1xuXHRcdFx0Ly8gdXAgYW5kIHogYXJlIHBhcmFsbGVsXG5cblx0XHRcdGlmIChNYXRoLmFicyh1cC56KSA9PT0gMSkge1xuXHRcdFx0XHR6LnggKz0gMC4wMDAxO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ei56ICs9IDAuMDAwMTtcblx0XHRcdH1cblx0XHRcdHoubm9ybWFsaXplKCk7XG5cdFx0XHRWZWN0b3IzLmNyb3NzKHVwLCB6LCB4KTtcblx0XHR9XG5cdFx0eC5ub3JtYWxpemUoKTtcblx0XHRWZWN0b3IzLmNyb3NzKHosIHgsIHkpO1xuXHRcdG1hdHJpeFswXSA9IHgueDtcblx0XHRtYXRyaXhbNF0gPSB5Lng7XG5cdFx0bWF0cml4WzhdID0gei54O1xuXHRcdG1hdHJpeFsxXSA9IHgueTtcblx0XHRtYXRyaXhbNV0gPSB5Lnk7XG5cdFx0bWF0cml4WzldID0gei55O1xuXHRcdG1hdHJpeFsyXSA9IHguejtcblx0XHRtYXRyaXhbNl0gPSB5Lno7XG5cdFx0bWF0cml4WzEwXSA9IHouejtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHRgKCR7dGhpc1swXX0sICR7dGhpc1s0XX0sICR7dGhpc1s4XX0sICR7dGhpc1sxMl19KVxcbmAgK1xuXHRcdFx0YCgke3RoaXNbMV19LCAke3RoaXNbNV19LCAke3RoaXNbOV19LCAke3RoaXNbMTNdfSlcXG5gICtcblx0XHRcdGAoJHt0aGlzWzJdfSwgJHt0aGlzWzZdfSwgJHt0aGlzWzEwXX0sICR7dGhpc1sxNF19KVxcbmAgK1xuXHRcdFx0YCgke3RoaXNbM119LCAke3RoaXNbN119LCAke3RoaXNbMTFdfSwgJHt0aGlzWzE1XX0pYFxuXHRcdCk7XG5cdH1cblx0c3RhdGljIGNsb25lKG1hdHJpeDogTWF0cml4NCB8IG51bWJlcltdLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRpZiAoIWRlZmluZWQobWF0cml4KSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiBuZXcgTWF0cml4NChcblx0XHRcdFx0bWF0cml4WzBdLFxuXHRcdFx0XHRtYXRyaXhbNF0sXG5cdFx0XHRcdG1hdHJpeFs4XSxcblx0XHRcdFx0bWF0cml4WzEyXSxcblx0XHRcdFx0bWF0cml4WzFdLFxuXHRcdFx0XHRtYXRyaXhbNV0sXG5cdFx0XHRcdG1hdHJpeFs5XSxcblx0XHRcdFx0bWF0cml4WzEzXSxcblx0XHRcdFx0bWF0cml4WzJdLFxuXHRcdFx0XHRtYXRyaXhbNl0sXG5cdFx0XHRcdG1hdHJpeFsxMF0sXG5cdFx0XHRcdG1hdHJpeFsxNF0sXG5cdFx0XHRcdG1hdHJpeFszXSxcblx0XHRcdFx0bWF0cml4WzddLFxuXHRcdFx0XHRtYXRyaXhbMTFdLFxuXHRcdFx0XHRtYXRyaXhbMTVdXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF07XG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdO1xuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXTtcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzRdO1xuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XTtcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXhbNl07XG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddO1xuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeFs4XTtcblx0XHRyZXN1bHRbOV0gPSBtYXRyaXhbOV07XG5cdFx0cmVzdWx0WzEwXSA9IG1hdHJpeFsxMF07XG5cdFx0cmVzdWx0WzExXSA9IG1hdHJpeFsxMV07XG5cdFx0cmVzdWx0WzEyXSA9IG1hdHJpeFsxMl07XG5cdFx0cmVzdWx0WzEzXSA9IG1hdHJpeFsxM107XG5cdFx0cmVzdWx0WzE0XSA9IG1hdHJpeFsxNF07XG5cdFx0cmVzdWx0WzE1XSA9IG1hdHJpeFsxNV07XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBmcm9tQ29sdW1uTWFqb3JBcnJheSh2YWx1ZXM6IG51bWJlcltdLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRyZXR1cm4gTWF0cml4NC5jbG9uZSh2YWx1ZXMsIHJlc3VsdCk7XG5cdH1cblxuXHRzdGF0aWMgZnJvbVJvd01ham9yQXJyYXkodmFsdWVzOiBudW1iZXJbXSwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiBuZXcgTWF0cml4NChcblx0XHRcdFx0dmFsdWVzWzBdLFxuXHRcdFx0XHR2YWx1ZXNbMV0sXG5cdFx0XHRcdHZhbHVlc1syXSxcblx0XHRcdFx0dmFsdWVzWzNdLFxuXHRcdFx0XHR2YWx1ZXNbNF0sXG5cdFx0XHRcdHZhbHVlc1s1XSxcblx0XHRcdFx0dmFsdWVzWzZdLFxuXHRcdFx0XHR2YWx1ZXNbN10sXG5cdFx0XHRcdHZhbHVlc1s4XSxcblx0XHRcdFx0dmFsdWVzWzldLFxuXHRcdFx0XHR2YWx1ZXNbMTBdLFxuXHRcdFx0XHR2YWx1ZXNbMTFdLFxuXHRcdFx0XHR2YWx1ZXNbMTJdLFxuXHRcdFx0XHR2YWx1ZXNbMTNdLFxuXHRcdFx0XHR2YWx1ZXNbMTRdLFxuXHRcdFx0XHR2YWx1ZXNbMTVdXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXN1bHRbMF0gPSB2YWx1ZXNbMF07XG5cdFx0cmVzdWx0WzFdID0gdmFsdWVzWzRdO1xuXHRcdHJlc3VsdFsyXSA9IHZhbHVlc1s4XTtcblx0XHRyZXN1bHRbM10gPSB2YWx1ZXNbMTJdO1xuXHRcdHJlc3VsdFs0XSA9IHZhbHVlc1sxXTtcblx0XHRyZXN1bHRbNV0gPSB2YWx1ZXNbNV07XG5cdFx0cmVzdWx0WzZdID0gdmFsdWVzWzldO1xuXHRcdHJlc3VsdFs3XSA9IHZhbHVlc1sxM107XG5cdFx0cmVzdWx0WzhdID0gdmFsdWVzWzJdO1xuXHRcdHJlc3VsdFs5XSA9IHZhbHVlc1s2XTtcblx0XHRyZXN1bHRbMTBdID0gdmFsdWVzWzEwXTtcblx0XHRyZXN1bHRbMTFdID0gdmFsdWVzWzE0XTtcblx0XHRyZXN1bHRbMTJdID0gdmFsdWVzWzNdO1xuXHRcdHJlc3VsdFsxM10gPSB2YWx1ZXNbN107XG5cdFx0cmVzdWx0WzE0XSA9IHZhbHVlc1sxMV07XG5cdFx0cmVzdWx0WzE1XSA9IHZhbHVlc1sxNV07XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBmcm9tUm90YXRpb25UcmFuc2xhdGlvbihyb3RhdGlvbjogTWF0cml4MywgdHJhbnNsYXRpb246IFZlY3RvcjMsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdHRyYW5zbGF0aW9uID0gZGVmYXVsdFZhbHVlKHRyYW5zbGF0aW9uLCBWZWN0b3IzLlpFUk8pO1xuXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiBuZXcgTWF0cml4NChcblx0XHRcdFx0cm90YXRpb25bMF0sXG5cdFx0XHRcdHJvdGF0aW9uWzNdLFxuXHRcdFx0XHRyb3RhdGlvbls2XSxcblx0XHRcdFx0dHJhbnNsYXRpb24ueCxcblx0XHRcdFx0cm90YXRpb25bMV0sXG5cdFx0XHRcdHJvdGF0aW9uWzRdLFxuXHRcdFx0XHRyb3RhdGlvbls3XSxcblx0XHRcdFx0dHJhbnNsYXRpb24ueSxcblx0XHRcdFx0cm90YXRpb25bMl0sXG5cdFx0XHRcdHJvdGF0aW9uWzVdLFxuXHRcdFx0XHRyb3RhdGlvbls4XSxcblx0XHRcdFx0dHJhbnNsYXRpb24ueixcblx0XHRcdFx0MC4wLFxuXHRcdFx0XHQwLjAsXG5cdFx0XHRcdDAuMCxcblx0XHRcdFx0MS4wXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJlc3VsdFswXSA9IHJvdGF0aW9uWzBdO1xuXHRcdHJlc3VsdFsxXSA9IHJvdGF0aW9uWzFdO1xuXHRcdHJlc3VsdFsyXSA9IHJvdGF0aW9uWzJdO1xuXHRcdHJlc3VsdFszXSA9IDAuMDtcblx0XHRyZXN1bHRbNF0gPSByb3RhdGlvblszXTtcblx0XHRyZXN1bHRbNV0gPSByb3RhdGlvbls0XTtcblx0XHRyZXN1bHRbNl0gPSByb3RhdGlvbls1XTtcblx0XHRyZXN1bHRbN10gPSAwLjA7XG5cdFx0cmVzdWx0WzhdID0gcm90YXRpb25bNl07XG5cdFx0cmVzdWx0WzldID0gcm90YXRpb25bN107XG5cdFx0cmVzdWx0WzEwXSA9IHJvdGF0aW9uWzhdO1xuXHRcdHJlc3VsdFsxMV0gPSAwLjA7XG5cdFx0cmVzdWx0WzEyXSA9IHRyYW5zbGF0aW9uLng7XG5cdFx0cmVzdWx0WzEzXSA9IHRyYW5zbGF0aW9uLnk7XG5cdFx0cmVzdWx0WzE0XSA9IHRyYW5zbGF0aW9uLno7XG5cdFx0cmVzdWx0WzE1XSA9IDEuMDtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIGZyb21UcmFuc2xhdGlvblF1YXRlcm5pb25Sb3RhdGlvblNjYWxlKFxuXHRcdHRyYW5zbGF0aW9uOiBWZWN0b3IzLFxuXHRcdHJvdGF0aW9uOiBRdWF0ZXJuaW9uLFxuXHRcdHNjYWxlOiBWZWN0b3IzLFxuXHRcdHJlc3VsdDogTWF0cml4NFxuXHQpOiBNYXRyaXg0IHtcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xuXHRcdFx0cmVzdWx0ID0gbmV3IE1hdHJpeDQoKTtcblx0XHR9XG5cblx0XHRjb25zdCBzY2FsZVggPSBzY2FsZS54O1xuXHRcdGNvbnN0IHNjYWxlWSA9IHNjYWxlLnk7XG5cdFx0Y29uc3Qgc2NhbGVaID0gc2NhbGUuejtcblxuXHRcdGNvbnN0IHgyID0gcm90YXRpb24ueCAqIHJvdGF0aW9uLng7XG5cdFx0Y29uc3QgeHkgPSByb3RhdGlvbi54ICogcm90YXRpb24ueTtcblx0XHRjb25zdCB4eiA9IHJvdGF0aW9uLnggKiByb3RhdGlvbi56O1xuXHRcdGNvbnN0IHh3ID0gcm90YXRpb24ueCAqIHJvdGF0aW9uLnc7XG5cdFx0Y29uc3QgeTIgPSByb3RhdGlvbi55ICogcm90YXRpb24ueTtcblx0XHRjb25zdCB5eiA9IHJvdGF0aW9uLnkgKiByb3RhdGlvbi56O1xuXHRcdGNvbnN0IHl3ID0gcm90YXRpb24ueSAqIHJvdGF0aW9uLnc7XG5cdFx0Y29uc3QgejIgPSByb3RhdGlvbi56ICogcm90YXRpb24uejtcblx0XHRjb25zdCB6dyA9IHJvdGF0aW9uLnogKiByb3RhdGlvbi53O1xuXHRcdGNvbnN0IHcyID0gcm90YXRpb24udyAqIHJvdGF0aW9uLnc7XG5cblx0XHRjb25zdCBtMDAgPSB4MiAtIHkyIC0gejIgKyB3Mjtcblx0XHRjb25zdCBtMDEgPSAyLjAgKiAoeHkgLSB6dyk7XG5cdFx0Y29uc3QgbTAyID0gMi4wICogKHh6ICsgeXcpO1xuXG5cdFx0Y29uc3QgbTEwID0gMi4wICogKHh5ICsgencpO1xuXHRcdGNvbnN0IG0xMSA9IC14MiArIHkyIC0gejIgKyB3Mjtcblx0XHRjb25zdCBtMTIgPSAyLjAgKiAoeXogLSB4dyk7XG5cblx0XHRjb25zdCBtMjAgPSAyLjAgKiAoeHogLSB5dyk7XG5cdFx0Y29uc3QgbTIxID0gMi4wICogKHl6ICsgeHcpO1xuXHRcdGNvbnN0IG0yMiA9IC14MiAtIHkyICsgejIgKyB3MjtcblxuXHRcdHJlc3VsdFswXSA9IG0wMCAqIHNjYWxlWDtcblx0XHRyZXN1bHRbMV0gPSBtMTAgKiBzY2FsZVg7XG5cdFx0cmVzdWx0WzJdID0gbTIwICogc2NhbGVYO1xuXHRcdHJlc3VsdFszXSA9IDAuMDtcblx0XHRyZXN1bHRbNF0gPSBtMDEgKiBzY2FsZVk7XG5cdFx0cmVzdWx0WzVdID0gbTExICogc2NhbGVZO1xuXHRcdHJlc3VsdFs2XSA9IG0yMSAqIHNjYWxlWTtcblx0XHRyZXN1bHRbN10gPSAwLjA7XG5cdFx0cmVzdWx0WzhdID0gbTAyICogc2NhbGVaO1xuXHRcdHJlc3VsdFs5XSA9IG0xMiAqIHNjYWxlWjtcblx0XHRyZXN1bHRbMTBdID0gbTIyICogc2NhbGVaO1xuXHRcdHJlc3VsdFsxMV0gPSAwLjA7XG5cdFx0cmVzdWx0WzEyXSA9IHRyYW5zbGF0aW9uLng7XG5cdFx0cmVzdWx0WzEzXSA9IHRyYW5zbGF0aW9uLnk7XG5cdFx0cmVzdWx0WzE0XSA9IHRyYW5zbGF0aW9uLno7XG5cdFx0cmVzdWx0WzE1XSA9IDEuMDtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgZnJvbVRyYW5zbGF0aW9uUm90YXRpb25TY2FsZShcblx0XHR0cmFuc2xhdGlvblJvdGF0aW9uU2NhbGU6IHtcblx0XHRcdHRyYW5zbGF0aW9uOiBWZWN0b3IzO1xuXHRcdFx0cm90YXRpb246IFF1YXRlcm5pb247XG5cdFx0XHRzY2FsZTogVmVjdG9yMztcblx0XHR9LFxuXHRcdHJlc3VsdDogTWF0cml4NFxuXHQpOiBNYXRyaXg0IHtcblx0XHRyZXR1cm4gTWF0cml4NC5mcm9tVHJhbnNsYXRpb25RdWF0ZXJuaW9uUm90YXRpb25TY2FsZShcblx0XHRcdHRyYW5zbGF0aW9uUm90YXRpb25TY2FsZS50cmFuc2xhdGlvbixcblx0XHRcdHRyYW5zbGF0aW9uUm90YXRpb25TY2FsZS5yb3RhdGlvbixcblx0XHRcdHRyYW5zbGF0aW9uUm90YXRpb25TY2FsZS5zY2FsZSxcblx0XHRcdHJlc3VsdFxuXHRcdCk7XG5cdH1cblxuXHRzdGF0aWMgZnJvbVRyYW5zbGF0aW9uKHRyYW5zbGF0aW9uOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRyZXR1cm4gTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihNYXRyaXgzLklERU5USVRZLCB0cmFuc2xhdGlvbiwgcmVzdWx0KTtcblx0fVxuXG5cdHN0YXRpYyBmcm9tU2NhbGUoc2NhbGU6IFZlY3RvcjMsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDQoXG5cdFx0XHRcdHNjYWxlLngsXG5cdFx0XHRcdDAuMCxcblx0XHRcdFx0MC4wLFxuXHRcdFx0XHQwLjAsXG5cdFx0XHRcdDAuMCxcblx0XHRcdFx0c2NhbGUueSxcblx0XHRcdFx0MC4wLFxuXHRcdFx0XHQwLjAsXG5cdFx0XHRcdDAuMCxcblx0XHRcdFx0MC4wLFxuXHRcdFx0XHRzY2FsZS56LFxuXHRcdFx0XHQwLjAsXG5cdFx0XHRcdDAuMCxcblx0XHRcdFx0MC4wLFxuXHRcdFx0XHQwLjAsXG5cdFx0XHRcdDEuMFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXN1bHRbMF0gPSBzY2FsZS54O1xuXHRcdHJlc3VsdFsxXSA9IDAuMDtcblx0XHRyZXN1bHRbMl0gPSAwLjA7XG5cdFx0cmVzdWx0WzNdID0gMC4wO1xuXHRcdHJlc3VsdFs0XSA9IDAuMDtcblx0XHRyZXN1bHRbNV0gPSBzY2FsZS55O1xuXHRcdHJlc3VsdFs2XSA9IDAuMDtcblx0XHRyZXN1bHRbN10gPSAwLjA7XG5cdFx0cmVzdWx0WzhdID0gMC4wO1xuXHRcdHJlc3VsdFs5XSA9IDAuMDtcblx0XHRyZXN1bHRbMTBdID0gc2NhbGUuejtcblx0XHRyZXN1bHRbMTFdID0gMC4wO1xuXHRcdHJlc3VsdFsxMl0gPSAwLjA7XG5cdFx0cmVzdWx0WzEzXSA9IDAuMDtcblx0XHRyZXN1bHRbMTRdID0gMC4wO1xuXHRcdHJlc3VsdFsxNV0gPSAxLjA7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBmcm9tUm90YXRpb24ocm90YXRpb246IE1hdHJpeDMsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XG5cdFx0XHRyZXN1bHQgPSBuZXcgTWF0cml4NCgpO1xuXHRcdH1cblx0XHRyZXN1bHRbMF0gPSByb3RhdGlvblswXTtcblx0XHRyZXN1bHRbMV0gPSByb3RhdGlvblsxXTtcblx0XHRyZXN1bHRbMl0gPSByb3RhdGlvblsyXTtcblx0XHRyZXN1bHRbM10gPSAwLjA7XG5cblx0XHRyZXN1bHRbNF0gPSByb3RhdGlvblszXTtcblx0XHRyZXN1bHRbNV0gPSByb3RhdGlvbls0XTtcblx0XHRyZXN1bHRbNl0gPSByb3RhdGlvbls1XTtcblx0XHRyZXN1bHRbN10gPSAwLjA7XG5cblx0XHRyZXN1bHRbOF0gPSByb3RhdGlvbls2XTtcblx0XHRyZXN1bHRbOV0gPSByb3RhdGlvbls3XTtcblx0XHRyZXN1bHRbMTBdID0gcm90YXRpb25bOF07XG5cdFx0cmVzdWx0WzExXSA9IDAuMDtcblxuXHRcdHJlc3VsdFsxMl0gPSAwLjA7XG5cdFx0cmVzdWx0WzEzXSA9IDAuMDtcblx0XHRyZXN1bHRbMTRdID0gMC4wO1xuXHRcdHJlc3VsdFsxNV0gPSAxLjA7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIG1ha2VQZXJzcGVjdGl2ZShcblx0XHRsZWZ0OiBudW1iZXIsXG5cdFx0cmlnaHQ6IG51bWJlcixcblx0XHR0b3A6IG51bWJlcixcblx0XHRib3R0b206IG51bWJlcixcblx0XHRuZWFyOiBudW1iZXIsXG5cdFx0ZmFyOiBudW1iZXJcblx0KTogTWF0cml4NCB7XG5cdFx0Ly8gZnJvbSB0aHJlZS5qc1xuXHRcdGNvbnN0IG1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cdFx0Y29uc3QgeCA9ICgyICogbmVhcikgLyAocmlnaHQgLSBsZWZ0KTtcblx0XHRjb25zdCB5ID0gKDIgKiBuZWFyKSAvICh0b3AgLSBib3R0b20pO1xuXG5cdFx0Y29uc3QgYSA9IChyaWdodCArIGxlZnQpIC8gKHJpZ2h0IC0gbGVmdCk7XG5cdFx0Y29uc3QgYiA9ICh0b3AgKyBib3R0b20pIC8gKHRvcCAtIGJvdHRvbSk7XG5cdFx0Y29uc3QgYyA9IC1mYXIgLyAoZmFyIC0gbmVhcik7XG5cdFx0Y29uc3QgZCA9ICgtZmFyICogbmVhcikgLyAoZmFyIC0gbmVhcik7XG5cblx0XHRtYXRyaXhbMF0gPSB4O1xuXHRcdG1hdHJpeFs0XSA9IDA7XG5cdFx0bWF0cml4WzhdID0gYTtcblx0XHRtYXRyaXhbMTJdID0gMDtcblx0XHRtYXRyaXhbMV0gPSAwO1xuXHRcdG1hdHJpeFs1XSA9IHk7XG5cdFx0bWF0cml4WzldID0gYjtcblx0XHRtYXRyaXhbMTNdID0gMDtcblx0XHRtYXRyaXhbMl0gPSAwO1xuXHRcdG1hdHJpeFs2XSA9IDA7XG5cdFx0bWF0cml4WzEwXSA9IGM7XG5cdFx0bWF0cml4WzE0XSA9IGQ7XG5cdFx0bWF0cml4WzNdID0gMDtcblx0XHRtYXRyaXhbN10gPSAwO1xuXHRcdG1hdHJpeFsxMV0gPSAtMTtcblx0XHRtYXRyaXhbMTVdID0gMDtcblx0XHRyZXR1cm4gbWF0cml4O1xuXHR9XG5cdHN0YXRpYyBtYWtlT3J0aG9ncmFwaGljKFxuXHRcdGxlZnQ6IG51bWJlcixcblx0XHRyaWdodDogbnVtYmVyLFxuXHRcdHRvcDogbnVtYmVyLFxuXHRcdGJvdHRvbTogbnVtYmVyLFxuXHRcdG5lYXI6IG51bWJlcixcblx0XHRmYXI6IG51bWJlclxuXHQpOiBNYXRyaXg0IHtcblx0XHRjb25zdCBtYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuXHRcdGNvbnN0IHcgPSAxLjAgLyAocmlnaHQgLSBsZWZ0KTtcblx0XHRjb25zdCBoID0gMS4wIC8gKHRvcCAtIGJvdHRvbSk7XG5cdFx0Y29uc3QgcCA9IDEuMCAvIChmYXIgLSBuZWFyKTtcblxuXHRcdGNvbnN0IHggPSAocmlnaHQgKyBsZWZ0KSAqIHc7XG5cdFx0Y29uc3QgeSA9ICh0b3AgKyBib3R0b20pICogaDtcblx0XHRjb25zdCB6ID0gbmVhciAqIHA7XG5cblx0XHRtYXRyaXhbMF0gPSAyICogdztcblx0XHRtYXRyaXhbNF0gPSAwO1xuXHRcdG1hdHJpeFs4XSA9IDA7XG5cdFx0bWF0cml4WzEyXSA9IC14O1xuXHRcdG1hdHJpeFsxXSA9IDA7XG5cdFx0bWF0cml4WzVdID0gMiAqIGg7XG5cdFx0bWF0cml4WzldID0gMDtcblx0XHRtYXRyaXhbMTNdID0gLXk7XG5cdFx0bWF0cml4WzJdID0gMDtcblx0XHRtYXRyaXhbNl0gPSAwO1xuXHRcdG1hdHJpeFsxMF0gPSAtMSAqIHA7XG5cdFx0bWF0cml4WzE0XSA9IC16O1xuXHRcdG1hdHJpeFszXSA9IDA7XG5cdFx0bWF0cml4WzddID0gMDtcblx0XHRtYXRyaXhbMTFdID0gMDtcblx0XHRtYXRyaXhbMTVdID0gMTtcblx0XHRyZXR1cm4gbWF0cml4O1xuXHR9XG5cdHRvQXJyYXkoKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cdFx0TWF0cml4NC50b0FycmF5KHRoaXMsIHJlc3VsdCk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXHQvKipcblx0ICogQ29tcHV0ZXMgYW4gQXJyYXkgZnJvbSB0aGUgcHJvdmlkZWQgTWF0cml4NCBpbnN0YW5jZS5cblx0ICogVGhlIGFycmF5IHdpbGwgYmUgaW4gY29sdW1uLW1ham9yIG9yZGVyLlxuXHQgKiBAZXhhbXBsZVxuXHQgKiAvL2NyZWF0ZSBhbiBhcnJheSBmcm9tIGFuIGluc3RhbmNlIG9mIE1hdHJpeDRcblx0ICogLy8gbSA9IFsxMC4wLCAxNC4wLCAxOC4wLCAyMi4wXVxuXHQgKiAvLyAgICAgWzExLjAsIDE1LjAsIDE5LjAsIDIzLjBdXG5cdCAqIC8vICAgICBbMTIuMCwgMTYuMCwgMjAuMCwgMjQuMF1cblx0ICogLy8gICAgIFsxMy4wLCAxNy4wLCAyMS4wLCAyNS4wXVxuXHQgKiBjb25zdCBhID0gTWF0cml4NC50b0FycmF5KG0pO1xuXHQgKlxuXHQgKiAvLyBtIHJlbWFpbnMgdGhlIHNhbWVcblx0ICogLy9jcmVhdGVzIGEgPSBbMTAuMCwgMTEuMCwgMTIuMCwgMTMuMCwgMTQuMCwgMTUuMCwgMTYuMCwgMTcuMCwgMTguMCwgMTkuMCwgMjAuMCwgMjEuMCwgMjIuMCwgMjMuMCwgMjQuMCwgMjUuMF1cblx0ICovXG5cdHN0YXRpYyB0b0FycmF5KG1hdHJpeDogQXJyYXk8bnVtYmVyPiB8IE1hdHJpeDQsIHJlc3VsdDogQXJyYXk8bnVtYmVyPik6IEFycmF5PG51bWJlcj4ge1xuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRtYXRyaXhbMF0sXG5cdFx0XHRcdG1hdHJpeFsxXSxcblx0XHRcdFx0bWF0cml4WzJdLFxuXHRcdFx0XHRtYXRyaXhbM10sXG5cdFx0XHRcdG1hdHJpeFs0XSxcblx0XHRcdFx0bWF0cml4WzVdLFxuXHRcdFx0XHRtYXRyaXhbNl0sXG5cdFx0XHRcdG1hdHJpeFs3XSxcblx0XHRcdFx0bWF0cml4WzhdLFxuXHRcdFx0XHRtYXRyaXhbOV0sXG5cdFx0XHRcdG1hdHJpeFsxMF0sXG5cdFx0XHRcdG1hdHJpeFsxMV0sXG5cdFx0XHRcdG1hdHJpeFsxMl0sXG5cdFx0XHRcdG1hdHJpeFsxM10sXG5cdFx0XHRcdG1hdHJpeFsxNF0sXG5cdFx0XHRcdG1hdHJpeFsxNV1cblx0XHRcdF07XG5cdFx0fVxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXTtcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV07XG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdO1xuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXTtcblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF07XG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdO1xuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XTtcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN107XG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdO1xuXHRcdHJlc3VsdFs5XSA9IG1hdHJpeFs5XTtcblx0XHRyZXN1bHRbMTBdID0gbWF0cml4WzEwXTtcblx0XHRyZXN1bHRbMTFdID0gbWF0cml4WzExXTtcblx0XHRyZXN1bHRbMTJdID0gbWF0cml4WzEyXTtcblx0XHRyZXN1bHRbMTNdID0gbWF0cml4WzEzXTtcblx0XHRyZXN1bHRbMTRdID0gbWF0cml4WzE0XTtcblx0XHRyZXN1bHRbMTVdID0gbWF0cml4WzE1XTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIGdldEVsZW1lbnRJbmRleChjb2x1bW46IG51bWJlciwgcm93OiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHJldHVybiBjb2x1bW4gKiA0ICsgcm93O1xuXHR9XG5cblx0c3RhdGljIGdldENvbHVtbihtYXRyaXg6IE1hdHJpeDQsIGluZGV4OiBudW1iZXIsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCAqIDQ7XG5cdFx0Y29uc3QgeCA9IG1hdHJpeFtzdGFydEluZGV4XTtcblx0XHRjb25zdCB5ID0gbWF0cml4W3N0YXJ0SW5kZXggKyAxXTtcblx0XHRjb25zdCB6ID0gbWF0cml4W3N0YXJ0SW5kZXggKyAyXTtcblx0XHRjb25zdCB3ID0gbWF0cml4W3N0YXJ0SW5kZXggKyAzXTtcblxuXHRcdHJlc3VsdC54ID0geDtcblx0XHRyZXN1bHQueSA9IHk7XG5cdFx0cmVzdWx0LnogPSB6O1xuXHRcdHJlc3VsdC53ID0gdztcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIHNldENvbHVtbihtYXRyaXg6IE1hdHJpeDQsIGluZGV4OiBudW1iZXIsIGNhcnRlc2lhbjogVmVjdG9yNCwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0cmVzdWx0ID0gTWF0cml4NC5jbG9uZShtYXRyaXgsIHJlc3VsdCk7XG5cdFx0Y29uc3Qgc3RhcnRJbmRleCA9IGluZGV4ICogNDtcblx0XHRyZXN1bHRbc3RhcnRJbmRleF0gPSBjYXJ0ZXNpYW4ueDtcblx0XHRyZXN1bHRbc3RhcnRJbmRleCArIDFdID0gY2FydGVzaWFuLnk7XG5cdFx0cmVzdWx0W3N0YXJ0SW5kZXggKyAyXSA9IGNhcnRlc2lhbi56O1xuXHRcdHJlc3VsdFtzdGFydEluZGV4ICsgM10gPSBjYXJ0ZXNpYW4udztcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIGdldFJvdyhtYXRyaXg6IE1hdHJpeDQsIGluZGV4OiBudW1iZXIsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xuXHRcdGNvbnN0IHggPSBtYXRyaXhbaW5kZXhdO1xuXHRcdGNvbnN0IHkgPSBtYXRyaXhbaW5kZXggKyA0XTtcblx0XHRjb25zdCB6ID0gbWF0cml4W2luZGV4ICsgOF07XG5cdFx0Y29uc3QgdyA9IG1hdHJpeFtpbmRleCArIDEyXTtcblxuXHRcdHJlc3VsdC54ID0geDtcblx0XHRyZXN1bHQueSA9IHk7XG5cdFx0cmVzdWx0LnogPSB6O1xuXHRcdHJlc3VsdC53ID0gdztcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIHNldFJvdyhtYXRyaXg6IE1hdHJpeDQsIGluZGV4OiBudW1iZXIsIGNhcnRlc2lhbjogVmVjdG9yNCwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0cmVzdWx0ID0gTWF0cml4NC5jbG9uZShtYXRyaXgsIHJlc3VsdCk7XG5cdFx0cmVzdWx0W2luZGV4XSA9IGNhcnRlc2lhbi54O1xuXHRcdHJlc3VsdFtpbmRleCArIDRdID0gY2FydGVzaWFuLnk7XG5cdFx0cmVzdWx0W2luZGV4ICsgOF0gPSBjYXJ0ZXNpYW4uejtcblx0XHRyZXN1bHRbaW5kZXggKyAxMl0gPSBjYXJ0ZXNpYW4udztcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIHNldFRyYW5zbGF0aW9uKG1hdHJpeDogTWF0cml4NCwgdHJhbnNsYXRpb246IFZlY3RvcjMsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXTtcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV07XG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdO1xuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXTtcblxuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeFs0XTtcblx0XHRyZXN1bHRbNV0gPSBtYXRyaXhbNV07XG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdO1xuXHRcdHJlc3VsdFs3XSA9IG1hdHJpeFs3XTtcblxuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeFs4XTtcblx0XHRyZXN1bHRbOV0gPSBtYXRyaXhbOV07XG5cdFx0cmVzdWx0WzEwXSA9IG1hdHJpeFsxMF07XG5cdFx0cmVzdWx0WzExXSA9IG1hdHJpeFsxMV07XG5cblx0XHRyZXN1bHRbMTJdID0gdHJhbnNsYXRpb24ueDtcblx0XHRyZXN1bHRbMTNdID0gdHJhbnNsYXRpb24ueTtcblx0XHRyZXN1bHRbMTRdID0gdHJhbnNsYXRpb24uejtcblx0XHRyZXN1bHRbMTVdID0gbWF0cml4WzE1XTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgc2V0U2NhbGUobWF0cml4OiBNYXRyaXg0LCBzY2FsZTogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0Y29uc3QgZXhpc3RpbmdTY2FsZSA9IE1hdHJpeDQuZ2V0U2NhbGUobWF0cml4LCBzY2FsZVNjcmF0Y2gxKTtcblx0XHRjb25zdCBzY2FsZVJhdGlvWCA9IHNjYWxlLnggLyBleGlzdGluZ1NjYWxlLng7XG5cdFx0Y29uc3Qgc2NhbGVSYXRpb1kgPSBzY2FsZS55IC8gZXhpc3RpbmdTY2FsZS55O1xuXHRcdGNvbnN0IHNjYWxlUmF0aW9aID0gc2NhbGUueiAvIGV4aXN0aW5nU2NhbGUuejtcblxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXSAqIHNjYWxlUmF0aW9YO1xuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXSAqIHNjYWxlUmF0aW9YO1xuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXSAqIHNjYWxlUmF0aW9YO1xuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXTtcblxuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeFs0XSAqIHNjYWxlUmF0aW9ZO1xuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XSAqIHNjYWxlUmF0aW9ZO1xuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XSAqIHNjYWxlUmF0aW9ZO1xuXHRcdHJlc3VsdFs3XSA9IG1hdHJpeFs3XTtcblxuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeFs4XSAqIHNjYWxlUmF0aW9aO1xuXHRcdHJlc3VsdFs5XSA9IG1hdHJpeFs5XSAqIHNjYWxlUmF0aW9aO1xuXHRcdHJlc3VsdFsxMF0gPSBtYXRyaXhbMTBdICogc2NhbGVSYXRpb1o7XG5cdFx0cmVzdWx0WzExXSA9IG1hdHJpeFsxMV07XG5cblx0XHRyZXN1bHRbMTJdID0gbWF0cml4WzEyXTtcblx0XHRyZXN1bHRbMTNdID0gbWF0cml4WzEzXTtcblx0XHRyZXN1bHRbMTRdID0gbWF0cml4WzE0XTtcblx0XHRyZXN1bHRbMTVdID0gbWF0cml4WzE1XTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgZ2V0U2NhbGUobWF0cml4OiBNYXRyaXg0LCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcblx0XHRyZXN1bHQueCA9IFZlY3RvcjMubWFnbml0dWRlKFZlY3RvcjMuZnJvbUVsZW1lbnRzKG1hdHJpeFswXSwgbWF0cml4WzFdLCBtYXRyaXhbMl0sIHNjcmF0Y2hDb2x1bW4pKTtcblx0XHRyZXN1bHQueSA9IFZlY3RvcjMubWFnbml0dWRlKFZlY3RvcjMuZnJvbUVsZW1lbnRzKG1hdHJpeFs0XSwgbWF0cml4WzVdLCBtYXRyaXhbNl0sIHNjcmF0Y2hDb2x1bW4pKTtcblx0XHRyZXN1bHQueiA9IFZlY3RvcjMubWFnbml0dWRlKFZlY3RvcjMuZnJvbUVsZW1lbnRzKG1hdHJpeFs4XSwgbWF0cml4WzldLCBtYXRyaXhbMTBdLCBzY3JhdGNoQ29sdW1uKSk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBnZXRNYXhpbXVtU2NhbGUobWF0cml4OiBNYXRyaXg0KTogbnVtYmVyIHtcblx0XHRNYXRyaXg0LmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoMyk7XG5cdFx0cmV0dXJuIFZlY3RvcjMubWF4aW11bUNvbXBvbmVudChzY2FsZVNjcmF0Y2gzKTtcblx0fVxuXG5cdHN0YXRpYyBzZXRSb3RhdGlvbihtYXRyaXg6IE1hdHJpeDQsIHJvdGF0aW9uOiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRjb25zdCBzY2FsZSA9IE1hdHJpeDQuZ2V0U2NhbGUobWF0cml4LCBzY2FsZVNjcmF0Y2g0KTtcblxuXHRcdHJlc3VsdFswXSA9IHJvdGF0aW9uWzBdICogc2NhbGUueDtcblx0XHRyZXN1bHRbMV0gPSByb3RhdGlvblsxXSAqIHNjYWxlLng7XG5cdFx0cmVzdWx0WzJdID0gcm90YXRpb25bMl0gKiBzY2FsZS54O1xuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXTtcblxuXHRcdHJlc3VsdFs0XSA9IHJvdGF0aW9uWzNdICogc2NhbGUueTtcblx0XHRyZXN1bHRbNV0gPSByb3RhdGlvbls0XSAqIHNjYWxlLnk7XG5cdFx0cmVzdWx0WzZdID0gcm90YXRpb25bNV0gKiBzY2FsZS55O1xuXHRcdHJlc3VsdFs3XSA9IG1hdHJpeFs3XTtcblxuXHRcdHJlc3VsdFs4XSA9IHJvdGF0aW9uWzZdICogc2NhbGUuejtcblx0XHRyZXN1bHRbOV0gPSByb3RhdGlvbls3XSAqIHNjYWxlLno7XG5cdFx0cmVzdWx0WzEwXSA9IHJvdGF0aW9uWzhdICogc2NhbGUuejtcblx0XHRyZXN1bHRbMTFdID0gbWF0cml4WzExXTtcblxuXHRcdHJlc3VsdFsxMl0gPSBtYXRyaXhbMTJdO1xuXHRcdHJlc3VsdFsxM10gPSBtYXRyaXhbMTNdO1xuXHRcdHJlc3VsdFsxNF0gPSBtYXRyaXhbMTRdO1xuXHRcdHJlc3VsdFsxNV0gPSBtYXRyaXhbMTVdO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBnZXRSb3RhdGlvbihtYXRyaXg6IE1hdHJpeDQsIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xuXHRcdGNvbnN0IHNjYWxlID0gTWF0cml4NC5nZXRTY2FsZShtYXRyaXgsIHNjYWxlU2NyYXRjaDUpO1xuXG5cdFx0Y29uc3QgaXMxID0gMSAvIHNjYWxlLng7XG5cdFx0Y29uc3QgaXMyID0gMSAvIHNjYWxlLnk7XG5cdFx0Y29uc3QgaXMzID0gMSAvIHNjYWxlLno7XG5cblx0XHRjb25zdCBzbTExID0gbWF0cml4WzBdICogaXMxO1xuXHRcdGNvbnN0IHNtMTIgPSBtYXRyaXhbMV0gKiBpczI7XG5cdFx0Y29uc3Qgc20xMyA9IG1hdHJpeFsyXSAqIGlzMztcblx0XHRjb25zdCBzbTIxID0gbWF0cml4WzRdICogaXMxO1xuXHRcdGNvbnN0IHNtMjIgPSBtYXRyaXhbNV0gKiBpczI7XG5cdFx0Y29uc3Qgc20yMyA9IG1hdHJpeFs2XSAqIGlzMztcblx0XHRjb25zdCBzbTMxID0gbWF0cml4WzhdICogaXMxO1xuXHRcdGNvbnN0IHNtMzIgPSBtYXRyaXhbOV0gKiBpczI7XG5cdFx0Y29uc3Qgc20zMyA9IG1hdHJpeFsxMF0gKiBpczM7XG5cblx0XHRjb25zdCB0cmFjZSA9IHNtMTEgKyBzbTIyICsgc20zMztcblx0XHRsZXQgUyA9IDA7XG5cblx0XHRpZiAodHJhY2UgPiAwKSB7XG5cdFx0XHRTID0gTWF0aC5zcXJ0KHRyYWNlICsgMS4wKSAqIDI7XG5cdFx0XHRyZXN1bHQudyA9IDAuMjUgKiBTO1xuXHRcdFx0cmVzdWx0LnggPSAoc20yMyAtIHNtMzIpIC8gUztcblx0XHRcdHJlc3VsdC55ID0gKHNtMzEgLSBzbTEzKSAvIFM7XG5cdFx0XHRyZXN1bHQueiA9IChzbTEyIC0gc20yMSkgLyBTO1xuXHRcdH0gZWxzZSBpZiAoc20xMSA+IHNtMjIgJiYgc20xMSA+IHNtMzMpIHtcblx0XHRcdFMgPSBNYXRoLnNxcnQoMS4wICsgc20xMSAtIHNtMjIgLSBzbTMzKSAqIDI7XG5cdFx0XHRyZXN1bHQudyA9IChzbTIzIC0gc20zMikgLyBTO1xuXHRcdFx0cmVzdWx0LnggPSAwLjI1ICogUztcblx0XHRcdHJlc3VsdC55ID0gKHNtMTIgKyBzbTIxKSAvIFM7XG5cdFx0XHRyZXN1bHQueiA9IChzbTMxICsgc20xMykgLyBTO1xuXHRcdH0gZWxzZSBpZiAoc20yMiA+IHNtMzMpIHtcblx0XHRcdFMgPSBNYXRoLnNxcnQoMS4wICsgc20yMiAtIHNtMTEgLSBzbTMzKSAqIDI7XG5cdFx0XHRyZXN1bHQudyA9IChzbTMxIC0gc20xMykgLyBTO1xuXHRcdFx0cmVzdWx0LnggPSAoc20xMiArIHNtMjEpIC8gUztcblx0XHRcdHJlc3VsdC55ID0gMC4yNSAqIFM7XG5cdFx0XHRyZXN1bHQueiA9IChzbTIzICsgc20zMikgLyBTO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRTID0gTWF0aC5zcXJ0KDEuMCArIHNtMzMgLSBzbTExIC0gc20yMikgKiAyO1xuXHRcdFx0cmVzdWx0LncgPSAoc20xMiAtIHNtMjEpIC8gUztcblx0XHRcdHJlc3VsdC54ID0gKHNtMzEgKyBzbTEzKSAvIFM7XG5cdFx0XHRyZXN1bHQueSA9IChzbTIzICsgc20zMikgLyBTO1xuXHRcdFx0cmVzdWx0LnogPSAwLjI1ICogUztcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBtdWx0aXBseShsZWZ0OiBNYXRyaXg0LCByaWdodDogTWF0cml4NCwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0Y29uc3QgbGVmdDAgPSBsZWZ0WzBdO1xuXHRcdGNvbnN0IGxlZnQxID0gbGVmdFsxXTtcblx0XHRjb25zdCBsZWZ0MiA9IGxlZnRbMl07XG5cdFx0Y29uc3QgbGVmdDMgPSBsZWZ0WzNdO1xuXHRcdGNvbnN0IGxlZnQ0ID0gbGVmdFs0XTtcblx0XHRjb25zdCBsZWZ0NSA9IGxlZnRbNV07XG5cdFx0Y29uc3QgbGVmdDYgPSBsZWZ0WzZdO1xuXHRcdGNvbnN0IGxlZnQ3ID0gbGVmdFs3XTtcblx0XHRjb25zdCBsZWZ0OCA9IGxlZnRbOF07XG5cdFx0Y29uc3QgbGVmdDkgPSBsZWZ0WzldO1xuXHRcdGNvbnN0IGxlZnQxMCA9IGxlZnRbMTBdO1xuXHRcdGNvbnN0IGxlZnQxMSA9IGxlZnRbMTFdO1xuXHRcdGNvbnN0IGxlZnQxMiA9IGxlZnRbMTJdO1xuXHRcdGNvbnN0IGxlZnQxMyA9IGxlZnRbMTNdO1xuXHRcdGNvbnN0IGxlZnQxNCA9IGxlZnRbMTRdO1xuXHRcdGNvbnN0IGxlZnQxNSA9IGxlZnRbMTVdO1xuXG5cdFx0Y29uc3QgcmlnaHQwID0gcmlnaHRbMF07XG5cdFx0Y29uc3QgcmlnaHQxID0gcmlnaHRbMV07XG5cdFx0Y29uc3QgcmlnaHQyID0gcmlnaHRbMl07XG5cdFx0Y29uc3QgcmlnaHQzID0gcmlnaHRbM107XG5cdFx0Y29uc3QgcmlnaHQ0ID0gcmlnaHRbNF07XG5cdFx0Y29uc3QgcmlnaHQ1ID0gcmlnaHRbNV07XG5cdFx0Y29uc3QgcmlnaHQ2ID0gcmlnaHRbNl07XG5cdFx0Y29uc3QgcmlnaHQ3ID0gcmlnaHRbN107XG5cdFx0Y29uc3QgcmlnaHQ4ID0gcmlnaHRbOF07XG5cdFx0Y29uc3QgcmlnaHQ5ID0gcmlnaHRbOV07XG5cdFx0Y29uc3QgcmlnaHQxMCA9IHJpZ2h0WzEwXTtcblx0XHRjb25zdCByaWdodDExID0gcmlnaHRbMTFdO1xuXHRcdGNvbnN0IHJpZ2h0MTIgPSByaWdodFsxMl07XG5cdFx0Y29uc3QgcmlnaHQxMyA9IHJpZ2h0WzEzXTtcblx0XHRjb25zdCByaWdodDE0ID0gcmlnaHRbMTRdO1xuXHRcdGNvbnN0IHJpZ2h0MTUgPSByaWdodFsxNV07XG5cblx0XHRjb25zdCBjb2x1bW4wUm93MCA9IGxlZnQwICogcmlnaHQwICsgbGVmdDQgKiByaWdodDEgKyBsZWZ0OCAqIHJpZ2h0MiArIGxlZnQxMiAqIHJpZ2h0Mztcblx0XHRjb25zdCBjb2x1bW4wUm93MSA9IGxlZnQxICogcmlnaHQwICsgbGVmdDUgKiByaWdodDEgKyBsZWZ0OSAqIHJpZ2h0MiArIGxlZnQxMyAqIHJpZ2h0Mztcblx0XHRjb25zdCBjb2x1bW4wUm93MiA9IGxlZnQyICogcmlnaHQwICsgbGVmdDYgKiByaWdodDEgKyBsZWZ0MTAgKiByaWdodDIgKyBsZWZ0MTQgKiByaWdodDM7XG5cdFx0Y29uc3QgY29sdW1uMFJvdzMgPSBsZWZ0MyAqIHJpZ2h0MCArIGxlZnQ3ICogcmlnaHQxICsgbGVmdDExICogcmlnaHQyICsgbGVmdDE1ICogcmlnaHQzO1xuXG5cdFx0Y29uc3QgY29sdW1uMVJvdzAgPSBsZWZ0MCAqIHJpZ2h0NCArIGxlZnQ0ICogcmlnaHQ1ICsgbGVmdDggKiByaWdodDYgKyBsZWZ0MTIgKiByaWdodDc7XG5cdFx0Y29uc3QgY29sdW1uMVJvdzEgPSBsZWZ0MSAqIHJpZ2h0NCArIGxlZnQ1ICogcmlnaHQ1ICsgbGVmdDkgKiByaWdodDYgKyBsZWZ0MTMgKiByaWdodDc7XG5cdFx0Y29uc3QgY29sdW1uMVJvdzIgPSBsZWZ0MiAqIHJpZ2h0NCArIGxlZnQ2ICogcmlnaHQ1ICsgbGVmdDEwICogcmlnaHQ2ICsgbGVmdDE0ICogcmlnaHQ3O1xuXHRcdGNvbnN0IGNvbHVtbjFSb3czID0gbGVmdDMgKiByaWdodDQgKyBsZWZ0NyAqIHJpZ2h0NSArIGxlZnQxMSAqIHJpZ2h0NiArIGxlZnQxNSAqIHJpZ2h0NztcblxuXHRcdGNvbnN0IGNvbHVtbjJSb3cwID0gbGVmdDAgKiByaWdodDggKyBsZWZ0NCAqIHJpZ2h0OSArIGxlZnQ4ICogcmlnaHQxMCArIGxlZnQxMiAqIHJpZ2h0MTE7XG5cdFx0Y29uc3QgY29sdW1uMlJvdzEgPSBsZWZ0MSAqIHJpZ2h0OCArIGxlZnQ1ICogcmlnaHQ5ICsgbGVmdDkgKiByaWdodDEwICsgbGVmdDEzICogcmlnaHQxMTtcblx0XHRjb25zdCBjb2x1bW4yUm93MiA9IGxlZnQyICogcmlnaHQ4ICsgbGVmdDYgKiByaWdodDkgKyBsZWZ0MTAgKiByaWdodDEwICsgbGVmdDE0ICogcmlnaHQxMTtcblx0XHRjb25zdCBjb2x1bW4yUm93MyA9IGxlZnQzICogcmlnaHQ4ICsgbGVmdDcgKiByaWdodDkgKyBsZWZ0MTEgKiByaWdodDEwICsgbGVmdDE1ICogcmlnaHQxMTtcblxuXHRcdGNvbnN0IGNvbHVtbjNSb3cwID0gbGVmdDAgKiByaWdodDEyICsgbGVmdDQgKiByaWdodDEzICsgbGVmdDggKiByaWdodDE0ICsgbGVmdDEyICogcmlnaHQxNTtcblx0XHRjb25zdCBjb2x1bW4zUm93MSA9IGxlZnQxICogcmlnaHQxMiArIGxlZnQ1ICogcmlnaHQxMyArIGxlZnQ5ICogcmlnaHQxNCArIGxlZnQxMyAqIHJpZ2h0MTU7XG5cdFx0Y29uc3QgY29sdW1uM1JvdzIgPSBsZWZ0MiAqIHJpZ2h0MTIgKyBsZWZ0NiAqIHJpZ2h0MTMgKyBsZWZ0MTAgKiByaWdodDE0ICsgbGVmdDE0ICogcmlnaHQxNTtcblx0XHRjb25zdCBjb2x1bW4zUm93MyA9IGxlZnQzICogcmlnaHQxMiArIGxlZnQ3ICogcmlnaHQxMyArIGxlZnQxMSAqIHJpZ2h0MTQgKyBsZWZ0MTUgKiByaWdodDE1O1xuXG5cdFx0cmVzdWx0WzBdID0gY29sdW1uMFJvdzA7XG5cdFx0cmVzdWx0WzFdID0gY29sdW1uMFJvdzE7XG5cdFx0cmVzdWx0WzJdID0gY29sdW1uMFJvdzI7XG5cdFx0cmVzdWx0WzNdID0gY29sdW1uMFJvdzM7XG5cdFx0cmVzdWx0WzRdID0gY29sdW1uMVJvdzA7XG5cdFx0cmVzdWx0WzVdID0gY29sdW1uMVJvdzE7XG5cdFx0cmVzdWx0WzZdID0gY29sdW1uMVJvdzI7XG5cdFx0cmVzdWx0WzddID0gY29sdW1uMVJvdzM7XG5cdFx0cmVzdWx0WzhdID0gY29sdW1uMlJvdzA7XG5cdFx0cmVzdWx0WzldID0gY29sdW1uMlJvdzE7XG5cdFx0cmVzdWx0WzEwXSA9IGNvbHVtbjJSb3cyO1xuXHRcdHJlc3VsdFsxMV0gPSBjb2x1bW4yUm93Mztcblx0XHRyZXN1bHRbMTJdID0gY29sdW1uM1JvdzA7XG5cdFx0cmVzdWx0WzEzXSA9IGNvbHVtbjNSb3cxO1xuXHRcdHJlc3VsdFsxNF0gPSBjb2x1bW4zUm93Mjtcblx0XHRyZXN1bHRbMTVdID0gY29sdW1uM1JvdzM7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBhZGQobGVmdDogTWF0cml4NCwgcmlnaHQ6IE1hdHJpeDQsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdHJlc3VsdFswXSA9IGxlZnRbMF0gKyByaWdodFswXTtcblx0XHRyZXN1bHRbMV0gPSBsZWZ0WzFdICsgcmlnaHRbMV07XG5cdFx0cmVzdWx0WzJdID0gbGVmdFsyXSArIHJpZ2h0WzJdO1xuXHRcdHJlc3VsdFszXSA9IGxlZnRbM10gKyByaWdodFszXTtcblx0XHRyZXN1bHRbNF0gPSBsZWZ0WzRdICsgcmlnaHRbNF07XG5cdFx0cmVzdWx0WzVdID0gbGVmdFs1XSArIHJpZ2h0WzVdO1xuXHRcdHJlc3VsdFs2XSA9IGxlZnRbNl0gKyByaWdodFs2XTtcblx0XHRyZXN1bHRbN10gPSBsZWZ0WzddICsgcmlnaHRbN107XG5cdFx0cmVzdWx0WzhdID0gbGVmdFs4XSArIHJpZ2h0WzhdO1xuXHRcdHJlc3VsdFs5XSA9IGxlZnRbOV0gKyByaWdodFs5XTtcblx0XHRyZXN1bHRbMTBdID0gbGVmdFsxMF0gKyByaWdodFsxMF07XG5cdFx0cmVzdWx0WzExXSA9IGxlZnRbMTFdICsgcmlnaHRbMTFdO1xuXHRcdHJlc3VsdFsxMl0gPSBsZWZ0WzEyXSArIHJpZ2h0WzEyXTtcblx0XHRyZXN1bHRbMTNdID0gbGVmdFsxM10gKyByaWdodFsxM107XG5cdFx0cmVzdWx0WzE0XSA9IGxlZnRbMTRdICsgcmlnaHRbMTRdO1xuXHRcdHJlc3VsdFsxNV0gPSBsZWZ0WzE1XSArIHJpZ2h0WzE1XTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIHN1YnRyYWN0KGxlZnQ6IE1hdHJpeDQsIHJpZ2h0OiBNYXRyaXg0LCByZXN1bHQ6IE1hdHJpeDQpIHtcblx0XHRyZXN1bHRbMF0gPSBsZWZ0WzBdIC0gcmlnaHRbMF07XG5cdFx0cmVzdWx0WzFdID0gbGVmdFsxXSAtIHJpZ2h0WzFdO1xuXHRcdHJlc3VsdFsyXSA9IGxlZnRbMl0gLSByaWdodFsyXTtcblx0XHRyZXN1bHRbM10gPSBsZWZ0WzNdIC0gcmlnaHRbM107XG5cdFx0cmVzdWx0WzRdID0gbGVmdFs0XSAtIHJpZ2h0WzRdO1xuXHRcdHJlc3VsdFs1XSA9IGxlZnRbNV0gLSByaWdodFs1XTtcblx0XHRyZXN1bHRbNl0gPSBsZWZ0WzZdIC0gcmlnaHRbNl07XG5cdFx0cmVzdWx0WzddID0gbGVmdFs3XSAtIHJpZ2h0WzddO1xuXHRcdHJlc3VsdFs4XSA9IGxlZnRbOF0gLSByaWdodFs4XTtcblx0XHRyZXN1bHRbOV0gPSBsZWZ0WzldIC0gcmlnaHRbOV07XG5cdFx0cmVzdWx0WzEwXSA9IGxlZnRbMTBdIC0gcmlnaHRbMTBdO1xuXHRcdHJlc3VsdFsxMV0gPSBsZWZ0WzExXSAtIHJpZ2h0WzExXTtcblx0XHRyZXN1bHRbMTJdID0gbGVmdFsxMl0gLSByaWdodFsxMl07XG5cdFx0cmVzdWx0WzEzXSA9IGxlZnRbMTNdIC0gcmlnaHRbMTNdO1xuXHRcdHJlc3VsdFsxNF0gPSBsZWZ0WzE0XSAtIHJpZ2h0WzE0XTtcblx0XHRyZXN1bHRbMTVdID0gbGVmdFsxNV0gLSByaWdodFsxNV07XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBtdWx0aXBseVRyYW5zZm9ybWF0aW9uKGxlZnQ6IE1hdHJpeDQsIHJpZ2h0OiBNYXRyaXg0LCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRjb25zdCBsZWZ0MCA9IGxlZnRbMF07XG5cdFx0Y29uc3QgbGVmdDEgPSBsZWZ0WzFdO1xuXHRcdGNvbnN0IGxlZnQyID0gbGVmdFsyXTtcblx0XHRjb25zdCBsZWZ0NCA9IGxlZnRbNF07XG5cdFx0Y29uc3QgbGVmdDUgPSBsZWZ0WzVdO1xuXHRcdGNvbnN0IGxlZnQ2ID0gbGVmdFs2XTtcblx0XHRjb25zdCBsZWZ0OCA9IGxlZnRbOF07XG5cdFx0Y29uc3QgbGVmdDkgPSBsZWZ0WzldO1xuXHRcdGNvbnN0IGxlZnQxMCA9IGxlZnRbMTBdO1xuXHRcdGNvbnN0IGxlZnQxMiA9IGxlZnRbMTJdO1xuXHRcdGNvbnN0IGxlZnQxMyA9IGxlZnRbMTNdO1xuXHRcdGNvbnN0IGxlZnQxNCA9IGxlZnRbMTRdO1xuXG5cdFx0Y29uc3QgcmlnaHQwID0gcmlnaHRbMF07XG5cdFx0Y29uc3QgcmlnaHQxID0gcmlnaHRbMV07XG5cdFx0Y29uc3QgcmlnaHQyID0gcmlnaHRbMl07XG5cdFx0Y29uc3QgcmlnaHQ0ID0gcmlnaHRbNF07XG5cdFx0Y29uc3QgcmlnaHQ1ID0gcmlnaHRbNV07XG5cdFx0Y29uc3QgcmlnaHQ2ID0gcmlnaHRbNl07XG5cdFx0Y29uc3QgcmlnaHQ4ID0gcmlnaHRbOF07XG5cdFx0Y29uc3QgcmlnaHQ5ID0gcmlnaHRbOV07XG5cdFx0Y29uc3QgcmlnaHQxMCA9IHJpZ2h0WzEwXTtcblx0XHRjb25zdCByaWdodDEyID0gcmlnaHRbMTJdO1xuXHRcdGNvbnN0IHJpZ2h0MTMgPSByaWdodFsxM107XG5cdFx0Y29uc3QgcmlnaHQxNCA9IHJpZ2h0WzE0XTtcblxuXHRcdGNvbnN0IGNvbHVtbjBSb3cwID0gbGVmdDAgKiByaWdodDAgKyBsZWZ0NCAqIHJpZ2h0MSArIGxlZnQ4ICogcmlnaHQyO1xuXHRcdGNvbnN0IGNvbHVtbjBSb3cxID0gbGVmdDEgKiByaWdodDAgKyBsZWZ0NSAqIHJpZ2h0MSArIGxlZnQ5ICogcmlnaHQyO1xuXHRcdGNvbnN0IGNvbHVtbjBSb3cyID0gbGVmdDIgKiByaWdodDAgKyBsZWZ0NiAqIHJpZ2h0MSArIGxlZnQxMCAqIHJpZ2h0MjtcblxuXHRcdGNvbnN0IGNvbHVtbjFSb3cwID0gbGVmdDAgKiByaWdodDQgKyBsZWZ0NCAqIHJpZ2h0NSArIGxlZnQ4ICogcmlnaHQ2O1xuXHRcdGNvbnN0IGNvbHVtbjFSb3cxID0gbGVmdDEgKiByaWdodDQgKyBsZWZ0NSAqIHJpZ2h0NSArIGxlZnQ5ICogcmlnaHQ2O1xuXHRcdGNvbnN0IGNvbHVtbjFSb3cyID0gbGVmdDIgKiByaWdodDQgKyBsZWZ0NiAqIHJpZ2h0NSArIGxlZnQxMCAqIHJpZ2h0NjtcblxuXHRcdGNvbnN0IGNvbHVtbjJSb3cwID0gbGVmdDAgKiByaWdodDggKyBsZWZ0NCAqIHJpZ2h0OSArIGxlZnQ4ICogcmlnaHQxMDtcblx0XHRjb25zdCBjb2x1bW4yUm93MSA9IGxlZnQxICogcmlnaHQ4ICsgbGVmdDUgKiByaWdodDkgKyBsZWZ0OSAqIHJpZ2h0MTA7XG5cdFx0Y29uc3QgY29sdW1uMlJvdzIgPSBsZWZ0MiAqIHJpZ2h0OCArIGxlZnQ2ICogcmlnaHQ5ICsgbGVmdDEwICogcmlnaHQxMDtcblxuXHRcdGNvbnN0IGNvbHVtbjNSb3cwID0gbGVmdDAgKiByaWdodDEyICsgbGVmdDQgKiByaWdodDEzICsgbGVmdDggKiByaWdodDE0ICsgbGVmdDEyO1xuXHRcdGNvbnN0IGNvbHVtbjNSb3cxID0gbGVmdDEgKiByaWdodDEyICsgbGVmdDUgKiByaWdodDEzICsgbGVmdDkgKiByaWdodDE0ICsgbGVmdDEzO1xuXHRcdGNvbnN0IGNvbHVtbjNSb3cyID0gbGVmdDIgKiByaWdodDEyICsgbGVmdDYgKiByaWdodDEzICsgbGVmdDEwICogcmlnaHQxNCArIGxlZnQxNDtcblxuXHRcdHJlc3VsdFswXSA9IGNvbHVtbjBSb3cwO1xuXHRcdHJlc3VsdFsxXSA9IGNvbHVtbjBSb3cxO1xuXHRcdHJlc3VsdFsyXSA9IGNvbHVtbjBSb3cyO1xuXHRcdHJlc3VsdFszXSA9IDAuMDtcblx0XHRyZXN1bHRbNF0gPSBjb2x1bW4xUm93MDtcblx0XHRyZXN1bHRbNV0gPSBjb2x1bW4xUm93MTtcblx0XHRyZXN1bHRbNl0gPSBjb2x1bW4xUm93Mjtcblx0XHRyZXN1bHRbN10gPSAwLjA7XG5cdFx0cmVzdWx0WzhdID0gY29sdW1uMlJvdzA7XG5cdFx0cmVzdWx0WzldID0gY29sdW1uMlJvdzE7XG5cdFx0cmVzdWx0WzEwXSA9IGNvbHVtbjJSb3cyO1xuXHRcdHJlc3VsdFsxMV0gPSAwLjA7XG5cdFx0cmVzdWx0WzEyXSA9IGNvbHVtbjNSb3cwO1xuXHRcdHJlc3VsdFsxM10gPSBjb2x1bW4zUm93MTtcblx0XHRyZXN1bHRbMTRdID0gY29sdW1uM1JvdzI7XG5cdFx0cmVzdWx0WzE1XSA9IDEuMDtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIG11bHRpcGx5QnlNYXRyaXgzKG1hdHJpeDogTWF0cml4NCwgcm90YXRpb246IE1hdHJpeDMsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdGNvbnN0IGxlZnQwID0gbWF0cml4WzBdO1xuXHRcdGNvbnN0IGxlZnQxID0gbWF0cml4WzFdO1xuXHRcdGNvbnN0IGxlZnQyID0gbWF0cml4WzJdO1xuXHRcdGNvbnN0IGxlZnQ0ID0gbWF0cml4WzRdO1xuXHRcdGNvbnN0IGxlZnQ1ID0gbWF0cml4WzVdO1xuXHRcdGNvbnN0IGxlZnQ2ID0gbWF0cml4WzZdO1xuXHRcdGNvbnN0IGxlZnQ4ID0gbWF0cml4WzhdO1xuXHRcdGNvbnN0IGxlZnQ5ID0gbWF0cml4WzldO1xuXHRcdGNvbnN0IGxlZnQxMCA9IG1hdHJpeFsxMF07XG5cblx0XHRjb25zdCByaWdodDAgPSByb3RhdGlvblswXTtcblx0XHRjb25zdCByaWdodDEgPSByb3RhdGlvblsxXTtcblx0XHRjb25zdCByaWdodDIgPSByb3RhdGlvblsyXTtcblx0XHRjb25zdCByaWdodDQgPSByb3RhdGlvblszXTtcblx0XHRjb25zdCByaWdodDUgPSByb3RhdGlvbls0XTtcblx0XHRjb25zdCByaWdodDYgPSByb3RhdGlvbls1XTtcblx0XHRjb25zdCByaWdodDggPSByb3RhdGlvbls2XTtcblx0XHRjb25zdCByaWdodDkgPSByb3RhdGlvbls3XTtcblx0XHRjb25zdCByaWdodDEwID0gcm90YXRpb25bOF07XG5cblx0XHRjb25zdCBjb2x1bW4wUm93MCA9IGxlZnQwICogcmlnaHQwICsgbGVmdDQgKiByaWdodDEgKyBsZWZ0OCAqIHJpZ2h0Mjtcblx0XHRjb25zdCBjb2x1bW4wUm93MSA9IGxlZnQxICogcmlnaHQwICsgbGVmdDUgKiByaWdodDEgKyBsZWZ0OSAqIHJpZ2h0Mjtcblx0XHRjb25zdCBjb2x1bW4wUm93MiA9IGxlZnQyICogcmlnaHQwICsgbGVmdDYgKiByaWdodDEgKyBsZWZ0MTAgKiByaWdodDI7XG5cblx0XHRjb25zdCBjb2x1bW4xUm93MCA9IGxlZnQwICogcmlnaHQ0ICsgbGVmdDQgKiByaWdodDUgKyBsZWZ0OCAqIHJpZ2h0Njtcblx0XHRjb25zdCBjb2x1bW4xUm93MSA9IGxlZnQxICogcmlnaHQ0ICsgbGVmdDUgKiByaWdodDUgKyBsZWZ0OSAqIHJpZ2h0Njtcblx0XHRjb25zdCBjb2x1bW4xUm93MiA9IGxlZnQyICogcmlnaHQ0ICsgbGVmdDYgKiByaWdodDUgKyBsZWZ0MTAgKiByaWdodDY7XG5cblx0XHRjb25zdCBjb2x1bW4yUm93MCA9IGxlZnQwICogcmlnaHQ4ICsgbGVmdDQgKiByaWdodDkgKyBsZWZ0OCAqIHJpZ2h0MTA7XG5cdFx0Y29uc3QgY29sdW1uMlJvdzEgPSBsZWZ0MSAqIHJpZ2h0OCArIGxlZnQ1ICogcmlnaHQ5ICsgbGVmdDkgKiByaWdodDEwO1xuXHRcdGNvbnN0IGNvbHVtbjJSb3cyID0gbGVmdDIgKiByaWdodDggKyBsZWZ0NiAqIHJpZ2h0OSArIGxlZnQxMCAqIHJpZ2h0MTA7XG5cblx0XHRyZXN1bHRbMF0gPSBjb2x1bW4wUm93MDtcblx0XHRyZXN1bHRbMV0gPSBjb2x1bW4wUm93MTtcblx0XHRyZXN1bHRbMl0gPSBjb2x1bW4wUm93Mjtcblx0XHRyZXN1bHRbM10gPSAwLjA7XG5cdFx0cmVzdWx0WzRdID0gY29sdW1uMVJvdzA7XG5cdFx0cmVzdWx0WzVdID0gY29sdW1uMVJvdzE7XG5cdFx0cmVzdWx0WzZdID0gY29sdW1uMVJvdzI7XG5cdFx0cmVzdWx0WzddID0gMC4wO1xuXHRcdHJlc3VsdFs4XSA9IGNvbHVtbjJSb3cwO1xuXHRcdHJlc3VsdFs5XSA9IGNvbHVtbjJSb3cxO1xuXHRcdHJlc3VsdFsxMF0gPSBjb2x1bW4yUm93Mjtcblx0XHRyZXN1bHRbMTFdID0gMC4wO1xuXHRcdHJlc3VsdFsxMl0gPSBtYXRyaXhbMTJdO1xuXHRcdHJlc3VsdFsxM10gPSBtYXRyaXhbMTNdO1xuXHRcdHJlc3VsdFsxNF0gPSBtYXRyaXhbMTRdO1xuXHRcdHJlc3VsdFsxNV0gPSBtYXRyaXhbMTVdO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgbXVsdGlwbHlCeVRyYW5zbGF0aW9uKG1hdHJpeDogTWF0cml4NCwgdHJhbnNsYXRpb246IFZlY3RvcjMsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdGNvbnN0IHggPSB0cmFuc2xhdGlvbi54O1xuXHRcdGNvbnN0IHkgPSB0cmFuc2xhdGlvbi55O1xuXHRcdGNvbnN0IHogPSB0cmFuc2xhdGlvbi56O1xuXG5cdFx0Y29uc3QgdHggPSB4ICogbWF0cml4WzBdICsgeSAqIG1hdHJpeFs0XSArIHogKiBtYXRyaXhbOF0gKyBtYXRyaXhbMTJdO1xuXHRcdGNvbnN0IHR5ID0geCAqIG1hdHJpeFsxXSArIHkgKiBtYXRyaXhbNV0gKyB6ICogbWF0cml4WzldICsgbWF0cml4WzEzXTtcblx0XHRjb25zdCB0eiA9IHggKiBtYXRyaXhbMl0gKyB5ICogbWF0cml4WzZdICsgeiAqIG1hdHJpeFsxMF0gKyBtYXRyaXhbMTRdO1xuXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdO1xuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXTtcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl07XG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdO1xuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeFs0XTtcblx0XHRyZXN1bHRbNV0gPSBtYXRyaXhbNV07XG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdO1xuXHRcdHJlc3VsdFs3XSA9IG1hdHJpeFs3XTtcblx0XHRyZXN1bHRbOF0gPSBtYXRyaXhbOF07XG5cdFx0cmVzdWx0WzldID0gbWF0cml4WzldO1xuXHRcdHJlc3VsdFsxMF0gPSBtYXRyaXhbMTBdO1xuXHRcdHJlc3VsdFsxMV0gPSBtYXRyaXhbMTFdO1xuXHRcdHJlc3VsdFsxMl0gPSB0eDtcblx0XHRyZXN1bHRbMTNdID0gdHk7XG5cdFx0cmVzdWx0WzE0XSA9IHR6O1xuXHRcdHJlc3VsdFsxNV0gPSBtYXRyaXhbMTVdO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgbXVsdGlwbHlCeVNjYWxlKG1hdHJpeDogTWF0cml4NCwgc2NhbGU6IFZlY3RvcjMsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdGNvbnN0IHNjYWxlWCA9IHNjYWxlLng7XG5cdFx0Y29uc3Qgc2NhbGVZID0gc2NhbGUueTtcblx0XHRjb25zdCBzY2FsZVogPSBzY2FsZS56O1xuXG5cdFx0Ly8gRmFzdGVyIHRoYW4gVmVjdG9yMy5lcXVhbHNcblx0XHRpZiAoc2NhbGVYID09PSAxLjAgJiYgc2NhbGVZID09PSAxLjAgJiYgc2NhbGVaID09PSAxLjApIHtcblx0XHRcdHJldHVybiBNYXRyaXg0LmNsb25lKG1hdHJpeCwgcmVzdWx0KTtcblx0XHR9XG5cblx0XHRyZXN1bHRbMF0gPSBzY2FsZVggKiBtYXRyaXhbMF07XG5cdFx0cmVzdWx0WzFdID0gc2NhbGVYICogbWF0cml4WzFdO1xuXHRcdHJlc3VsdFsyXSA9IHNjYWxlWCAqIG1hdHJpeFsyXTtcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XG5cblx0XHRyZXN1bHRbNF0gPSBzY2FsZVkgKiBtYXRyaXhbNF07XG5cdFx0cmVzdWx0WzVdID0gc2NhbGVZICogbWF0cml4WzVdO1xuXHRcdHJlc3VsdFs2XSA9IHNjYWxlWSAqIG1hdHJpeFs2XTtcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN107XG5cblx0XHRyZXN1bHRbOF0gPSBzY2FsZVogKiBtYXRyaXhbOF07XG5cdFx0cmVzdWx0WzldID0gc2NhbGVaICogbWF0cml4WzldO1xuXHRcdHJlc3VsdFsxMF0gPSBzY2FsZVogKiBtYXRyaXhbMTBdO1xuXHRcdHJlc3VsdFsxMV0gPSBtYXRyaXhbMTFdO1xuXG5cdFx0cmVzdWx0WzEyXSA9IG1hdHJpeFsxMl07XG5cdFx0cmVzdWx0WzEzXSA9IG1hdHJpeFsxM107XG5cdFx0cmVzdWx0WzE0XSA9IG1hdHJpeFsxNF07XG5cdFx0cmVzdWx0WzE1XSA9IG1hdHJpeFsxNV07XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIG11bHRpcGx5QnlVbmlmb3JtU2NhbGUobWF0cml4OiBNYXRyaXg0LCBzY2FsZTogbnVtYmVyLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF0gKiBzY2FsZTtcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsZTtcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl0gKiBzY2FsZTtcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XG5cblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF0gKiBzY2FsZTtcblx0XHRyZXN1bHRbNV0gPSBtYXRyaXhbNV0gKiBzY2FsZTtcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXhbNl0gKiBzY2FsZTtcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN107XG5cblx0XHRyZXN1bHRbOF0gPSBtYXRyaXhbOF0gKiBzY2FsZTtcblx0XHRyZXN1bHRbOV0gPSBtYXRyaXhbOV0gKiBzY2FsZTtcblx0XHRyZXN1bHRbMTBdID0gbWF0cml4WzEwXSAqIHNjYWxlO1xuXHRcdHJlc3VsdFsxMV0gPSBtYXRyaXhbMTFdO1xuXG5cdFx0cmVzdWx0WzEyXSA9IG1hdHJpeFsxMl07XG5cdFx0cmVzdWx0WzEzXSA9IG1hdHJpeFsxM107XG5cdFx0cmVzdWx0WzE0XSA9IG1hdHJpeFsxNF07XG5cdFx0cmVzdWx0WzE1XSA9IG1hdHJpeFsxNV07XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIG11bHRpcGx5QnlWZWN0b3IobWF0cml4OiBNYXRyaXg0LCBjYXJ0ZXNpYW46IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xuXHRcdGNvbnN0IHZYID0gY2FydGVzaWFuLng7XG5cdFx0Y29uc3QgdlkgPSBjYXJ0ZXNpYW4ueTtcblx0XHRjb25zdCB2WiA9IGNhcnRlc2lhbi56O1xuXHRcdGNvbnN0IHZXID0gY2FydGVzaWFuLnc7XG5cblx0XHRjb25zdCB4ID0gbWF0cml4WzBdICogdlggKyBtYXRyaXhbNF0gKiB2WSArIG1hdHJpeFs4XSAqIHZaICsgbWF0cml4WzEyXSAqIHZXO1xuXHRcdGNvbnN0IHkgPSBtYXRyaXhbMV0gKiB2WCArIG1hdHJpeFs1XSAqIHZZICsgbWF0cml4WzldICogdlogKyBtYXRyaXhbMTNdICogdlc7XG5cdFx0Y29uc3QgeiA9IG1hdHJpeFsyXSAqIHZYICsgbWF0cml4WzZdICogdlkgKyBtYXRyaXhbMTBdICogdlogKyBtYXRyaXhbMTRdICogdlc7XG5cdFx0Y29uc3QgdyA9IG1hdHJpeFszXSAqIHZYICsgbWF0cml4WzddICogdlkgKyBtYXRyaXhbMTFdICogdlogKyBtYXRyaXhbMTVdICogdlc7XG5cblx0XHRyZXN1bHQueCA9IHg7XG5cdFx0cmVzdWx0LnkgPSB5O1xuXHRcdHJlc3VsdC56ID0gejtcblx0XHRyZXN1bHQudyA9IHc7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBtdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihtYXRyaXg6IE1hdHJpeDQsIGNhcnRlc2lhbjogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XG5cdFx0Y29uc3QgdlggPSBjYXJ0ZXNpYW4ueDtcblx0XHRjb25zdCB2WSA9IGNhcnRlc2lhbi55O1xuXHRcdGNvbnN0IHZaID0gY2FydGVzaWFuLno7XG5cblx0XHRjb25zdCB4ID0gbWF0cml4WzBdICogdlggKyBtYXRyaXhbNF0gKiB2WSArIG1hdHJpeFs4XSAqIHZaO1xuXHRcdGNvbnN0IHkgPSBtYXRyaXhbMV0gKiB2WCArIG1hdHJpeFs1XSAqIHZZICsgbWF0cml4WzldICogdlo7XG5cdFx0Y29uc3QgeiA9IG1hdHJpeFsyXSAqIHZYICsgbWF0cml4WzZdICogdlkgKyBtYXRyaXhbMTBdICogdlo7XG5cblx0XHRyZXN1bHQueCA9IHg7XG5cdFx0cmVzdWx0LnkgPSB5O1xuXHRcdHJlc3VsdC56ID0gejtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIG11bHRpcGx5QnlQb2ludChtYXRyaXg6IE1hdHJpeDQsIGNhcnRlc2lhbjogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XG5cdFx0Y29uc3QgdlggPSBjYXJ0ZXNpYW4ueDtcblx0XHRjb25zdCB2WSA9IGNhcnRlc2lhbi55O1xuXHRcdGNvbnN0IHZaID0gY2FydGVzaWFuLno7XG5cblx0XHRjb25zdCB4ID0gbWF0cml4WzBdICogdlggKyBtYXRyaXhbNF0gKiB2WSArIG1hdHJpeFs4XSAqIHZaICsgbWF0cml4WzEyXTtcblx0XHRjb25zdCB5ID0gbWF0cml4WzFdICogdlggKyBtYXRyaXhbNV0gKiB2WSArIG1hdHJpeFs5XSAqIHZaICsgbWF0cml4WzEzXTtcblx0XHRjb25zdCB6ID0gbWF0cml4WzJdICogdlggKyBtYXRyaXhbNl0gKiB2WSArIG1hdHJpeFsxMF0gKiB2WiArIG1hdHJpeFsxNF07XG5cblx0XHRyZXN1bHQueCA9IHg7XG5cdFx0cmVzdWx0LnkgPSB5O1xuXHRcdHJlc3VsdC56ID0gejtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIG11bHRpcGx5QnlTY2FsYXIobWF0cml4OiBNYXRyaXg0LCBzY2FsYXI6IG51bWJlciwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdICogc2NhbGFyO1xuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl0gKiBzY2FsYXI7XG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdICogc2NhbGFyO1xuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeFs0XSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbNV0gPSBtYXRyaXhbNV0gKiBzY2FsYXI7XG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdICogc2NhbGFyO1xuXHRcdHJlc3VsdFs3XSA9IG1hdHJpeFs3XSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbOF0gPSBtYXRyaXhbOF0gKiBzY2FsYXI7XG5cdFx0cmVzdWx0WzldID0gbWF0cml4WzldICogc2NhbGFyO1xuXHRcdHJlc3VsdFsxMF0gPSBtYXRyaXhbMTBdICogc2NhbGFyO1xuXHRcdHJlc3VsdFsxMV0gPSBtYXRyaXhbMTFdICogc2NhbGFyO1xuXHRcdHJlc3VsdFsxMl0gPSBtYXRyaXhbMTJdICogc2NhbGFyO1xuXHRcdHJlc3VsdFsxM10gPSBtYXRyaXhbMTNdICogc2NhbGFyO1xuXHRcdHJlc3VsdFsxNF0gPSBtYXRyaXhbMTRdICogc2NhbGFyO1xuXHRcdHJlc3VsdFsxNV0gPSBtYXRyaXhbMTVdICogc2NhbGFyO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgbmVnYXRlKG1hdHJpeDogTWF0cml4NCwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0cmVzdWx0WzBdID0gLW1hdHJpeFswXTtcblx0XHRyZXN1bHRbMV0gPSAtbWF0cml4WzFdO1xuXHRcdHJlc3VsdFsyXSA9IC1tYXRyaXhbMl07XG5cdFx0cmVzdWx0WzNdID0gLW1hdHJpeFszXTtcblx0XHRyZXN1bHRbNF0gPSAtbWF0cml4WzRdO1xuXHRcdHJlc3VsdFs1XSA9IC1tYXRyaXhbNV07XG5cdFx0cmVzdWx0WzZdID0gLW1hdHJpeFs2XTtcblx0XHRyZXN1bHRbN10gPSAtbWF0cml4WzddO1xuXHRcdHJlc3VsdFs4XSA9IC1tYXRyaXhbOF07XG5cdFx0cmVzdWx0WzldID0gLW1hdHJpeFs5XTtcblx0XHRyZXN1bHRbMTBdID0gLW1hdHJpeFsxMF07XG5cdFx0cmVzdWx0WzExXSA9IC1tYXRyaXhbMTFdO1xuXHRcdHJlc3VsdFsxMl0gPSAtbWF0cml4WzEyXTtcblx0XHRyZXN1bHRbMTNdID0gLW1hdHJpeFsxM107XG5cdFx0cmVzdWx0WzE0XSA9IC1tYXRyaXhbMTRdO1xuXHRcdHJlc3VsdFsxNV0gPSAtbWF0cml4WzE1XTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIHRyYW5zcG9zZShtYXRyaXg6IE1hdHJpeDQsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdGNvbnN0IG1hdHJpeDEgPSBtYXRyaXhbMV07XG5cdFx0Y29uc3QgbWF0cml4MiA9IG1hdHJpeFsyXTtcblx0XHRjb25zdCBtYXRyaXgzID0gbWF0cml4WzNdO1xuXHRcdGNvbnN0IG1hdHJpeDYgPSBtYXRyaXhbNl07XG5cdFx0Y29uc3QgbWF0cml4NyA9IG1hdHJpeFs3XTtcblx0XHRjb25zdCBtYXRyaXgxMSA9IG1hdHJpeFsxMV07XG5cblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF07XG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzRdO1xuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFs4XTtcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbMTJdO1xuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeDE7XG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdO1xuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs5XTtcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbMTNdO1xuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeDI7XG5cdFx0cmVzdWx0WzldID0gbWF0cml4Njtcblx0XHRyZXN1bHRbMTBdID0gbWF0cml4WzEwXTtcblx0XHRyZXN1bHRbMTFdID0gbWF0cml4WzE0XTtcblx0XHRyZXN1bHRbMTJdID0gbWF0cml4Mztcblx0XHRyZXN1bHRbMTNdID0gbWF0cml4Nztcblx0XHRyZXN1bHRbMTRdID0gbWF0cml4MTE7XG5cdFx0cmVzdWx0WzE1XSA9IG1hdHJpeFsxNV07XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBhYnMobWF0cml4OiBNYXRyaXg0LCByZXN1bHQ6IE1hdHJpeDQpIHtcblx0XHRyZXN1bHRbMF0gPSBNYXRoLmFicyhtYXRyaXhbMF0pO1xuXHRcdHJlc3VsdFsxXSA9IE1hdGguYWJzKG1hdHJpeFsxXSk7XG5cdFx0cmVzdWx0WzJdID0gTWF0aC5hYnMobWF0cml4WzJdKTtcblx0XHRyZXN1bHRbM10gPSBNYXRoLmFicyhtYXRyaXhbM10pO1xuXHRcdHJlc3VsdFs0XSA9IE1hdGguYWJzKG1hdHJpeFs0XSk7XG5cdFx0cmVzdWx0WzVdID0gTWF0aC5hYnMobWF0cml4WzVdKTtcblx0XHRyZXN1bHRbNl0gPSBNYXRoLmFicyhtYXRyaXhbNl0pO1xuXHRcdHJlc3VsdFs3XSA9IE1hdGguYWJzKG1hdHJpeFs3XSk7XG5cdFx0cmVzdWx0WzhdID0gTWF0aC5hYnMobWF0cml4WzhdKTtcblx0XHRyZXN1bHRbOV0gPSBNYXRoLmFicyhtYXRyaXhbOV0pO1xuXHRcdHJlc3VsdFsxMF0gPSBNYXRoLmFicyhtYXRyaXhbMTBdKTtcblx0XHRyZXN1bHRbMTFdID0gTWF0aC5hYnMobWF0cml4WzExXSk7XG5cdFx0cmVzdWx0WzEyXSA9IE1hdGguYWJzKG1hdHJpeFsxMl0pO1xuXHRcdHJlc3VsdFsxM10gPSBNYXRoLmFicyhtYXRyaXhbMTNdKTtcblx0XHRyZXN1bHRbMTRdID0gTWF0aC5hYnMobWF0cml4WzE0XSk7XG5cdFx0cmVzdWx0WzE1XSA9IE1hdGguYWJzKG1hdHJpeFsxNV0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBlcXVhbHMobGVmdDogTWF0cml4NCwgcmlnaHQ6IE1hdHJpeDQpOiBib29sZWFuIHtcblx0XHQvLyBHaXZlbiB0aGF0IG1vc3QgbWF0cmljZXMgd2lsbCBiZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaWNlcywgdGhlIGVsZW1lbnRzXG5cdFx0Ly8gYXJlIHRlc3RlZCBpbiBvcmRlciBzdWNoIHRoYXQgdGhlIHRlc3QgaXMgbGlrZWx5IHRvIGZhaWwgYXMgZWFybHlcblx0XHQvLyBhcyBwb3NzaWJsZS4gIEkgX3RoaW5rXyB0aGlzIGlzIGp1c3QgYXMgZnJpZW5kbHkgdG8gdGhlIEwxIGNhY2hlXG5cdFx0Ly8gYXMgdGVzdGluZyBpbiBpbmRleCBvcmRlci4gIEl0IGlzIGNlcnRhaW50eSBmYXN0ZXIgaW4gcHJhY3RpY2UuXG5cdFx0cmV0dXJuIChcblx0XHRcdGxlZnQgPT09IHJpZ2h0IHx8XG5cdFx0XHQoZGVmaW5lZChsZWZ0KSAmJlxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxuXHRcdFx0XHQvLyBUcmFuc2xhdGlvblxuXHRcdFx0XHRsZWZ0WzEyXSA9PT0gcmlnaHRbMTJdICYmXG5cdFx0XHRcdGxlZnRbMTNdID09PSByaWdodFsxM10gJiZcblx0XHRcdFx0bGVmdFsxNF0gPT09IHJpZ2h0WzE0XSAmJlxuXHRcdFx0XHQvLyBSb3RhdGlvbi9zY2FsZVxuXHRcdFx0XHRsZWZ0WzBdID09PSByaWdodFswXSAmJlxuXHRcdFx0XHRsZWZ0WzFdID09PSByaWdodFsxXSAmJlxuXHRcdFx0XHRsZWZ0WzJdID09PSByaWdodFsyXSAmJlxuXHRcdFx0XHRsZWZ0WzRdID09PSByaWdodFs0XSAmJlxuXHRcdFx0XHRsZWZ0WzVdID09PSByaWdodFs1XSAmJlxuXHRcdFx0XHRsZWZ0WzZdID09PSByaWdodFs2XSAmJlxuXHRcdFx0XHRsZWZ0WzhdID09PSByaWdodFs4XSAmJlxuXHRcdFx0XHRsZWZ0WzldID09PSByaWdodFs5XSAmJlxuXHRcdFx0XHRsZWZ0WzEwXSA9PT0gcmlnaHRbMTBdICYmXG5cdFx0XHRcdC8vIEJvdHRvbSByb3dcblx0XHRcdFx0bGVmdFszXSA9PT0gcmlnaHRbM10gJiZcblx0XHRcdFx0bGVmdFs3XSA9PT0gcmlnaHRbN10gJiZcblx0XHRcdFx0bGVmdFsxMV0gPT09IHJpZ2h0WzExXSAmJlxuXHRcdFx0XHRsZWZ0WzE1XSA9PT0gcmlnaHRbMTVdKVxuXHRcdCk7XG5cdH1cblxuXHRzdGF0aWMgZXF1YWxzRXBzaWxvbihsZWZ0OiBNYXRyaXg0LCByaWdodDogTWF0cml4NCwgZXBzaWxvbjogbnVtYmVyKTogYm9vbGVhbiB7XG5cdFx0ZXBzaWxvbiA9IGRlZmF1bHRWYWx1ZShlcHNpbG9uLCAwKTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHRsZWZ0ID09PSByaWdodCB8fFxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcblx0XHRcdFx0ZGVmaW5lZChyaWdodCkgJiZcblx0XHRcdFx0TWF0aC5hYnMobGVmdFswXSAtIHJpZ2h0WzBdKSA8PSBlcHNpbG9uICYmXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMV0gLSByaWdodFsxXSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzJdIC0gcmlnaHRbMl0pIDw9IGVwc2lsb24gJiZcblx0XHRcdFx0TWF0aC5hYnMobGVmdFszXSAtIHJpZ2h0WzNdKSA8PSBlcHNpbG9uICYmXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbNF0gLSByaWdodFs0XSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzVdIC0gcmlnaHRbNV0pIDw9IGVwc2lsb24gJiZcblx0XHRcdFx0TWF0aC5hYnMobGVmdFs2XSAtIHJpZ2h0WzZdKSA8PSBlcHNpbG9uICYmXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbN10gLSByaWdodFs3XSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzhdIC0gcmlnaHRbOF0pIDw9IGVwc2lsb24gJiZcblx0XHRcdFx0TWF0aC5hYnMobGVmdFs5XSAtIHJpZ2h0WzldKSA8PSBlcHNpbG9uICYmXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMTBdIC0gcmlnaHRbMTBdKSA8PSBlcHNpbG9uICYmXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMTFdIC0gcmlnaHRbMTFdKSA8PSBlcHNpbG9uICYmXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMTJdIC0gcmlnaHRbMTJdKSA8PSBlcHNpbG9uICYmXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMTNdIC0gcmlnaHRbMTNdKSA8PSBlcHNpbG9uICYmXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMTRdIC0gcmlnaHRbMTRdKSA8PSBlcHNpbG9uICYmXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMTVdIC0gcmlnaHRbMTVdKSA8PSBlcHNpbG9uKVxuXHRcdCk7XG5cdH1cblxuXHRzdGF0aWMgZ2V0VHJhbnNsYXRpb24obWF0cml4OiBNYXRyaXg0LCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcblx0XHRyZXN1bHQueCA9IG1hdHJpeFsxMl07XG5cdFx0cmVzdWx0LnkgPSBtYXRyaXhbMTNdO1xuXHRcdHJlc3VsdC56ID0gbWF0cml4WzE0XTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIGdldE1hdHJpeDMobWF0cml4OiBNYXRyaXg0LCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF07XG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdO1xuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXTtcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbNF07XG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzVdO1xuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs2XTtcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXhbOF07XG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzldO1xuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeFsxMF07XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBpbnZlcnNlKG1hdHJpeDogTWF0cml4NCwgcmVzdWx0OiBNYXRyaXg0KSB7XG5cdFx0Ly9cblx0XHQvLyBQb3J0ZWQgZnJvbTpcblx0XHQvLyAgIGZ0cDovL2Rvd25sb2FkLmludGVsLmNvbS9kZXNpZ24vUGVudGl1bUlJSS9zbWwvMjQ1MDQzMDEucGRmXG5cdFx0Ly9cblx0XHRjb25zdCBzcmMwID0gbWF0cml4WzBdO1xuXHRcdGNvbnN0IHNyYzEgPSBtYXRyaXhbNF07XG5cdFx0Y29uc3Qgc3JjMiA9IG1hdHJpeFs4XTtcblx0XHRjb25zdCBzcmMzID0gbWF0cml4WzEyXTtcblx0XHRjb25zdCBzcmM0ID0gbWF0cml4WzFdO1xuXHRcdGNvbnN0IHNyYzUgPSBtYXRyaXhbNV07XG5cdFx0Y29uc3Qgc3JjNiA9IG1hdHJpeFs5XTtcblx0XHRjb25zdCBzcmM3ID0gbWF0cml4WzEzXTtcblx0XHRjb25zdCBzcmM4ID0gbWF0cml4WzJdO1xuXHRcdGNvbnN0IHNyYzkgPSBtYXRyaXhbNl07XG5cdFx0Y29uc3Qgc3JjMTAgPSBtYXRyaXhbMTBdO1xuXHRcdGNvbnN0IHNyYzExID0gbWF0cml4WzE0XTtcblx0XHRjb25zdCBzcmMxMiA9IG1hdHJpeFszXTtcblx0XHRjb25zdCBzcmMxMyA9IG1hdHJpeFs3XTtcblx0XHRjb25zdCBzcmMxNCA9IG1hdHJpeFsxMV07XG5cdFx0Y29uc3Qgc3JjMTUgPSBtYXRyaXhbMTVdO1xuXG5cdFx0Ly8gY2FsY3VsYXRlIHBhaXJzIGZvciBmaXJzdCA4IGVsZW1lbnRzIChjb2ZhY3RvcnMpXG5cdFx0bGV0IHRtcDAgPSBzcmMxMCAqIHNyYzE1O1xuXHRcdGxldCB0bXAxID0gc3JjMTEgKiBzcmMxNDtcblx0XHRsZXQgdG1wMiA9IHNyYzkgKiBzcmMxNTtcblx0XHRsZXQgdG1wMyA9IHNyYzExICogc3JjMTM7XG5cdFx0bGV0IHRtcDQgPSBzcmM5ICogc3JjMTQ7XG5cdFx0bGV0IHRtcDUgPSBzcmMxMCAqIHNyYzEzO1xuXHRcdGxldCB0bXA2ID0gc3JjOCAqIHNyYzE1O1xuXHRcdGxldCB0bXA3ID0gc3JjMTEgKiBzcmMxMjtcblx0XHRsZXQgdG1wOCA9IHNyYzggKiBzcmMxNDtcblx0XHRsZXQgdG1wOSA9IHNyYzEwICogc3JjMTI7XG5cdFx0bGV0IHRtcDEwID0gc3JjOCAqIHNyYzEzO1xuXHRcdGxldCB0bXAxMSA9IHNyYzkgKiBzcmMxMjtcblxuXHRcdC8vIGNhbGN1bGF0ZSBmaXJzdCA4IGVsZW1lbnRzIChjb2ZhY3RvcnMpXG5cdFx0Y29uc3QgZHN0MCA9IHRtcDAgKiBzcmM1ICsgdG1wMyAqIHNyYzYgKyB0bXA0ICogc3JjNyAtICh0bXAxICogc3JjNSArIHRtcDIgKiBzcmM2ICsgdG1wNSAqIHNyYzcpO1xuXHRcdGNvbnN0IGRzdDEgPSB0bXAxICogc3JjNCArIHRtcDYgKiBzcmM2ICsgdG1wOSAqIHNyYzcgLSAodG1wMCAqIHNyYzQgKyB0bXA3ICogc3JjNiArIHRtcDggKiBzcmM3KTtcblx0XHRjb25zdCBkc3QyID0gdG1wMiAqIHNyYzQgKyB0bXA3ICogc3JjNSArIHRtcDEwICogc3JjNyAtICh0bXAzICogc3JjNCArIHRtcDYgKiBzcmM1ICsgdG1wMTEgKiBzcmM3KTtcblx0XHRjb25zdCBkc3QzID0gdG1wNSAqIHNyYzQgKyB0bXA4ICogc3JjNSArIHRtcDExICogc3JjNiAtICh0bXA0ICogc3JjNCArIHRtcDkgKiBzcmM1ICsgdG1wMTAgKiBzcmM2KTtcblx0XHRjb25zdCBkc3Q0ID0gdG1wMSAqIHNyYzEgKyB0bXAyICogc3JjMiArIHRtcDUgKiBzcmMzIC0gKHRtcDAgKiBzcmMxICsgdG1wMyAqIHNyYzIgKyB0bXA0ICogc3JjMyk7XG5cdFx0Y29uc3QgZHN0NSA9IHRtcDAgKiBzcmMwICsgdG1wNyAqIHNyYzIgKyB0bXA4ICogc3JjMyAtICh0bXAxICogc3JjMCArIHRtcDYgKiBzcmMyICsgdG1wOSAqIHNyYzMpO1xuXHRcdGNvbnN0IGRzdDYgPSB0bXAzICogc3JjMCArIHRtcDYgKiBzcmMxICsgdG1wMTEgKiBzcmMzIC0gKHRtcDIgKiBzcmMwICsgdG1wNyAqIHNyYzEgKyB0bXAxMCAqIHNyYzMpO1xuXHRcdGNvbnN0IGRzdDcgPSB0bXA0ICogc3JjMCArIHRtcDkgKiBzcmMxICsgdG1wMTAgKiBzcmMyIC0gKHRtcDUgKiBzcmMwICsgdG1wOCAqIHNyYzEgKyB0bXAxMSAqIHNyYzIpO1xuXG5cdFx0Ly8gY2FsY3VsYXRlIHBhaXJzIGZvciBzZWNvbmQgOCBlbGVtZW50cyAoY29mYWN0b3JzKVxuXHRcdHRtcDAgPSBzcmMyICogc3JjNztcblx0XHR0bXAxID0gc3JjMyAqIHNyYzY7XG5cdFx0dG1wMiA9IHNyYzEgKiBzcmM3O1xuXHRcdHRtcDMgPSBzcmMzICogc3JjNTtcblx0XHR0bXA0ID0gc3JjMSAqIHNyYzY7XG5cdFx0dG1wNSA9IHNyYzIgKiBzcmM1O1xuXHRcdHRtcDYgPSBzcmMwICogc3JjNztcblx0XHR0bXA3ID0gc3JjMyAqIHNyYzQ7XG5cdFx0dG1wOCA9IHNyYzAgKiBzcmM2O1xuXHRcdHRtcDkgPSBzcmMyICogc3JjNDtcblx0XHR0bXAxMCA9IHNyYzAgKiBzcmM1O1xuXHRcdHRtcDExID0gc3JjMSAqIHNyYzQ7XG5cblx0XHQvLyBjYWxjdWxhdGUgc2Vjb25kIDggZWxlbWVudHMgKGNvZmFjdG9ycylcblx0XHRjb25zdCBkc3Q4ID0gdG1wMCAqIHNyYzEzICsgdG1wMyAqIHNyYzE0ICsgdG1wNCAqIHNyYzE1IC0gKHRtcDEgKiBzcmMxMyArIHRtcDIgKiBzcmMxNCArIHRtcDUgKiBzcmMxNSk7XG5cdFx0Y29uc3QgZHN0OSA9IHRtcDEgKiBzcmMxMiArIHRtcDYgKiBzcmMxNCArIHRtcDkgKiBzcmMxNSAtICh0bXAwICogc3JjMTIgKyB0bXA3ICogc3JjMTQgKyB0bXA4ICogc3JjMTUpO1xuXHRcdGNvbnN0IGRzdDEwID0gdG1wMiAqIHNyYzEyICsgdG1wNyAqIHNyYzEzICsgdG1wMTAgKiBzcmMxNSAtICh0bXAzICogc3JjMTIgKyB0bXA2ICogc3JjMTMgKyB0bXAxMSAqIHNyYzE1KTtcblx0XHRjb25zdCBkc3QxMSA9IHRtcDUgKiBzcmMxMiArIHRtcDggKiBzcmMxMyArIHRtcDExICogc3JjMTQgLSAodG1wNCAqIHNyYzEyICsgdG1wOSAqIHNyYzEzICsgdG1wMTAgKiBzcmMxNCk7XG5cdFx0Y29uc3QgZHN0MTIgPSB0bXAyICogc3JjMTAgKyB0bXA1ICogc3JjMTEgKyB0bXAxICogc3JjOSAtICh0bXA0ICogc3JjMTEgKyB0bXAwICogc3JjOSArIHRtcDMgKiBzcmMxMCk7XG5cdFx0Y29uc3QgZHN0MTMgPSB0bXA4ICogc3JjMTEgKyB0bXAwICogc3JjOCArIHRtcDcgKiBzcmMxMCAtICh0bXA2ICogc3JjMTAgKyB0bXA5ICogc3JjMTEgKyB0bXAxICogc3JjOCk7XG5cdFx0Y29uc3QgZHN0MTQgPSB0bXA2ICogc3JjOSArIHRtcDExICogc3JjMTEgKyB0bXAzICogc3JjOCAtICh0bXAxMCAqIHNyYzExICsgdG1wMiAqIHNyYzggKyB0bXA3ICogc3JjOSk7XG5cdFx0Y29uc3QgZHN0MTUgPSB0bXAxMCAqIHNyYzEwICsgdG1wNCAqIHNyYzggKyB0bXA5ICogc3JjOSAtICh0bXA4ICogc3JjOSArIHRtcDExICogc3JjMTAgKyB0bXA1ICogc3JjOCk7XG5cblx0XHQvLyBjYWxjdWxhdGUgZGV0ZXJtaW5hbnRcblx0XHRsZXQgZGV0ID0gc3JjMCAqIGRzdDAgKyBzcmMxICogZHN0MSArIHNyYzIgKiBkc3QyICsgc3JjMyAqIGRzdDM7XG5cblx0XHRpZiAoTWF0aC5hYnMoZGV0KSA8IEdNYXRoLkVQU0lMT04yMSkge1xuXHRcdFx0Ly8gU3BlY2lhbCBjYXNlIGZvciBhIHplcm8gc2NhbGUgbWF0cml4IHRoYXQgY2FuIG9jY3VyLCBmb3IgZXhhbXBsZSxcblx0XHRcdC8vIHdoZW4gYSBtb2RlbCdzIG5vZGUgaGFzIGEgWzAsIDAsIDBdIHNjYWxlLlxuXHRcdFx0aWYgKFxuXHRcdFx0XHRNYXRyaXgzLmVxdWFsc0Vwc2lsb24oXG5cdFx0XHRcdFx0TWF0cml4NC5nZXRNYXRyaXgzKG1hdHJpeCwgc2NyYXRjaEludmVyc2VSb3RhdGlvbiksXG5cdFx0XHRcdFx0c2NyYXRjaE1hdHJpeDNaZXJvLFxuXHRcdFx0XHRcdEdNYXRoLkVQU0lMT043XG5cdFx0XHRcdCkgJiZcblx0XHRcdFx0VmVjdG9yNC5lcXVhbHMoTWF0cml4NC5nZXRSb3cobWF0cml4LCAzLCBzY3JhdGNoQm90dG9tUm93KSwgc2NyYXRjaEV4cGVjdGVkQm90dG9tUm93KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJlc3VsdFswXSA9IDAuMDtcblx0XHRcdFx0cmVzdWx0WzFdID0gMC4wO1xuXHRcdFx0XHRyZXN1bHRbMl0gPSAwLjA7XG5cdFx0XHRcdHJlc3VsdFszXSA9IDAuMDtcblx0XHRcdFx0cmVzdWx0WzRdID0gMC4wO1xuXHRcdFx0XHRyZXN1bHRbNV0gPSAwLjA7XG5cdFx0XHRcdHJlc3VsdFs2XSA9IDAuMDtcblx0XHRcdFx0cmVzdWx0WzddID0gMC4wO1xuXHRcdFx0XHRyZXN1bHRbOF0gPSAwLjA7XG5cdFx0XHRcdHJlc3VsdFs5XSA9IDAuMDtcblx0XHRcdFx0cmVzdWx0WzEwXSA9IDAuMDtcblx0XHRcdFx0cmVzdWx0WzExXSA9IDAuMDtcblx0XHRcdFx0cmVzdWx0WzEyXSA9IC1tYXRyaXhbMTJdO1xuXHRcdFx0XHRyZXN1bHRbMTNdID0gLW1hdHJpeFsxM107XG5cdFx0XHRcdHJlc3VsdFsxNF0gPSAtbWF0cml4WzE0XTtcblx0XHRcdFx0cmVzdWx0WzE1XSA9IDEuMDtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWF0cml4IGlzIG5vdCBpbnZlcnRpYmxlIGJlY2F1c2UgaXRzIGRldGVybWluYXRlIGlzIHplcm8uXCIpO1xuXHRcdH1cblxuXHRcdC8vIGNhbGN1bGF0ZSBtYXRyaXggaW52ZXJzZVxuXHRcdGRldCA9IDEuMCAvIGRldDtcblxuXHRcdHJlc3VsdFswXSA9IGRzdDAgKiBkZXQ7XG5cdFx0cmVzdWx0WzFdID0gZHN0MSAqIGRldDtcblx0XHRyZXN1bHRbMl0gPSBkc3QyICogZGV0O1xuXHRcdHJlc3VsdFszXSA9IGRzdDMgKiBkZXQ7XG5cdFx0cmVzdWx0WzRdID0gZHN0NCAqIGRldDtcblx0XHRyZXN1bHRbNV0gPSBkc3Q1ICogZGV0O1xuXHRcdHJlc3VsdFs2XSA9IGRzdDYgKiBkZXQ7XG5cdFx0cmVzdWx0WzddID0gZHN0NyAqIGRldDtcblx0XHRyZXN1bHRbOF0gPSBkc3Q4ICogZGV0O1xuXHRcdHJlc3VsdFs5XSA9IGRzdDkgKiBkZXQ7XG5cdFx0cmVzdWx0WzEwXSA9IGRzdDEwICogZGV0O1xuXHRcdHJlc3VsdFsxMV0gPSBkc3QxMSAqIGRldDtcblx0XHRyZXN1bHRbMTJdID0gZHN0MTIgKiBkZXQ7XG5cdFx0cmVzdWx0WzEzXSA9IGRzdDEzICogZGV0O1xuXHRcdHJlc3VsdFsxNF0gPSBkc3QxNCAqIGRldDtcblx0XHRyZXN1bHRbMTVdID0gZHN0MTUgKiBkZXQ7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBpbnZlcnNlVHJhbnNmb3JtYXRpb24obWF0cml4OiBNYXRyaXg0LCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHQvLyBUaGlzIGZ1bmN0aW9uIGlzIGFuIG9wdGltaXplZCB2ZXJzaW9uIG9mIHRoZSBiZWxvdyA0IGxpbmVzLlxuXHRcdC8vIGNvbnN0IHJUID0gTWF0cml4My50cmFuc3Bvc2UoTWF0cml4NC5nZXRNYXRyaXgzKG1hdHJpeCkpO1xuXHRcdC8vIGNvbnN0IHJUTiA9IE1hdHJpeDMubmVnYXRlKHJUKTtcblx0XHQvLyBjb25zdCByVFQgPSBNYXRyaXgzLm11bHRpcGx5QnlWZWN0b3IoclROLCBNYXRyaXg0LmdldFRyYW5zbGF0aW9uKG1hdHJpeCkpO1xuXHRcdC8vIHJldHVybiBNYXRyaXg0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKHJULCByVFQsIHJlc3VsdCk7XG5cblx0XHRjb25zdCBtYXRyaXgwID0gbWF0cml4WzBdO1xuXHRcdGNvbnN0IG1hdHJpeDEgPSBtYXRyaXhbMV07XG5cdFx0Y29uc3QgbWF0cml4MiA9IG1hdHJpeFsyXTtcblx0XHRjb25zdCBtYXRyaXg0ID0gbWF0cml4WzRdO1xuXHRcdGNvbnN0IG1hdHJpeDUgPSBtYXRyaXhbNV07XG5cdFx0Y29uc3QgbWF0cml4NiA9IG1hdHJpeFs2XTtcblx0XHRjb25zdCBtYXRyaXg4ID0gbWF0cml4WzhdO1xuXHRcdGNvbnN0IG1hdHJpeDkgPSBtYXRyaXhbOV07XG5cdFx0Y29uc3QgbWF0cml4MTAgPSBtYXRyaXhbMTBdO1xuXG5cdFx0Y29uc3QgdlggPSBtYXRyaXhbMTJdO1xuXHRcdGNvbnN0IHZZID0gbWF0cml4WzEzXTtcblx0XHRjb25zdCB2WiA9IG1hdHJpeFsxNF07XG5cblx0XHRjb25zdCB4ID0gLW1hdHJpeDAgKiB2WCAtIG1hdHJpeDEgKiB2WSAtIG1hdHJpeDIgKiB2Wjtcblx0XHRjb25zdCB5ID0gLW1hdHJpeDQgKiB2WCAtIG1hdHJpeDUgKiB2WSAtIG1hdHJpeDYgKiB2Wjtcblx0XHRjb25zdCB6ID0gLW1hdHJpeDggKiB2WCAtIG1hdHJpeDkgKiB2WSAtIG1hdHJpeDEwICogdlo7XG5cblx0XHRyZXN1bHRbMF0gPSBtYXRyaXgwO1xuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeDQ7XG5cdFx0cmVzdWx0WzJdID0gbWF0cml4ODtcblx0XHRyZXN1bHRbM10gPSAwLjA7XG5cdFx0cmVzdWx0WzRdID0gbWF0cml4MTtcblx0XHRyZXN1bHRbNV0gPSBtYXRyaXg1O1xuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeDk7XG5cdFx0cmVzdWx0WzddID0gMC4wO1xuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeDI7XG5cdFx0cmVzdWx0WzldID0gbWF0cml4Njtcblx0XHRyZXN1bHRbMTBdID0gbWF0cml4MTA7XG5cdFx0cmVzdWx0WzExXSA9IDAuMDtcblx0XHRyZXN1bHRbMTJdID0geDtcblx0XHRyZXN1bHRbMTNdID0geTtcblx0XHRyZXN1bHRbMTRdID0gejtcblx0XHRyZXN1bHRbMTVdID0gMS4wO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgaW52ZXJzZVRyYW5zcG9zZShtYXRyaXg6IE1hdHJpeDQsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdHJldHVybiBNYXRyaXg0LmludmVyc2UoTWF0cml4NC50cmFuc3Bvc2UobWF0cml4LCBzY3JhdGNoVHJhbnNwb3NlTWF0cml4KSwgcmVzdWx0KTtcblx0fVxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHN0YXRpYyBlcXVhbHNBcnJheShtYXRyaXg6IE1hdHJpeDQsIGFycmF5OiBBcnJheTxudW1iZXI+LCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHRtYXRyaXhbMF0gPT09IGFycmF5W29mZnNldF0gJiZcblx0XHRcdG1hdHJpeFsxXSA9PT0gYXJyYXlbb2Zmc2V0ICsgMV0gJiZcblx0XHRcdG1hdHJpeFsyXSA9PT0gYXJyYXlbb2Zmc2V0ICsgMl0gJiZcblx0XHRcdG1hdHJpeFszXSA9PT0gYXJyYXlbb2Zmc2V0ICsgM10gJiZcblx0XHRcdG1hdHJpeFs0XSA9PT0gYXJyYXlbb2Zmc2V0ICsgNF0gJiZcblx0XHRcdG1hdHJpeFs1XSA9PT0gYXJyYXlbb2Zmc2V0ICsgNV0gJiZcblx0XHRcdG1hdHJpeFs2XSA9PT0gYXJyYXlbb2Zmc2V0ICsgNl0gJiZcblx0XHRcdG1hdHJpeFs3XSA9PT0gYXJyYXlbb2Zmc2V0ICsgN10gJiZcblx0XHRcdG1hdHJpeFs4XSA9PT0gYXJyYXlbb2Zmc2V0ICsgOF0gJiZcblx0XHRcdG1hdHJpeFs5XSA9PT0gYXJyYXlbb2Zmc2V0ICsgOV0gJiZcblx0XHRcdG1hdHJpeFsxMF0gPT09IGFycmF5W29mZnNldCArIDEwXSAmJlxuXHRcdFx0bWF0cml4WzExXSA9PT0gYXJyYXlbb2Zmc2V0ICsgMTFdICYmXG5cdFx0XHRtYXRyaXhbMTJdID09PSBhcnJheVtvZmZzZXQgKyAxMl0gJiZcblx0XHRcdG1hdHJpeFsxM10gPT09IGFycmF5W29mZnNldCArIDEzXSAmJlxuXHRcdFx0bWF0cml4WzE0XSA9PT0gYXJyYXlbb2Zmc2V0ICsgMTRdICYmXG5cdFx0XHRtYXRyaXhbMTVdID09PSBhcnJheVtvZmZzZXQgKyAxNV1cblx0XHQpO1xuXHR9XG59XG5cbmNvbnN0IHNjcmF0Y2hUcmFuc3Bvc2VNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuXG5jb25zdCBmcm9tQ2FtZXJhRiA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tQ2FtZXJhUiA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tQ2FtZXJhVSA9IG5ldyBWZWN0b3IzKCk7XG5cbmNvbnN0IHNjYWxlU2NyYXRjaDEgPSBuZXcgVmVjdG9yMygpO1xuY29uc3Qgc2NhbGVTY3JhdGNoMiA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBzY3JhdGNoQ29sdW1uID0gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IHNjYWxlU2NyYXRjaDMgPSBuZXcgVmVjdG9yMygpO1xuY29uc3Qgc2NhbGVTY3JhdGNoNCA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBzY2FsZVNjcmF0Y2g1ID0gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IHNjcmF0Y2hJbnZlcnNlUm90YXRpb24gPSBuZXcgTWF0cml4MygpO1xuY29uc3Qgc2NyYXRjaE1hdHJpeDNaZXJvID0gbmV3IE1hdHJpeDMoKTtcbmNvbnN0IHNjcmF0Y2hCb3R0b21Sb3cgPSBuZXcgVmVjdG9yNCgpO1xuY29uc3Qgc2NyYXRjaEV4cGVjdGVkQm90dG9tUm93ID0gbmV3IFZlY3RvcjQoMC4wLCAwLjAsIDAuMCwgMS4wKTtcbmNvbnN0IHggPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgeSA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCB6ID0gbmV3IFZlY3RvcjMoKTtcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeDQ7XG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gXCIuLi9tYXRoL01hdHJpeDRcIjtcclxuaW1wb3J0IFBsYW5lIGZyb20gXCIuLi9tYXRoL1BsYW5lXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuaW1wb3J0IGRlZmF1bHRWYWx1ZSBmcm9tIFwiLi4vdXRpbHMvZGVmYXVsdFZhbHVlXCI7XHJcbmltcG9ydCBkZWZpbmVkIGZyb20gXCIuLi91dGlscy9kZWZpbmVkXCI7XHJcbmltcG9ydCB7IEludGVyc2VjdCB9IGZyb20gXCIuL1dlYkdQVUNvbnN0YW50XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb3VuZGluZ1NwaGVyZSB7XHJcblx0cmFkaXVzOiBudW1iZXI7XHJcblx0Y2VudGVyOiBWZWN0b3IzO1xyXG5cdG9yaWdpblJhZGl1czogbnVtYmVyO1xyXG5cdG9yaWdpbkNlbnRlcjogVmVjdG9yMztcclxuXHRjb25zdHJ1Y3RvcihjZW50ZXI6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygwLCAwLCAwKSwgcmFkaXVzID0gMCkge1xyXG5cdFx0dGhpcy5jZW50ZXIgPSBjZW50ZXI7XHJcblx0XHR0aGlzLnJhZGl1cyA9IHJhZGl1cztcclxuXHRcdHRoaXMub3JpZ2luQ2VudGVyID0gdGhpcy5jZW50ZXIuY2xvbmUoKTtcclxuXHRcdHRoaXMub3JpZ2luUmFkaXVzID0gcmFkaXVzO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBAcGFyYW0ge1ZlY3RvcjNbXX0gW3Bvc2l0aW9uc10gQW4gYXJyYXkgb2YgcG9pbnRzIHRoYXQgdGhlIGJvdW5kaW5nIHNwaGVyZSB3aWxsIGVuY2xvc2UuICBFYWNoIHBvaW50IG11c3QgaGF2ZSA8Y29kZT54PC9jb2RlPiwgPGNvZGU+eTwvY29kZT4sIGFuZCA8Y29kZT56PC9jb2RlPiBwcm9wZXJ0aWVzLlxyXG5cdCAqIEByZXR1cm5zIHtCb3VuZGluZ1NwaGVyZX0gVGhlIG1vZGlmaWVkIHJlc3VsdCBwYXJhbWV0ZXIgb3IgYSBuZXcgQm91bmRpbmdTcGhlcmUgaW5zdGFuY2UgaWYgb25lIHdhcyBub3QgcHJvdmlkZWQuXHJcblx0ICovXHJcblx0c3RhdGljIGZyb21Qb2ludHMocG9zaXRpb25zOiBWZWN0b3IzW10pIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBCb3VuZGluZ1NwaGVyZSgpO1xyXG5cclxuXHRcdGlmICghZGVmaW5lZChwb3NpdGlvbnMpIHx8IHBvc2l0aW9ucy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0cmVzdWx0LmNlbnRlciA9IFZlY3RvcjMuY2xvbmUoVmVjdG9yMy5aRVJPLCByZXN1bHQuY2VudGVyKTtcclxuXHRcdFx0cmVzdWx0LnJhZGl1cyA9IDAuMDtcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBjdXJyZW50UG9zID0gVmVjdG9yMy5jbG9uZShwb3NpdGlvbnNbMF0sIGZyb21Qb2ludHNDdXJyZW50UG9zKTtcclxuXHJcblx0XHRjb25zdCB4TWluID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWE1pbik7XHJcblx0XHRjb25zdCB5TWluID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWU1pbik7XHJcblx0XHRjb25zdCB6TWluID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWk1pbik7XHJcblxyXG5cdFx0Y29uc3QgeE1heCA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1hNYXgpO1xyXG5cdFx0Y29uc3QgeU1heCA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1lNYXgpO1xyXG5cdFx0Y29uc3Qgek1heCA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1pNYXgpO1xyXG5cclxuXHRcdGNvbnN0IG51bVBvc2l0aW9ucyA9IHBvc2l0aW9ucy5sZW5ndGg7XHJcblx0XHRsZXQgaTtcclxuXHRcdGZvciAoaSA9IDE7IGkgPCBudW1Qb3NpdGlvbnM7IGkrKykge1xyXG5cdFx0XHRWZWN0b3IzLmNsb25lKHBvc2l0aW9uc1tpXSwgY3VycmVudFBvcyk7XHJcblxyXG5cdFx0XHRjb25zdCB4ID0gY3VycmVudFBvcy54O1xyXG5cdFx0XHRjb25zdCB5ID0gY3VycmVudFBvcy55O1xyXG5cdFx0XHRjb25zdCB6ID0gY3VycmVudFBvcy56O1xyXG5cclxuXHRcdFx0Ly8gU3RvcmUgcG9pbnRzIGNvbnRhaW5pbmcgdGhlIHRoZSBzbWFsbGVzdCBhbmQgbGFyZ2VzdCBjb21wb25lbnRzXHJcblx0XHRcdGlmICh4IDwgeE1pbi54KSB7XHJcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB4TWluKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHggPiB4TWF4LngpIHtcclxuXHRcdFx0XHRWZWN0b3IzLmNsb25lKGN1cnJlbnRQb3MsIHhNYXgpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoeSA8IHlNaW4ueSkge1xyXG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgeU1pbik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh5ID4geU1heC55KSB7XHJcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB5TWF4KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHogPCB6TWluLnopIHtcclxuXHRcdFx0XHRWZWN0b3IzLmNsb25lKGN1cnJlbnRQb3MsIHpNaW4pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoeiA+IHpNYXgueikge1xyXG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgek1heCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBDb21wdXRlIHgtLCB5LSwgYW5kIHotc3BhbnMgKFNxdWFyZWQgZGlzdGFuY2VzIGIvbiBlYWNoIGNvbXBvbmVudCdzIG1pbi4gYW5kIG1heC4pLlxyXG5cdFx0Y29uc3QgeFNwYW4gPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yMy5zdWJ0cmFjdCh4TWF4LCB4TWluLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xyXG5cdFx0Y29uc3QgeVNwYW4gPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yMy5zdWJ0cmFjdCh5TWF4LCB5TWluLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xyXG5cdFx0Y29uc3QgelNwYW4gPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yMy5zdWJ0cmFjdCh6TWF4LCB6TWluLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xyXG5cclxuXHRcdC8vIFNldCB0aGUgZGlhbWV0ZXIgZW5kcG9pbnRzIHRvIHRoZSBsYXJnZXN0IHNwYW4uXHJcblx0XHRsZXQgZGlhbWV0ZXIxID0geE1pbjtcclxuXHRcdGxldCBkaWFtZXRlcjIgPSB4TWF4O1xyXG5cdFx0bGV0IG1heFNwYW4gPSB4U3BhbjtcclxuXHRcdGlmICh5U3BhbiA+IG1heFNwYW4pIHtcclxuXHRcdFx0bWF4U3BhbiA9IHlTcGFuO1xyXG5cdFx0XHRkaWFtZXRlcjEgPSB5TWluO1xyXG5cdFx0XHRkaWFtZXRlcjIgPSB5TWF4O1xyXG5cdFx0fVxyXG5cdFx0aWYgKHpTcGFuID4gbWF4U3Bhbikge1xyXG5cdFx0XHRtYXhTcGFuID0gelNwYW47XHJcblx0XHRcdGRpYW1ldGVyMSA9IHpNaW47XHJcblx0XHRcdGRpYW1ldGVyMiA9IHpNYXg7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2FsY3VsYXRlIHRoZSBjZW50ZXIgb2YgdGhlIGluaXRpYWwgc3BoZXJlIGZvdW5kIGJ5IFJpdHRlcidzIGFsZ29yaXRobVxyXG5cdFx0Y29uc3Qgcml0dGVyQ2VudGVyID0gZnJvbVBvaW50c1JpdHRlckNlbnRlcjtcclxuXHRcdHJpdHRlckNlbnRlci54ID0gKGRpYW1ldGVyMS54ICsgZGlhbWV0ZXIyLngpICogMC41O1xyXG5cdFx0cml0dGVyQ2VudGVyLnkgPSAoZGlhbWV0ZXIxLnkgKyBkaWFtZXRlcjIueSkgKiAwLjU7XHJcblx0XHRyaXR0ZXJDZW50ZXIueiA9IChkaWFtZXRlcjEueiArIGRpYW1ldGVyMi56KSAqIDAuNTtcclxuXHJcblx0XHQvLyBDYWxjdWxhdGUgdGhlIHJhZGl1cyBvZiB0aGUgaW5pdGlhbCBzcGhlcmUgZm91bmQgYnkgUml0dGVyJ3MgYWxnb3JpdGhtXHJcblx0XHRsZXQgcmFkaXVzU3F1YXJlZCA9IFZlY3RvcjMubWFnbml0dWRlU3F1YXJlZChWZWN0b3IzLnN1YnRyYWN0KGRpYW1ldGVyMiwgcml0dGVyQ2VudGVyLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xyXG5cdFx0bGV0IHJpdHRlclJhZGl1cyA9IE1hdGguc3FydChyYWRpdXNTcXVhcmVkKTtcclxuXHJcblx0XHQvLyBGaW5kIHRoZSBjZW50ZXIgb2YgdGhlIHNwaGVyZSBmb3VuZCB1c2luZyB0aGUgTmFpdmUgbWV0aG9kLlxyXG5cdFx0Y29uc3QgbWluQm94UHQgPSBmcm9tUG9pbnRzTWluQm94UHQ7XHJcblx0XHRtaW5Cb3hQdC54ID0geE1pbi54O1xyXG5cdFx0bWluQm94UHQueSA9IHlNaW4ueTtcclxuXHRcdG1pbkJveFB0LnogPSB6TWluLno7XHJcblxyXG5cdFx0Y29uc3QgbWF4Qm94UHQgPSBmcm9tUG9pbnRzTWF4Qm94UHQ7XHJcblx0XHRtYXhCb3hQdC54ID0geE1heC54O1xyXG5cdFx0bWF4Qm94UHQueSA9IHlNYXgueTtcclxuXHRcdG1heEJveFB0LnogPSB6TWF4Lno7XHJcblxyXG5cdFx0Y29uc3QgbmFpdmVDZW50ZXIgPSBWZWN0b3IzLm1pZHBvaW50KG1pbkJveFB0LCBtYXhCb3hQdCwgZnJvbVBvaW50c05haXZlQ2VudGVyU2NyYXRjaCk7XHJcblxyXG5cdFx0Ly8gQmVnaW4gMm5kIHBhc3MgdG8gZmluZCBuYWl2ZSByYWRpdXMgYW5kIG1vZGlmeSB0aGUgcml0dGVyIHNwaGVyZS5cclxuXHRcdGxldCBuYWl2ZVJhZGl1cyA9IDA7XHJcblx0XHRmb3IgKGkgPSAwOyBpIDwgbnVtUG9zaXRpb25zOyBpKyspIHtcclxuXHRcdFx0VmVjdG9yMy5jbG9uZShwb3NpdGlvbnNbaV0sIGN1cnJlbnRQb3MpO1xyXG5cclxuXHRcdFx0Ly8gRmluZCB0aGUgZnVydGhlc3QgcG9pbnQgZnJvbSB0aGUgbmFpdmUgY2VudGVyIHRvIGNhbGN1bGF0ZSB0aGUgbmFpdmUgcmFkaXVzLlxyXG5cdFx0XHRjb25zdCByID0gVmVjdG9yMy5tYWduaXR1ZGUoVmVjdG9yMy5zdWJ0cmFjdChjdXJyZW50UG9zLCBuYWl2ZUNlbnRlciwgZnJvbVBvaW50c1NjcmF0Y2gpKTtcclxuXHRcdFx0aWYgKHIgPiBuYWl2ZVJhZGl1cykge1xyXG5cdFx0XHRcdG5haXZlUmFkaXVzID0gcjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTWFrZSBhZGp1c3RtZW50cyB0byB0aGUgUml0dGVyIFNwaGVyZSB0byBpbmNsdWRlIGFsbCBwb2ludHMuXHJcblx0XHRcdGNvbnN0IG9sZENlbnRlclRvUG9pbnRTcXVhcmVkID0gVmVjdG9yMy5tYWduaXR1ZGVTcXVhcmVkKFxyXG5cdFx0XHRcdFZlY3RvcjMuc3VidHJhY3QoY3VycmVudFBvcywgcml0dGVyQ2VudGVyLCBmcm9tUG9pbnRzU2NyYXRjaClcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKG9sZENlbnRlclRvUG9pbnRTcXVhcmVkID4gcmFkaXVzU3F1YXJlZCkge1xyXG5cdFx0XHRcdGNvbnN0IG9sZENlbnRlclRvUG9pbnQgPSBNYXRoLnNxcnQob2xkQ2VudGVyVG9Qb2ludFNxdWFyZWQpO1xyXG5cdFx0XHRcdC8vIENhbGN1bGF0ZSBuZXcgcmFkaXVzIHRvIGluY2x1ZGUgdGhlIHBvaW50IHRoYXQgbGllcyBvdXRzaWRlXHJcblx0XHRcdFx0cml0dGVyUmFkaXVzID0gKHJpdHRlclJhZGl1cyArIG9sZENlbnRlclRvUG9pbnQpICogMC41O1xyXG5cdFx0XHRcdHJhZGl1c1NxdWFyZWQgPSByaXR0ZXJSYWRpdXMgKiByaXR0ZXJSYWRpdXM7XHJcblx0XHRcdFx0Ly8gQ2FsY3VsYXRlIGNlbnRlciBvZiBuZXcgUml0dGVyIHNwaGVyZVxyXG5cdFx0XHRcdGNvbnN0IG9sZFRvTmV3ID0gb2xkQ2VudGVyVG9Qb2ludCAtIHJpdHRlclJhZGl1cztcclxuXHRcdFx0XHRyaXR0ZXJDZW50ZXIueCA9IChyaXR0ZXJSYWRpdXMgKiByaXR0ZXJDZW50ZXIueCArIG9sZFRvTmV3ICogY3VycmVudFBvcy54KSAvIG9sZENlbnRlclRvUG9pbnQ7XHJcblx0XHRcdFx0cml0dGVyQ2VudGVyLnkgPSAocml0dGVyUmFkaXVzICogcml0dGVyQ2VudGVyLnkgKyBvbGRUb05ldyAqIGN1cnJlbnRQb3MueSkgLyBvbGRDZW50ZXJUb1BvaW50O1xyXG5cdFx0XHRcdHJpdHRlckNlbnRlci56ID0gKHJpdHRlclJhZGl1cyAqIHJpdHRlckNlbnRlci56ICsgb2xkVG9OZXcgKiBjdXJyZW50UG9zLnopIC8gb2xkQ2VudGVyVG9Qb2ludDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyaXR0ZXJSYWRpdXMgPCBuYWl2ZVJhZGl1cykge1xyXG5cdFx0XHRWZWN0b3IzLmNsb25lKHJpdHRlckNlbnRlciwgcmVzdWx0LmNlbnRlcik7XHJcblx0XHRcdHJlc3VsdC5yYWRpdXMgPSByaXR0ZXJSYWRpdXM7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRWZWN0b3IzLmNsb25lKG5haXZlQ2VudGVyLCByZXN1bHQuY2VudGVyKTtcclxuXHRcdFx0cmVzdWx0LnJhZGl1cyA9IG5haXZlUmFkaXVzO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIENvbXB1dGVzIGEgdGlnaHQtZml0dGluZyBib3VuZGluZyBzcGhlcmUgZW5jbG9zaW5nIGEgbGlzdCBvZiAzRCBwb2ludHMsIHdoZXJlIHRoZSBwb2ludHMgYXJlXHJcblx0ICogc3RvcmVkIGluIGEgZmxhdCBhcnJheSBpbiBYLCBZLCBaLCBvcmRlci4gIFRoZSBib3VuZGluZyBzcGhlcmUgaXMgY29tcHV0ZWQgYnkgcnVubmluZyB0d29cclxuXHQgKiBhbGdvcml0aG1zLCBhIG5haXZlIGFsZ29yaXRobSBhbmQgUml0dGVyJ3MgYWxnb3JpdGhtLiBUaGUgc21hbGxlciBvZiB0aGUgdHdvIHNwaGVyZXMgaXMgdXNlZCB0b1xyXG5cdCAqIGVuc3VyZSBhIHRpZ2h0IGZpdC5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyW119IFtwb3NpdGlvbnNdIEFuIGFycmF5IG9mIHBvaW50cyB0aGF0IHRoZSBib3VuZGluZyBzcGhlcmUgd2lsbCBlbmNsb3NlLiAgRWFjaCBwb2ludFxyXG5cdCAqICAgICAgICBpcyBmb3JtZWQgZnJvbSB0aHJlZSBlbGVtZW50cyBpbiB0aGUgYXJyYXkgaW4gdGhlIG9yZGVyIFgsIFksIFouXHJcblx0ICogQHBhcmFtIHtWZWN0b3IzfSBbY2VudGVyPVZlY3RvcjMuWkVST10gVGhlIHBvc2l0aW9uIHRvIHdoaWNoIHRoZSBwb3NpdGlvbnMgYXJlIHJlbGF0aXZlLCB3aGljaCBuZWVkIG5vdCBiZSB0aGVcclxuXHQgKiAgICAgICAgb3JpZ2luIG9mIHRoZSBjb29yZGluYXRlIHN5c3RlbS4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIHBvc2l0aW9ucyBhcmUgdG8gYmUgdXNlZCBmb3JcclxuXHQgKiAgICAgICAgcmVsYXRpdmUtdG8tY2VudGVyIChSVEMpIHJlbmRlcmluZy5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW3N0cmlkZT0zXSBUaGUgbnVtYmVyIG9mIGFycmF5IGVsZW1lbnRzIHBlciB2ZXJ0ZXguICBJdCBtdXN0IGJlIGF0IGxlYXN0IDMsIGJ1dCBpdCBtYXlcclxuXHQgKiAgICAgICAgYmUgaGlnaGVyLiAgUmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIsIHRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGZpcnN0IHBvc2l0aW9uXHJcblx0ICogICAgICAgIGlzIGF0IGFycmF5IGluZGV4IDAsIHRoZSBZIGNvb3JkaW5hdGUgaXMgYXQgYXJyYXkgaW5kZXggMSwgYW5kIHRoZSBaIGNvb3JkaW5hdGUgaXMgYXQgYXJyYXkgaW5kZXhcclxuXHQgKiAgICAgICAgMi4gIFdoZW4gc3RyaWRlIGlzIDMsIHRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIG5leHQgcG9zaXRpb24gdGhlbiBiZWdpbnMgYXQgYXJyYXkgaW5kZXggMy4gIElmXHJcblx0ICogICAgICAgIHRoZSBzdHJpZGUgaXMgNSwgaG93ZXZlciwgdHdvIGFycmF5IGVsZW1lbnRzIGFyZSBza2lwcGVkIGFuZCB0aGUgbmV4dCBwb3NpdGlvbiBiZWdpbnMgYXQgYXJyYXlcclxuXHQgKiAgICAgICAgaW5kZXggNS5cclxuXHQgKiBAcGFyYW0ge0JvdW5kaW5nU3BoZXJlfSBbcmVzdWx0XSBUaGUgb2JqZWN0IG9udG8gd2hpY2ggdG8gc3RvcmUgdGhlIHJlc3VsdC5cclxuXHQgKiBAcmV0dXJucyB7Qm91bmRpbmdTcGhlcmV9IFRoZSBtb2RpZmllZCByZXN1bHQgcGFyYW1ldGVyIG9yIGEgbmV3IEJvdW5kaW5nU3BoZXJlIGluc3RhbmNlIGlmIG9uZSB3YXMgbm90IHByb3ZpZGVkLlxyXG5cdCAqXHJcblx0ICogQGV4YW1wbGVcclxuXHQgKiAvLyBDb21wdXRlIHRoZSBib3VuZGluZyBzcGhlcmUgZnJvbSAzIHBvc2l0aW9ucywgZWFjaCBzcGVjaWZpZWQgcmVsYXRpdmUgdG8gYSBjZW50ZXIuXHJcblx0ICogLy8gSW4gYWRkaXRpb24gdG8gdGhlIFgsIFksIGFuZCBaIGNvb3JkaW5hdGVzLCB0aGUgcG9pbnRzIGFycmF5IGNvbnRhaW5zIHR3byBhZGRpdGlvbmFsXHJcblx0ICogLy8gZWxlbWVudHMgcGVyIHBvaW50IHdoaWNoIGFyZSBpZ25vcmVkIGZvciB0aGUgcHVycG9zZSBvZiBjb21wdXRpbmcgdGhlIGJvdW5kaW5nIHNwaGVyZS5cclxuXHQgKiBjb25zdCBjZW50ZXIgPSBuZXcgVmVjdG9yMygxLjAsIDIuMCwgMy4wKTtcclxuXHQgKiBjb25zdCBwb2ludHMgPSBbMS4wLCAyLjAsIDMuMCwgMC4xLCAwLjIsXHJcblx0ICogICAgICAgICAgICAgICA0LjAsIDUuMCwgNi4wLCAwLjEsIDAuMixcclxuXHQgKiAgICAgICAgICAgICAgIDcuMCwgOC4wLCA5LjAsIDAuMSwgMC4yXTtcclxuXHQgKiBjb25zdCBzcGhlcmUgPSBCb3VuZGluZ1NwaGVyZS5mcm9tVmVydGljZXMocG9pbnRzLCBjZW50ZXIsIDUpO1xyXG5cdCAqXHJcblx0ICovXHJcblx0c3RhdGljIGZyb21WZXJ0aWNlcyhwb3NpdGlvbnM6IG51bWJlcltdLCBjZW50ZXI6IFZlY3RvcjMgPSBWZWN0b3IzLlpFUk8sIHN0cmlkZSA9IDMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBCb3VuZGluZ1NwaGVyZSgpO1xyXG5cclxuXHRcdGlmICghZGVmaW5lZChwb3NpdGlvbnMpIHx8IHBvc2l0aW9ucy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0cmVzdWx0LmNlbnRlciA9IFZlY3RvcjMuY2xvbmUoVmVjdG9yMy5aRVJPLCByZXN1bHQuY2VudGVyKTtcclxuXHRcdFx0cmVzdWx0LnJhZGl1cyA9IDAuMDtcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH1cclxuXHJcblx0XHRjZW50ZXIgPSBkZWZhdWx0VmFsdWUoY2VudGVyLCBWZWN0b3IzLlpFUk8pO1xyXG5cclxuXHRcdHN0cmlkZSA9IGRlZmF1bHRWYWx1ZShzdHJpZGUsIDMpO1xyXG5cclxuXHRcdGNvbnN0IGN1cnJlbnRQb3MgPSBmcm9tUG9pbnRzQ3VycmVudFBvcztcclxuXHRcdGN1cnJlbnRQb3MueCA9IHBvc2l0aW9uc1swXSArIGNlbnRlci54O1xyXG5cdFx0Y3VycmVudFBvcy55ID0gcG9zaXRpb25zWzFdICsgY2VudGVyLnk7XHJcblx0XHRjdXJyZW50UG9zLnogPSBwb3NpdGlvbnNbMl0gKyBjZW50ZXIuejtcclxuXHJcblx0XHRjb25zdCB4TWluID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWE1pbik7XHJcblx0XHRjb25zdCB5TWluID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWU1pbik7XHJcblx0XHRjb25zdCB6TWluID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWk1pbik7XHJcblxyXG5cdFx0Y29uc3QgeE1heCA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1hNYXgpO1xyXG5cdFx0Y29uc3QgeU1heCA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1lNYXgpO1xyXG5cdFx0Y29uc3Qgek1heCA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1pNYXgpO1xyXG5cclxuXHRcdGNvbnN0IG51bUVsZW1lbnRzID0gcG9zaXRpb25zLmxlbmd0aDtcclxuXHRcdGxldCBpO1xyXG5cdFx0Zm9yIChpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpICs9IHN0cmlkZSkge1xyXG5cdFx0XHRjb25zdCB4ID0gcG9zaXRpb25zW2ldICsgY2VudGVyLng7XHJcblx0XHRcdGNvbnN0IHkgPSBwb3NpdGlvbnNbaSArIDFdICsgY2VudGVyLnk7XHJcblx0XHRcdGNvbnN0IHogPSBwb3NpdGlvbnNbaSArIDJdICsgY2VudGVyLno7XHJcblxyXG5cdFx0XHRjdXJyZW50UG9zLnggPSB4O1xyXG5cdFx0XHRjdXJyZW50UG9zLnkgPSB5O1xyXG5cdFx0XHRjdXJyZW50UG9zLnogPSB6O1xyXG5cclxuXHRcdFx0Ly8gU3RvcmUgcG9pbnRzIGNvbnRhaW5pbmcgdGhlIHRoZSBzbWFsbGVzdCBhbmQgbGFyZ2VzdCBjb21wb25lbnRzXHJcblx0XHRcdGlmICh4IDwgeE1pbi54KSB7XHJcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB4TWluKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHggPiB4TWF4LngpIHtcclxuXHRcdFx0XHRWZWN0b3IzLmNsb25lKGN1cnJlbnRQb3MsIHhNYXgpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoeSA8IHlNaW4ueSkge1xyXG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgeU1pbik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh5ID4geU1heC55KSB7XHJcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB5TWF4KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHogPCB6TWluLnopIHtcclxuXHRcdFx0XHRWZWN0b3IzLmNsb25lKGN1cnJlbnRQb3MsIHpNaW4pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoeiA+IHpNYXgueikge1xyXG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgek1heCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBDb21wdXRlIHgtLCB5LSwgYW5kIHotc3BhbnMgKFNxdWFyZWQgZGlzdGFuY2VzIGIvbiBlYWNoIGNvbXBvbmVudCdzIG1pbi4gYW5kIG1heC4pLlxyXG5cdFx0Y29uc3QgeFNwYW4gPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yMy5zdWJ0cmFjdCh4TWF4LCB4TWluLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xyXG5cdFx0Y29uc3QgeVNwYW4gPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yMy5zdWJ0cmFjdCh5TWF4LCB5TWluLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xyXG5cdFx0Y29uc3QgelNwYW4gPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yMy5zdWJ0cmFjdCh6TWF4LCB6TWluLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xyXG5cclxuXHRcdC8vIFNldCB0aGUgZGlhbWV0ZXIgZW5kcG9pbnRzIHRvIHRoZSBsYXJnZXN0IHNwYW4uXHJcblx0XHRsZXQgZGlhbWV0ZXIxID0geE1pbjtcclxuXHRcdGxldCBkaWFtZXRlcjIgPSB4TWF4O1xyXG5cdFx0bGV0IG1heFNwYW4gPSB4U3BhbjtcclxuXHRcdGlmICh5U3BhbiA+IG1heFNwYW4pIHtcclxuXHRcdFx0bWF4U3BhbiA9IHlTcGFuO1xyXG5cdFx0XHRkaWFtZXRlcjEgPSB5TWluO1xyXG5cdFx0XHRkaWFtZXRlcjIgPSB5TWF4O1xyXG5cdFx0fVxyXG5cdFx0aWYgKHpTcGFuID4gbWF4U3Bhbikge1xyXG5cdFx0XHRtYXhTcGFuID0gelNwYW47XHJcblx0XHRcdGRpYW1ldGVyMSA9IHpNaW47XHJcblx0XHRcdGRpYW1ldGVyMiA9IHpNYXg7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2FsY3VsYXRlIHRoZSBjZW50ZXIgb2YgdGhlIGluaXRpYWwgc3BoZXJlIGZvdW5kIGJ5IFJpdHRlcidzIGFsZ29yaXRobVxyXG5cdFx0Y29uc3Qgcml0dGVyQ2VudGVyID0gZnJvbVBvaW50c1JpdHRlckNlbnRlcjtcclxuXHRcdHJpdHRlckNlbnRlci54ID0gKGRpYW1ldGVyMS54ICsgZGlhbWV0ZXIyLngpICogMC41O1xyXG5cdFx0cml0dGVyQ2VudGVyLnkgPSAoZGlhbWV0ZXIxLnkgKyBkaWFtZXRlcjIueSkgKiAwLjU7XHJcblx0XHRyaXR0ZXJDZW50ZXIueiA9IChkaWFtZXRlcjEueiArIGRpYW1ldGVyMi56KSAqIDAuNTtcclxuXHJcblx0XHQvLyBDYWxjdWxhdGUgdGhlIHJhZGl1cyBvZiB0aGUgaW5pdGlhbCBzcGhlcmUgZm91bmQgYnkgUml0dGVyJ3MgYWxnb3JpdGhtXHJcblx0XHRsZXQgcmFkaXVzU3F1YXJlZCA9IFZlY3RvcjMubWFnbml0dWRlU3F1YXJlZChWZWN0b3IzLnN1YnRyYWN0KGRpYW1ldGVyMiwgcml0dGVyQ2VudGVyLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xyXG5cdFx0bGV0IHJpdHRlclJhZGl1cyA9IE1hdGguc3FydChyYWRpdXNTcXVhcmVkKTtcclxuXHJcblx0XHQvLyBGaW5kIHRoZSBjZW50ZXIgb2YgdGhlIHNwaGVyZSBmb3VuZCB1c2luZyB0aGUgTmFpdmUgbWV0aG9kLlxyXG5cdFx0Y29uc3QgbWluQm94UHQgPSBmcm9tUG9pbnRzTWluQm94UHQ7XHJcblx0XHRtaW5Cb3hQdC54ID0geE1pbi54O1xyXG5cdFx0bWluQm94UHQueSA9IHlNaW4ueTtcclxuXHRcdG1pbkJveFB0LnogPSB6TWluLno7XHJcblxyXG5cdFx0Y29uc3QgbWF4Qm94UHQgPSBmcm9tUG9pbnRzTWF4Qm94UHQ7XHJcblx0XHRtYXhCb3hQdC54ID0geE1heC54O1xyXG5cdFx0bWF4Qm94UHQueSA9IHlNYXgueTtcclxuXHRcdG1heEJveFB0LnogPSB6TWF4Lno7XHJcblxyXG5cdFx0Y29uc3QgbmFpdmVDZW50ZXIgPSBWZWN0b3IzLm1pZHBvaW50KG1pbkJveFB0LCBtYXhCb3hQdCwgZnJvbVBvaW50c05haXZlQ2VudGVyU2NyYXRjaCk7XHJcblxyXG5cdFx0Ly8gQmVnaW4gMm5kIHBhc3MgdG8gZmluZCBuYWl2ZSByYWRpdXMgYW5kIG1vZGlmeSB0aGUgcml0dGVyIHNwaGVyZS5cclxuXHRcdGxldCBuYWl2ZVJhZGl1cyA9IDA7XHJcblx0XHRmb3IgKGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkgKz0gc3RyaWRlKSB7XHJcblx0XHRcdGN1cnJlbnRQb3MueCA9IHBvc2l0aW9uc1tpXSArIGNlbnRlci54O1xyXG5cdFx0XHRjdXJyZW50UG9zLnkgPSBwb3NpdGlvbnNbaSArIDFdICsgY2VudGVyLnk7XHJcblx0XHRcdGN1cnJlbnRQb3MueiA9IHBvc2l0aW9uc1tpICsgMl0gKyBjZW50ZXIuejtcclxuXHJcblx0XHRcdC8vIEZpbmQgdGhlIGZ1cnRoZXN0IHBvaW50IGZyb20gdGhlIG5haXZlIGNlbnRlciB0byBjYWxjdWxhdGUgdGhlIG5haXZlIHJhZGl1cy5cclxuXHRcdFx0Y29uc3QgciA9IFZlY3RvcjMubWFnbml0dWRlKFZlY3RvcjMuc3VidHJhY3QoY3VycmVudFBvcywgbmFpdmVDZW50ZXIsIGZyb21Qb2ludHNTY3JhdGNoKSk7XHJcblx0XHRcdGlmIChyID4gbmFpdmVSYWRpdXMpIHtcclxuXHRcdFx0XHRuYWl2ZVJhZGl1cyA9IHI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE1ha2UgYWRqdXN0bWVudHMgdG8gdGhlIFJpdHRlciBTcGhlcmUgdG8gaW5jbHVkZSBhbGwgcG9pbnRzLlxyXG5cdFx0XHRjb25zdCBvbGRDZW50ZXJUb1BvaW50U3F1YXJlZCA9IFZlY3RvcjMubWFnbml0dWRlU3F1YXJlZChcclxuXHRcdFx0XHRWZWN0b3IzLnN1YnRyYWN0KGN1cnJlbnRQb3MsIHJpdHRlckNlbnRlciwgZnJvbVBvaW50c1NjcmF0Y2gpXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChvbGRDZW50ZXJUb1BvaW50U3F1YXJlZCA+IHJhZGl1c1NxdWFyZWQpIHtcclxuXHRcdFx0XHRjb25zdCBvbGRDZW50ZXJUb1BvaW50ID0gTWF0aC5zcXJ0KG9sZENlbnRlclRvUG9pbnRTcXVhcmVkKTtcclxuXHRcdFx0XHQvLyBDYWxjdWxhdGUgbmV3IHJhZGl1cyB0byBpbmNsdWRlIHRoZSBwb2ludCB0aGF0IGxpZXMgb3V0c2lkZVxyXG5cdFx0XHRcdHJpdHRlclJhZGl1cyA9IChyaXR0ZXJSYWRpdXMgKyBvbGRDZW50ZXJUb1BvaW50KSAqIDAuNTtcclxuXHRcdFx0XHRyYWRpdXNTcXVhcmVkID0gcml0dGVyUmFkaXVzICogcml0dGVyUmFkaXVzO1xyXG5cdFx0XHRcdC8vIENhbGN1bGF0ZSBjZW50ZXIgb2YgbmV3IFJpdHRlciBzcGhlcmVcclxuXHRcdFx0XHRjb25zdCBvbGRUb05ldyA9IG9sZENlbnRlclRvUG9pbnQgLSByaXR0ZXJSYWRpdXM7XHJcblx0XHRcdFx0cml0dGVyQ2VudGVyLnggPSAocml0dGVyUmFkaXVzICogcml0dGVyQ2VudGVyLnggKyBvbGRUb05ldyAqIGN1cnJlbnRQb3MueCkgLyBvbGRDZW50ZXJUb1BvaW50O1xyXG5cdFx0XHRcdHJpdHRlckNlbnRlci55ID0gKHJpdHRlclJhZGl1cyAqIHJpdHRlckNlbnRlci55ICsgb2xkVG9OZXcgKiBjdXJyZW50UG9zLnkpIC8gb2xkQ2VudGVyVG9Qb2ludDtcclxuXHRcdFx0XHRyaXR0ZXJDZW50ZXIueiA9IChyaXR0ZXJSYWRpdXMgKiByaXR0ZXJDZW50ZXIueiArIG9sZFRvTmV3ICogY3VycmVudFBvcy56KSAvIG9sZENlbnRlclRvUG9pbnQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAocml0dGVyUmFkaXVzIDwgbmFpdmVSYWRpdXMpIHtcclxuXHRcdFx0VmVjdG9yMy5jbG9uZShyaXR0ZXJDZW50ZXIsIHJlc3VsdC5jZW50ZXIpO1xyXG5cdFx0XHRyZXN1bHQucmFkaXVzID0gcml0dGVyUmFkaXVzO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0VmVjdG9yMy5jbG9uZShuYWl2ZUNlbnRlciwgcmVzdWx0LmNlbnRlcik7XHJcblx0XHRcdHJlc3VsdC5yYWRpdXMgPSBuYWl2ZVJhZGl1cztcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0aW50ZXJzZWN0UGxhbmUocGxhbmU6IFBsYW5lKSB7XHJcblx0XHRjb25zdCBjZW50ZXIgPSB0aGlzLmNlbnRlcjtcclxuXHRcdGNvbnN0IHJhZGl1cyA9IHRoaXMucmFkaXVzO1xyXG5cdFx0Y29uc3Qgbm9ybWFsID0gcGxhbmUubm9ybWFsO1xyXG5cdFx0Y29uc3QgZGlzdGFuY2VUb1BsYW5lID0gVmVjdG9yMy5kb3Qobm9ybWFsLCBjZW50ZXIpICsgcGxhbmUuZGlzdGFuY2U7XHJcblxyXG5cdFx0aWYgKGRpc3RhbmNlVG9QbGFuZSA8IC1yYWRpdXMpIHtcclxuXHRcdFx0Ly8gVGhlIGNlbnRlciBwb2ludCBpcyBuZWdhdGl2ZSBzaWRlIG9mIHRoZSBwbGFuZSBub3JtYWxcclxuXHRcdFx0cmV0dXJuIEludGVyc2VjdC5PVVRTSURFO1xyXG5cdFx0fSBlbHNlIGlmIChkaXN0YW5jZVRvUGxhbmUgPCByYWRpdXMpIHtcclxuXHRcdFx0Ly8gVGhlIGNlbnRlciBwb2ludCBpcyBwb3NpdGl2ZSBzaWRlIG9mIHRoZSBwbGFuZSwgYnV0IHJhZGl1cyBleHRlbmRzIGJleW9uZCBpdDsgcGFydGlhbCBvdmVybGFwXHJcblx0XHRcdHJldHVybiBJbnRlcnNlY3QuSU5URVJTRUNUSU5HO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIEludGVyc2VjdC5JTlNJREU7XHJcblx0fVxyXG5cdHVwZGF0ZSh0cmFuc2Zvcm06IE1hdHJpeDQpIHtcclxuXHRcdE1hdHJpeDQubXVsdGlwbHlCeVBvaW50KHRyYW5zZm9ybSwgdGhpcy5vcmlnaW5DZW50ZXIsIHRoaXMuY2VudGVyKTtcclxuXHRcdHRoaXMucmFkaXVzID0gTWF0cml4NC5nZXRNYXhpbXVtU2NhbGUodHJhbnNmb3JtKSAqIHRoaXMub3JpZ2luUmFkaXVzO1xyXG5cdH1cclxuXHRkaXN0YW5jZVRvQ2FtZXJhKGNhbWVyYTogQ2FtZXJhKSB7XHJcblx0XHRyZXR1cm4gTWF0aC5tYXgoMC4wLCBWZWN0b3IzLmRpc3RhbmNlKHRoaXMuY2VudGVyLCBjYW1lcmEucG9zaXRpb24pIC0gdGhpcy5yYWRpdXMpO1xyXG5cdH1cclxufVxyXG5jb25zdCBmcm9tUG9pbnRzWE1pbiA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IGZyb21Qb2ludHNZTWluID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3QgZnJvbVBvaW50c1pNaW4gPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBmcm9tUG9pbnRzWE1heCA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IGZyb21Qb2ludHNZTWF4ID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3QgZnJvbVBvaW50c1pNYXggPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBmcm9tUG9pbnRzQ3VycmVudFBvcyA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IGZyb21Qb2ludHNTY3JhdGNoID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3QgZnJvbVBvaW50c1JpdHRlckNlbnRlciA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IGZyb21Qb2ludHNNaW5Cb3hQdCA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IGZyb21Qb2ludHNNYXhCb3hQdCA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IGZyb21Qb2ludHNOYWl2ZUNlbnRlclNjcmF0Y2ggPSBuZXcgVmVjdG9yMygpO1xyXG4iLCJpbXBvcnQgeyBJbmRleEZvcm1hdCB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCBCdWZmZXIgZnJvbSBcIi4vQnVmZmVyXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluZGV4QnVmZmVyIHtcclxuXHRidWZmZXI6IEJ1ZmZlcjtcclxuXHRpbmRpY2VzOiBBcnJheTxudW1iZXI+O1xyXG5cdGluZGV4Rm9ybWF0OiBHUFVJbmRleEZvcm1hdDtcclxuXHRkaXJ0eTogYm9vbGVhbjtcclxuXHRwcml2YXRlIGxhYmVsOiBzdHJpbmc7XHJcblx0Y29uc3RydWN0b3IobGFiZWw6IHN0cmluZywgaW5kaWNlcz86IEFycmF5PG51bWJlcj4pIHtcclxuXHRcdHRoaXMubGFiZWwgPSBsYWJlbDtcclxuXHRcdHRoaXMuaW5kaWNlcyA9IGluZGljZXM7XHJcblx0XHR0aGlzLmluZGV4Rm9ybWF0ID0gSW5kZXhGb3JtYXQuVWludDE2O1xyXG5cdFx0dGhpcy5kaXJ0eSA9IHRydWU7XHJcblx0fVxyXG5cdHNldEluZGljZXMoaW5kaWNlcykge1xyXG5cdFx0dGhpcy5pbmRpY2VzID0gaW5kaWNlcztcclxuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xyXG5cdH1cclxuXHRiaW5kKGRldmljZTogR1BVRGV2aWNlLCBwYXNzRW5jb2RlcjogR1BVUmVuZGVyUGFzc0VuY29kZXIpIHtcclxuXHRcdGlmICh0aGlzLmRpcnR5KSB7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5idWZmZXIgPSBCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoXHJcblx0XHRcdFx0dGhpcy5sYWJlbCxcclxuXHRcdFx0XHRkZXZpY2UsXHJcblx0XHRcdFx0dGhpcy5pbmRleEZvcm1hdCA9PSBJbmRleEZvcm1hdC5VaW50MTYgPyBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKSA6IG5ldyBVaW50MzJBcnJheSh0aGlzLmluZGljZXMpXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0XHRwYXNzRW5jb2Rlci5zZXRJbmRleEJ1ZmZlcih0aGlzLmJ1ZmZlci5ncHVCdWZmZXIsIHRoaXMuaW5kZXhGb3JtYXQpO1xyXG5cdH1cclxuXHRkZXN0cm95KCkge1xyXG5cdFx0dGhpcy5idWZmZXIuZGVzdHJveSgpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBdHRyaWJ1dGUsIEF0dHJpYnV0ZVR5cGUsIEludGVybGVhdmVkQXR0cmlidXRlIH0gZnJvbSBcIi4vQXR0cmlidXRlXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF0dHJpYnV0ZXMge1xyXG5cdHB1YmxpYyBpbnRlcmxlYXZlOiBib29sZWFuO1xyXG5cdHByaXZhdGUgX2F0dHJpYnV0ZXM6IE1hcDxzdHJpbmcsIEF0dHJpYnV0ZXxJbnRlcmxlYXZlZEF0dHJpYnV0ZT47XHJcblx0cHJpdmF0ZSBzaGFkZXJMb2NhdGlvbjogbnVtYmVyO1xyXG5cdHByaXZhdGUgb2Zmc2V0OiBudW1iZXI7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHR0aGlzLl9hdHRyaWJ1dGVzID0gbmV3IE1hcCgpO1xyXG5cdFx0dGhpcy5zaGFkZXJMb2NhdGlvbiA9IDA7XHJcblx0XHR0aGlzLm9mZnNldCA9IDA7XHJcblx0XHR0aGlzLmludGVybGVhdmUgPSBmYWxzZTtcclxuXHR9XHJcblx0Z2V0QXR0cmlidXRlKG5hbWUpOkF0dHJpYnV0ZXxJbnRlcmxlYXZlZEF0dHJpYnV0ZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fYXR0cmlidXRlcy5nZXQobmFtZSk7XHJcblx0fVxyXG5cdHNldEF0dHJpYnV0ZShhdHRyaWJ1dGU6IEF0dHJpYnV0ZXxJbnRlcmxlYXZlZEF0dHJpYnV0ZSkge1xyXG5cdFx0aWYgKGF0dHJpYnV0ZS5hdHRyaWJ1dGVUeXBlPT09QXR0cmlidXRlVHlwZS5hdHRyaWJ1dGUpIHtcclxuICAgICAgdGhpcy5zZXROb3RJbnRlcmxlYXZlZEF0dHJpYnV0ZShhdHRyaWJ1dGUgYXMgQXR0cmlidXRlKVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5zZXRJbnRlcmxlYXZlZEF0dHJpYnV0ZShhdHRyaWJ1dGUgYXMgSW50ZXJsZWF2ZWRBdHRyaWJ1dGUpXHJcblx0XHR9XHJcblx0fVxyXG5cdHByaXZhdGUgc2V0Tm90SW50ZXJsZWF2ZWRBdHRyaWJ1dGUoYXR0cmlidXRlOiBBdHRyaWJ1dGUpe1xyXG5cdFx0aWYgKHRoaXMuX2F0dHJpYnV0ZXMuaGFzKGF0dHJpYnV0ZS5uYW1lKSkgcmV0dXJuO1xyXG5cdFx0YXR0cmlidXRlLnNoYWRlckxvY2F0aW9uID0gdGhpcy5zaGFkZXJMb2NhdGlvbjtcclxuXHRcdHRoaXMuc2hhZGVyTG9jYXRpb24gKz0gMTtcclxuXHRcdGF0dHJpYnV0ZS5vZmZzZXQgPSB0aGlzLm9mZnNldDtcclxuXHRcdHRoaXMub2Zmc2V0ICs9IGF0dHJpYnV0ZS5hdHRyaWJ1dGVCeXRlU2l6ZTtcclxuXHRcdHRoaXMuX2F0dHJpYnV0ZXMuc2V0KGF0dHJpYnV0ZS5uYW1lLCBhdHRyaWJ1dGUpO1xyXG5cdH1cclxuXHRwcml2YXRlIHNldEludGVybGVhdmVkQXR0cmlidXRlKGF0dHJpYnV0ZTogSW50ZXJsZWF2ZWRBdHRyaWJ1dGUpe1xyXG5cdFx0aWYgKHRoaXMuX2F0dHJpYnV0ZXMuaGFzKGF0dHJpYnV0ZS5uYW1lcy50b1N0cmluZygpKSkgcmV0dXJuO1xyXG5cdFx0dGhpcy5fYXR0cmlidXRlcy5zZXQoYXR0cmlidXRlLm5hbWVzLnRvU3RyaW5nKCksIGF0dHJpYnV0ZSk7XHJcblx0fVxyXG5cdGdldEdQVUF0dHJpYnV0ZXMoKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcclxuXHRcdHRoaXMuX2F0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XHJcblx0XHRcdHJlc3VsdC5wdXNoKC4uLmF0dHJpYnV0ZS5nZXRHUFVBdHRyaWJ1dGUoKSk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cdGdldEF0cnJpYnV0ZVZhbHVlcygpOiB7XHJcblx0XHRhcnJheVN0cmlkZTogbnVtYmVyO1xyXG5cdFx0dHlwZUFycmF5OiBGbG9hdDMyQXJyYXk7XHJcblx0fSB7XHJcblx0XHRjb25zdCBhcnJheVN0cmlkZXMgPSBbXTtcclxuXHRcdGxldCBhcnJheVN0cmlkZSA9IDA7XHJcblx0XHRsZXQgdmFsdWVzID0gbnVsbDtcclxuXHRcdGNvbnN0IGFycmF5cyA9IFtdO1xyXG5cdFx0dGhpcy5fYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyaWJ1dGU6QXR0cmlidXRlfEludGVybGVhdmVkQXR0cmlidXRlKSA9PiB7XHJcblx0XHRcdGlmIChhdHRyaWJ1dGUuYXR0cmlidXRlVHlwZT09PUF0dHJpYnV0ZVR5cGUuYXR0cmlidXRlKSB7XHJcblx0XHRcdFx0YXJyYXlTdHJpZGVzLnB1c2goKGF0dHJpYnV0ZSBhcyBBdHRyaWJ1dGUpLml0ZW1TaXplKTtcclxuXHRcdFx0XHRhcnJheXMucHVzaChhdHRyaWJ1dGUudmFsdWUpO1xyXG5cdFx0XHRcdGFycmF5U3RyaWRlICs9IChhdHRyaWJ1dGUgYXMgQXR0cmlidXRlKS5pdGVtU2l6ZTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpZighdGhpcy5pbnRlcmxlYXZlKXRoaXMuaW50ZXJsZWF2ZT10cnVlO1xyXG5cdFx0XHRcdHZhbHVlcyA9IHZhbHVlcyA/PyBhdHRyaWJ1dGUudmFsdWU7XHJcblx0XHRcdFx0YXJyYXlTdHJpZGU9KGF0dHJpYnV0ZSBhcyBJbnRlcmxlYXZlZEF0dHJpYnV0ZSkuaXRlbVNpemVzLnJlZHVjZSgodG90YWwsY3VycmVudCk9PnRvdGFsKz1jdXJyZW50LDApXHJcblx0XHRcdH1cclxuXHRcdFx0XHJcblx0XHR9KTtcclxuXHRcdFxyXG5cdFx0Y29uc3QgdHlwZUFycmF5ID0gdGhpcy5pbnRlcmxlYXZlXHJcblx0XHRcdD8gbmV3IEZsb2F0MzJBcnJheSh2YWx1ZXMpXHJcblx0XHRcdDogdGhpcy5pbnRlcmxlYXZlVHlwZWRBcnJheShGbG9hdDMyQXJyYXksIGFycmF5U3RyaWRlcywgLi4uYXJyYXlzKTtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGFycmF5U3RyaWRlOiBhcnJheVN0cmlkZSAqIHR5cGVBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxcclxuXHRcdFx0dHlwZUFycmF5XHJcblx0XHR9O1xyXG5cdH1cclxuXHRkZXN0cm95KCkge1xyXG5cdFx0dGhpcy5fYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcclxuXHRcdFx0YXR0cmlidXRlLmRlc3Ryb3koKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBJbnRlcmxlYXZlIG4gdHlwZWQgYXJyYXlzXHJcblx0ICogQGFsaWFzIG1vZHVsZTppbnRlcmxlYXZlVHlwZWRBcnJheVxyXG5cdCAqIEBwYXJhbSB7VHlwZWRBcnJheX0gUmVzdWx0Q29uc3RydWN0b3IgUmV0dXJuZWQgdHlwZWQgYXJyYXkgY29uc3RydWN0b3JcclxuXHQgKiBAcGFyYW0ge0FycmF5fSBlbGVtZW50cyBOdW1iZXIgb2YgZWxlbWVudHMgdG8gZ3JvdXAgZm9yIGVhY2ggdHlwZWQgYXJyYXlcclxuXHQgKiBAcGFyYW0gey4uLlR5cGVkQXJyYXl9IGFycmF5cyBBcnJheXMgdG8gaW50ZXJsZWF2ZVxyXG5cdCAqIEByZXR1cm5zIHtUeXBlZEFycmF5fVxyXG5cdCAqL1xyXG5cdGludGVybGVhdmVUeXBlZEFycmF5KFJlc3VsdENvbnN0cnVjdG9yLCBlbGVtZW50cywgLi4uYXJyYXlzKSB7XHJcblx0XHRjb25zdCB0b3RhbExlbmd0aCA9IGFycmF5cy5yZWR1Y2UoKHRvdGFsLCBhcnIpID0+IHRvdGFsICsgYXJyLmxlbmd0aCwgMCk7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgUmVzdWx0Q29uc3RydWN0b3IodG90YWxMZW5ndGgpO1xyXG5cdFx0Y29uc3Qgc3RyaWRlID0gZWxlbWVudHMucmVkdWNlKChhLCBiKSA9PiBhICsgYik7XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbExlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGxldCBvZmZzZXQgPSAwO1xyXG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnRzLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgayA9IDA7IGsgPCBlbGVtZW50c1tqXTsgaysrKSB7XHJcblx0XHRcdFx0XHRyZXN1bHRbaSAqIHN0cmlkZSArIG9mZnNldF0gPSBhcnJheXNbal1bZWxlbWVudHNbal0gKiBpICsga107XHJcblx0XHRcdFx0XHRvZmZzZXQrKztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IElucHV0U3RlcE1vZGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xyXG5pbXBvcnQgeyBBdHRyaWJ1dGUsIEludGVybGVhdmVkQXR0cmlidXRlIH0gZnJvbSBcIi4vQXR0cmlidXRlXCI7XHJcbmltcG9ydCBBdHRyaWJ1dGVzIGZyb20gXCIuL0F0dHJpYnV0ZXNcIjtcclxuaW1wb3J0IEJ1ZmZlciBmcm9tIFwiLi9CdWZmZXJcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVydGV4dEJ1ZmZlciB7XHJcblx0cHVibGljIGluZGV4OiBudW1iZXI7XHJcblx0cHVibGljIGFycmF5U3RyaWRlOiBudW1iZXI7XHJcblx0cHVibGljIHN0ZXBNb2RlOiBzdHJpbmc7XHJcblx0cHVibGljIGJ1ZmZlcjogQnVmZmVyO1xyXG5cdHB1YmxpYyBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVzO1xyXG5cdHB1YmxpYyBkaXJ0eTogYm9vbGVhbjtcclxuXHRwcml2YXRlIGxhYmVsOiBzdHJpbmc7XHJcblx0Y29uc3RydWN0b3IobGFiZWw6IHN0cmluZywgaW5kZXg/OiBudW1iZXIsIHN0ZXBNb2RlPzogc3RyaW5nKSB7XHJcblx0XHR0aGlzLmluZGV4ID0gaW5kZXggfHwgMDtcclxuXHRcdHRoaXMuYXR0cmlidXRlcyA9IG5ldyBBdHRyaWJ1dGVzKCk7XHJcblx0XHR0aGlzLnN0ZXBNb2RlID0gSW5wdXRTdGVwTW9kZS5WZXJ0ZXg7XHJcblx0XHR0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMubGFiZWwgPSBsYWJlbDtcclxuXHR9XHJcblx0cHVibGljIGdldEJ1ZmZlckRlcygpIHtcclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtcclxuXHRcdFx0XHRhcnJheVN0cmlkZTogdGhpcy5hcnJheVN0cmlkZSxcclxuXHRcdFx0XHRzdGVwTW9kZTogdGhpcy5zdGVwTW9kZSxcclxuXHRcdFx0XHRhdHRyaWJ1dGVzOiB0aGlzLmF0dHJpYnV0ZXMuZ2V0R1BVQXR0cmlidXRlcygpXHJcblx0XHRcdH1cclxuXHRcdF07XHJcblx0fVxyXG5cdHB1YmxpYyBzZXRBdHRyaWJ1dGUoYXR0cmlidXRlOiBBdHRyaWJ1dGV8SW50ZXJsZWF2ZWRBdHRyaWJ1dGUpIHtcclxuXHRcdHRoaXMuYXR0cmlidXRlcy5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcclxuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xyXG5cdH1cclxuXHRwdWJsaWMgZ2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZyk6IEF0dHJpYnV0ZXxJbnRlcmxlYXZlZEF0dHJpYnV0ZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzLmdldEF0dHJpYnV0ZShuYW1lKTtcclxuXHR9XHJcblx0cHVibGljIGJpbmQoZGV2aWNlOiBHUFVEZXZpY2UsIHBhc3NFbmNvZGVyOiBHUFVSZW5kZXJQYXNzRW5jb2Rlcikge1xyXG5cdFx0aWYgKHRoaXMuZGlydHkpIHtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHRjb25zdCB7IGFycmF5U3RyaWRlLCB0eXBlQXJyYXkgfSA9IHRoaXMuYXR0cmlidXRlcy5nZXRBdHJyaWJ1dGVWYWx1ZXMoKTtcclxuXHRcdFx0dGhpcy5hcnJheVN0cmlkZSA9IGFycmF5U3RyaWRlO1xyXG5cdFx0XHR0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYWJlbCwgZGV2aWNlLCB0eXBlQXJyYXkpO1xyXG5cdFx0fVxyXG5cdFx0cGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVyKHRoaXMuaW5kZXgsIHRoaXMuYnVmZmVyLmdwdUJ1ZmZlcik7XHJcblx0fVxyXG5cdGRlc3Ryb3koKSB7XHJcblx0XHR0aGlzLmJ1ZmZlci5kZXN0cm95KCk7XHJcblx0XHR0aGlzLmF0dHJpYnV0ZXMuZGVzdHJveSgpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuL2RlZmF1bHRWYWx1ZVwiO1xyXG5pbXBvcnQgZGVmaW5lZCBmcm9tIFwiLi9kZWZpbmVkXCI7XHJcblxyXG4vKipcclxuICogTWVyZ2VzIHR3byBvYmplY3RzLCBjb3B5aW5nIHRoZWlyIHByb3BlcnRpZXMgb250byBhIG5ldyBjb21iaW5lZCBvYmplY3QuIFdoZW4gdHdvIG9iamVjdHMgaGF2ZSB0aGUgc2FtZVxyXG4gKiBwcm9wZXJ0eSwgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBvbiB0aGUgZmlyc3Qgb2JqZWN0IGlzIHVzZWQuICBJZiBlaXRoZXIgb2JqZWN0IGlzIHVuZGVmaW5lZCxcclxuICogaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIGVtcHR5IG9iamVjdC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogY29uc3Qgb2JqZWN0MSA9IHtcclxuICogICAgIHByb3BPbmUgOiAxLFxyXG4gKiAgICAgcHJvcFR3byA6IHtcclxuICogICAgICAgICB2YWx1ZTEgOiAxMFxyXG4gKiAgICAgfVxyXG4gKiB9XHJcbiAqIGNvbnN0IG9iamVjdDIgPSB7XHJcbiAqICAgICBwcm9wVHdvIDogMlxyXG4gKiB9XHJcbiAqIGNvbnN0IGZpbmFsID0gQ2VzaXVtLmNvbWJpbmUob2JqZWN0MSwgb2JqZWN0Mik7XHJcbiAqXHJcbiAqIC8vIGZpbmFsID09PSB7XHJcbiAqIC8vICAgICBwcm9wT25lIDogMSxcclxuICogLy8gICAgIHByb3BUd28gOiB7XHJcbiAqIC8vICAgICAgICAgdmFsdWUxIDogMTBcclxuICogLy8gICAgIH1cclxuICogLy8gfVxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdDFdIFRoZSBmaXJzdCBvYmplY3QgdG8gbWVyZ2UuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0Ml0gVGhlIHNlY29uZCBvYmplY3QgdG8gbWVyZ2UuXHJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2RlZXA9ZmFsc2VdIFBlcmZvcm0gYSByZWN1cnNpdmUgbWVyZ2UuXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBjb21iaW5lZCBvYmplY3QgY29udGFpbmluZyBhbGwgcHJvcGVydGllcyBmcm9tIGJvdGggb2JqZWN0cy5cclxuICpcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5mdW5jdGlvbiBjb21iaW5lKG9iamVjdDEsIG9iamVjdDIsIGRlZXApIHtcclxuICBkZWVwID0gZGVmYXVsdFZhbHVlKGRlZXAsIGZhbHNlKTtcclxuXHJcbiAgY29uc3QgcmVzdWx0ID0ge307XHJcblxyXG4gIGNvbnN0IG9iamVjdDFEZWZpbmVkID0gZGVmaW5lZChvYmplY3QxKTtcclxuICBjb25zdCBvYmplY3QyRGVmaW5lZCA9IGRlZmluZWQob2JqZWN0Mik7XHJcbiAgbGV0IHByb3BlcnR5O1xyXG4gIGxldCBvYmplY3QxVmFsdWU7XHJcbiAgbGV0IG9iamVjdDJWYWx1ZTtcclxuICBpZiAob2JqZWN0MURlZmluZWQpIHtcclxuICAgIGZvciAocHJvcGVydHkgaW4gb2JqZWN0MSkge1xyXG4gICAgICBpZiAob2JqZWN0MS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuICAgICAgICBvYmplY3QxVmFsdWUgPSBvYmplY3QxW3Byb3BlcnR5XTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBvYmplY3QyRGVmaW5lZCAmJlxyXG4gICAgICAgICAgZGVlcCAmJlxyXG4gICAgICAgICAgdHlwZW9mIG9iamVjdDFWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICAgICAgb2JqZWN0Mi5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIG9iamVjdDJWYWx1ZSA9IG9iamVjdDJbcHJvcGVydHldO1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QyVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgcmVzdWx0W3Byb3BlcnR5XSA9IGNvbWJpbmUob2JqZWN0MVZhbHVlLCBvYmplY3QyVmFsdWUsIGRlZXApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0W3Byb3BlcnR5XSA9IG9iamVjdDFWYWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzdWx0W3Byb3BlcnR5XSA9IG9iamVjdDFWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgaWYgKG9iamVjdDJEZWZpbmVkKSB7XHJcbiAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdDIpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIG9iamVjdDIuaGFzT3duUHJvcGVydHkocHJvcGVydHkpICYmXHJcbiAgICAgICAgIXJlc3VsdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgb2JqZWN0MlZhbHVlID0gb2JqZWN0Mltwcm9wZXJ0eV07XHJcbiAgICAgICAgcmVzdWx0W3Byb3BlcnR5XSA9IG9iamVjdDJWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbmV4cG9ydCBkZWZhdWx0IGNvbWJpbmU7XHJcbiIsImltcG9ydCBCb3VuZGluZ0JveCBmcm9tIFwiLi4vY29yZS9Cb3VuZGluZ0JveFwiO1xyXG5pbXBvcnQgQm91bmRpbmdTcGhlcmUgZnJvbSBcIi4uL2NvcmUvQm91bmRpbmdTcGhlcmVcIjtcclxuaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0ZyYW1lU3RhdGVcIjtcclxuaW1wb3J0IHsgUHJpbWl0aXZlVG9wb2xvZ3kgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tIFwiLi4vbWF0aC9WZWN0b3IyXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuaW1wb3J0IFZlY3RvcjQgZnJvbSBcIi4uL21hdGgvVmVjdG9yNFwiO1xyXG5pbXBvcnQgeyBBdHRyaWJ1dGUsIEF0dHJpYnV0ZVR5cGUsIEludGVybGVhdmVkRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XHJcbmltcG9ydCBJbmRleEJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL0luZGV4QnVmZmVyXCI7XHJcbmltcG9ydCBWZXJ0ZXh0QnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvVmVydGV4dEJ1ZmZlclwiO1xyXG5pbXBvcnQgY29tYmluZSBmcm9tIFwiLi4vdXRpbHMvY29tYmluZVwiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHZW9tZXRyeSB7XHJcblx0bm9ybWFsczogbnVtYmVyW107XHJcblx0dXZzOiBudW1iZXJbXTtcclxuXHRwb3NpdGlvbnM6IG51bWJlcltdO1xyXG5cdGluZGljZXM6IG51bWJlcltdO1xyXG5cdHRhbmdlbnRzOiBudW1iZXJbXTtcclxuXHR0eXBlOiBzdHJpbmc7XHJcblx0ZGlydHk6IGJvb2xlYW47XHJcblx0aW5kZXhCdWZmZXI/OiBJbmRleEJ1ZmZlcjtcclxuXHR2ZXJ0QnVmZmVyOiBWZXJ0ZXh0QnVmZmVyO1xyXG5cdGNvdW50OiBudW1iZXI7XHJcblx0Ym91bmRpbmdTcGhlcmU/OiBCb3VuZGluZ1NwaGVyZTtcclxuXHRib3VuZGluZ0JveD86IEJvdW5kaW5nQm94O1xyXG5cdHByaXZhdGUgX2RlZmluZXM6IHsgW3Byb3A6IHN0cmluZ106IGJvb2xlYW4gfCBudW1iZXIgfTtcclxuXHRwcml2YXRlIGxvY2F0aW9uSW5kZXg/OiBudW1iZXI7XHJcblx0ZGVmaW5lc0RpcnR5OiBib29sZWFuO1xyXG5cdHRvcG9sb2d5OiBQcmltaXRpdmVUb3BvbG9neTtcclxuXHRnZXQgZGVmaW5lcygpIHtcclxuXHRcdHJldHVybiB0aGlzLl9kZWZpbmVzO1xyXG5cdH1cclxuXHRzZXQgZGVmaW5lcyh2YWx1ZSkge1xyXG5cdFx0dGhpcy5kZWZpbmVzRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fZGVmaW5lcyA9IGNvbWJpbmUodmFsdWUsIHRoaXMuX2RlZmluZXMsIGZhbHNlKTtcclxuXHR9XHJcblx0Y29uc3RydWN0b3Iob3B0aW9ucz86IGFueSkge1xyXG5cdFx0dGhpcy50eXBlID0gb3B0aW9ucy50eXBlIHx8IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuYm91bmRpbmdTcGhlcmUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLmRpcnR5ID0gZmFsc2U7XHJcblx0XHR0aGlzLmRlZmluZXNEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmxvY2F0aW9uSW5kZXggPSAwO1xyXG5cdFx0dGhpcy52ZXJ0QnVmZmVyID0gbmV3IFZlcnRleHRCdWZmZXIodGhpcy50eXBlLCAwKTtcclxuXHRcdHRoaXMuX2RlZmluZXMgPSB7fTtcclxuXHRcdHRoaXMubm9ybWFscyA9IFtdO1xyXG5cdFx0dGhpcy51dnMgPSBbXTtcclxuXHRcdHRoaXMucG9zaXRpb25zID0gW107XHJcblx0XHR0aGlzLmluZGljZXMgPSBbXTtcclxuXHRcdHRoaXMudGFuZ2VudHMgPSBbXTtcclxuXHR9XHJcblx0Z2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMudmVydEJ1ZmZlci5nZXRBdHRyaWJ1dGUobmFtZSk7XHJcblx0fVxyXG5cdHNldEF0dHJpYnV0ZShhdHRyaWJ1dGU6IEF0dHJpYnV0ZXxJbnRlcmxlYXZlZEZsb2F0MzJBdHRyaWJ1dGUpIHtcclxuXHRcdGlmKGF0dHJpYnV0ZS5hdHRyaWJ1dGVUeXBlPT09QXR0cmlidXRlVHlwZS5hdHRyaWJ1dGUpe1xyXG5cdFx0XHR0aGlzLnNldExvY2F0aW9uSW5kZXgoKGF0dHJpYnV0ZSBhcyBBdHRyaWJ1dGUpLm5hbWUpXHJcblx0XHR9ZWxzZXtcclxuXHRcdFx0KGF0dHJpYnV0ZSBhcyBJbnRlcmxlYXZlZEZsb2F0MzJBdHRyaWJ1dGUpPy5uYW1lcy5mb3JFYWNoKChuYW1lOnN0cmluZyk9PnRoaXMuc2V0TG9jYXRpb25JbmRleChuYW1lKSlcclxuXHRcdH1cclxuXHRcdHRoaXMudmVydEJ1ZmZlci5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBzZXRMb2NhdGlvbkluZGV4KG5hbWU6c3RyaW5nKXtcclxuXHRcdGlmKHRoaXMuX2RlZmluZXNbbmFtZT8uY29uY2F0KFwiTG9jYXRpb25cIildfHwhbmFtZSkgcmV0dXJuO1xyXG5cdFx0dGhpcy5fZGVmaW5lc1tuYW1lPy5jb25jYXQoXCJMb2NhdGlvblwiKV0gPSB0aGlzLmxvY2F0aW9uSW5kZXg7XHJcblx0XHR0aGlzLmxvY2F0aW9uSW5kZXggKz0gMTtcclxuXHR9XHJcblx0Y29udGFpbkF0dHJpYnV0ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLl9kZWZpbmVzW25hbWU/LmNvbmNhdChcIkxvY2F0aW9uXCIpXSAhPSB1bmRlZmluZWQgPyB0cnVlIDogZmFsc2U7XHJcblx0fVxyXG5cdHNldEluZGljZShpbmRpY2VzOiBBcnJheTxudW1iZXI+KSB7XHJcblx0XHR0aGlzLmluZGljZXMgPSBpbmRpY2VzO1xyXG5cdFx0aWYgKCF0aGlzLmluZGV4QnVmZmVyKSB0aGlzLmluZGV4QnVmZmVyID0gbmV3IEluZGV4QnVmZmVyKHRoaXMudHlwZSArIFwiSW5kZXhCdWZmZXJcIik7XHJcblx0XHR0aGlzLmluZGV4QnVmZmVyLnNldEluZGljZXMoaW5kaWNlcyk7XHJcblx0fVxyXG5cdHVwZGF0ZShmcmFtZVN0YXRlOiBGcmFtZVN0YXRlKSB7fVxyXG5cdGNvbXB1dGVCb3VuZGluZ1NwaGVyZShwb3NpdGlvbnM6bnVtYmVyW10sc3RyaWRlPTMpIHtcclxuXHRcdHRoaXMuYm91bmRpbmdTcGhlcmUgPSBCb3VuZGluZ1NwaGVyZS5mcm9tVmVydGljZXMocG9zaXRpb25zLCBuZXcgVmVjdG9yMygwLCAwLCAwKSwgc3RyaWRlKTtcclxuXHR9XHJcblx0LyoqXHJcblx0ICogQ2FsY3VsYXRlIG1lc2ggdGFuZ2VudC5cclxuXHQgKiBAcmVtYXJrIG5lZWQgdG8gc2V0IHBvc2l0aW9ucyh3aXRoIG9yIG5vdCB3aXRoIGluZGljZXMpLCBub3JtYWxzLCB1diBiZWZvcmUgY2FsY3VsYXRpb24uXHJcblx0ICogQHJlbWFyayBiYXNlZCBvbiBodHRwOi8vZm91bmRhdGlvbnNvZmdhbWVlbmdpbmVkZXYuY29tL0ZHRUQyLXNhbXBsZS5wZGZcclxuXHQgKi9cclxuXHRjYWxjdWxhdGVUYW5nZW50cygpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy5ub3JtYWxzIHx8ICF0aGlzLnV2cykge1xyXG5cdFx0XHR0aHJvdyBcIlNldCBub3JtYWwgYW5kIHV2IGJlZm9yZSBjYWxjdWxhdGlvbi5cIjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHsgaW5kaWNlcywgcG9zaXRpb25zLCBub3JtYWxzLCB1dnMgfSA9IHRoaXM7XHJcblx0XHRjb25zdCB0ZW1wUG9zMCA9IG5ldyBWZWN0b3IzKCksXHJcblx0XHRcdHRlbXBQb3MxID0gbmV3IFZlY3RvcjMoKSxcclxuXHRcdFx0dGVtcFBvczIgPSBuZXcgVmVjdG9yMygpLFxyXG5cdFx0XHR0ZW1wVVYwID0gbmV3IFZlY3RvcjIoKSxcclxuXHRcdFx0dGVtcFVWMSA9IG5ldyBWZWN0b3IyKCksXHJcblx0XHRcdHRlbXBVVjIgPSBuZXcgVmVjdG9yMigpO1xyXG5cdFx0Y29uc3QgZTEgPSBuZXcgVmVjdG9yMygpLFxyXG5cdFx0XHRlMiA9IG5ldyBWZWN0b3IzKCksXHJcblx0XHRcdHQgPSBuZXcgVmVjdG9yMygpLFxyXG5cdFx0XHRiID0gbmV3IFZlY3RvcjMoKSxcclxuXHRcdFx0dGVtcCA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHRjb25zdCB2ZXJ0ZXhDb3VudCA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XHJcblx0XHRjb25zdCB0cmlhbmdsZUNvdW50ID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIC8gMyA6IHBvc2l0aW9ucy5sZW5ndGggLyAzO1xyXG5cdFx0Y29uc3QgdGFuZ2VudHMgPSBuZXcgQXJyYXk8VmVjdG9yND4odmVydGV4Q291bnQpO1xyXG5cdFx0Y29uc3QgYmlUYW5nZW50cyA9IG5ldyBBcnJheTxWZWN0b3IzPih2ZXJ0ZXhDb3VudCk7XHJcblx0XHR0aGlzLnRhbmdlbnRzID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRleENvdW50OyBpKyspIHtcclxuXHRcdFx0dGFuZ2VudHNbaV0gPSBuZXcgVmVjdG9yNCgpO1xyXG5cdFx0XHRiaVRhbmdlbnRzW2ldID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDYWxjdWxhdGUgdGFuZ2VudCBhbmQgYmktdGFuZ2VudCBmb3IgZWFjaCB0cmlhbmdsZSBhbmQgYWRkIHRvIGFsbCB0aHJlZSB2ZXJ0aWNlcy5cclxuXHRcdGZvciAobGV0IGsgPSAwOyBrIDwgdHJpYW5nbGVDb3VudDsgaysrKSB7XHJcblx0XHRcdGxldCBpMCA9IDMgKiBrO1xyXG5cdFx0XHRsZXQgaTEgPSAzICogayArIDE7XHJcblx0XHRcdGxldCBpMiA9IDMgKiBrICsgMjtcclxuXHRcdFx0aWYgKGluZGljZXMpIHtcclxuXHRcdFx0XHRpMCA9IGluZGljZXNbaTBdO1xyXG5cdFx0XHRcdGkxID0gaW5kaWNlc1tpMV07XHJcblx0XHRcdFx0aTIgPSBpbmRpY2VzW2kyXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgcDAgPSB0ZW1wUG9zMC5zZXQocG9zaXRpb25zW2kwXSwgcG9zaXRpb25zW2kwICsgMV0sIHBvc2l0aW9uc1tpMCArIDJdKTtcclxuXHRcdFx0Y29uc3QgcDEgPSB0ZW1wUG9zMS5zZXQocG9zaXRpb25zW2kxXSwgcG9zaXRpb25zW2kxICsgMV0sIHBvc2l0aW9uc1tpMSArIDJdKTtcclxuXHRcdFx0Y29uc3QgcDIgPSB0ZW1wUG9zMi5zZXQocG9zaXRpb25zW2kyXSwgcG9zaXRpb25zW2kyICsgMV0sIHBvc2l0aW9uc1tpMiArIDJdKTtcclxuXHRcdFx0Y29uc3QgdzAgPSB0ZW1wVVYwLnNldCh1dnNbaTBdLCB1dnNbaTAgKyAxXSk7XHJcblx0XHRcdGNvbnN0IHcxID0gdGVtcFVWMS5zZXQodXZzW2kxXSwgdXZzW2kxICsgMV0pO1xyXG5cdFx0XHRjb25zdCB3MiA9IHRlbXBVVjIuc2V0KHV2c1tpMl0sIHV2c1tpMiArIDFdKTtcclxuXHJcblx0XHRcdFZlY3RvcjMuc3VidHJhY3QocDEsIHAwLCBlMSk7XHJcblx0XHRcdFZlY3RvcjMuc3VidHJhY3QocDIsIHAwLCBlMik7XHJcblx0XHRcdGNvbnN0IHgxID0gdzEueCAtIHcwLng7XHJcblx0XHRcdGNvbnN0IHgyID0gdzIueCAtIHcwLng7XHJcblx0XHRcdGNvbnN0IHkxID0gdzEueSAtIHcwLnk7XHJcblx0XHRcdGNvbnN0IHkyID0gdzIueSAtIHcwLnk7XHJcblx0XHRcdGNvbnN0IHIgPSAxLjAgLyAoeDEgKiB5MiAtIHgyICogeTEpO1xyXG5cclxuXHRcdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGUxLCB5MiAqIHIsIHQpO1xyXG5cdFx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIoZTIsIHkxICogciwgdGVtcCk7XHJcblx0XHRcdFZlY3RvcjMuc3VidHJhY3QodCwgdGVtcCwgdCk7XHJcblx0XHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcihlMiwgeDEgKiByLCBiKTtcclxuXHRcdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGUxLCB4MiAqIHIsIHRlbXApO1xyXG5cdFx0XHRWZWN0b3IzLnN1YnRyYWN0KGIsIHRlbXAsIGIpO1xyXG5cclxuXHRcdFx0bGV0IHRhbmdlbnQgPSB0YW5nZW50c1tpMF07XHJcblx0XHRcdHRhbmdlbnQuc2V0KHRhbmdlbnQueCArIHQueCwgdGFuZ2VudC55ICsgdC55LCB0YW5nZW50LnogKyB0LnosIDEuMCk7XHJcblxyXG5cdFx0XHR0YW5nZW50ID0gdGFuZ2VudHNbaTFdO1xyXG5cdFx0XHR0YW5nZW50LnNldCh0YW5nZW50LnggKyB0LngsIHRhbmdlbnQueSArIHQueSwgdGFuZ2VudC56ICsgdC56LCAxLjApO1xyXG5cclxuXHRcdFx0dGFuZ2VudCA9IHRhbmdlbnRzW2kyXTtcclxuXHRcdFx0dGFuZ2VudC5zZXQodGFuZ2VudC54ICsgdC54LCB0YW5nZW50LnkgKyB0LnksIHRhbmdlbnQueiArIHQueiwgMS4wKTtcclxuXHRcdFx0YmlUYW5nZW50c1tpMF0uYWRkKGIpO1xyXG5cdFx0XHRiaVRhbmdlbnRzW2kxXS5hZGQoYik7XHJcblx0XHRcdGJpVGFuZ2VudHNbaTJdLmFkZChiKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBPcnRob25vcm1hbGl6ZSBlYWNoIHRhbmdlbnQgYW5kIGNhbGN1bGF0ZSB0aGUgaGFuZGVkbmVzcy5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4Q291bnQ7IGkrKykge1xyXG5cdFx0XHRjb25zdCBuID0gbmV3IFZlY3RvcjMobm9ybWFsc1szICogaV0sIG5vcm1hbHNbMyAqIGkgKyAxXSwgbm9ybWFsc1szICogaSArIDJdKTtcclxuXHRcdFx0Y29uc3QgYiA9IGJpVGFuZ2VudHNbaV07XHJcblx0XHRcdGNvbnN0IHRhbmdlbnQgPSB0YW5nZW50c1tpXTtcclxuXHRcdFx0dC5zZXQodGFuZ2VudC54LCB0YW5nZW50LnksIHRhbmdlbnQueik7XHJcblxyXG5cdFx0XHRWZWN0b3IzLmNyb3NzKHQsIGIsIHRlbXApO1xyXG5cdFx0XHRjb25zdCB3ID0gVmVjdG9yMy5kb3QodGVtcCwgbikgPiAwLjAgPyAxIDogLTE7XHJcblx0XHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcihuLCBWZWN0b3IzLmRvdCh0LCBuKSwgdGVtcCk7XHJcblx0XHRcdFZlY3RvcjMuc3VidHJhY3QodCwgdGVtcCwgdCk7XHJcblx0XHRcdFZlY3RvcjMubm9ybWFsaXplKHQsIHQpO1xyXG5cdFx0XHQvLyB0Lm5vcm1hbGl6ZSgpO1xyXG5cdFx0XHR0YW5nZW50LnNldCh0LngsIHQueSwgdC56LCB3KTtcclxuXHRcdFx0dGhpcy50YW5nZW50cy5wdXNoKHQueCwgdC55LCB0LnosIHcpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gdGhpcy5zZXRUYW5nZW50cyh0YW5nZW50cyk7XHJcblx0fVxyXG5cdGRlc3Ryb3koKSB7XHJcblx0XHR0aGlzPy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XHJcblx0XHR0aGlzLnZlcnRCdWZmZXIuZGVzdHJveSgpO1xyXG5cdFx0dGhpcy5ub3JtYWxzID0gbnVsbDtcclxuXHRcdHRoaXMudXZzID0gbnVsbDtcclxuXHRcdHRoaXMucG9zaXRpb25zID0gbnVsbDtcclxuXHRcdHRoaXMuaW5kaWNlcyA9IG51bGw7XHJcblx0XHR0aGlzLnRhbmdlbnRzID0gbnVsbDtcclxuXHRcdHRoaXMuYm91bmRpbmdTcGhlcmUgPSB1bmRlZmluZWQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEZsb2F0MzJBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vcmVuZGVyL0F0dHJpYnV0ZVwiO1xyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSBcIi4vR2VvbWV0cnlcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxhbmVHZW9tZXRyeSBleHRlbmRzIEdlb21ldHJ5IHtcclxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgd2lkdGg6IG51bWJlciA9IDEwLCBwdWJsaWMgaGVpZ2h0OiBudW1iZXIgPSAxMCkge1xyXG5cdFx0c3VwZXIoe1xyXG5cdFx0XHR0eXBlOiBcInBsYW5lR2VvbWV0cnlcIlxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmRlZmluZXMgPSB7XHJcblx0XHRcdEhBU19OT1JNQUw6IHRydWVcclxuXHRcdH07XHJcblx0XHR0aGlzLmluaXQoKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBpbml0KCkge1xyXG5cdFx0Ly8gZ2VuZXJhdGUgcG9zIHV2IG5vcm1hbCBzbyBvblxyXG5cdFx0Y29uc3QgeyBpbmRpY2VzLCBub3JtYWxzLCB1dnMsIHZlcnRpY2VzIH0gPSB0aGlzLmNyZWF0ZUdyaWQodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xyXG5cdFx0dGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUodmVydGljZXMpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJwb3NpdGlvblwiLCB2ZXJ0aWNlcywgMykpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJub3JtYWxcIiwgbm9ybWFscywgMykpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJ1dlwiLCB1dnMsIDIpKTtcclxuXHRcdHRoaXMuc2V0SW5kaWNlKGluZGljZXMpO1xyXG5cdFx0dGhpcy5jb3VudCA9IGluZGljZXMubGVuZ3RoO1xyXG5cdH1cclxuXHRwdWJsaWMgdXBkYXRlKGZyYW1lU3RhdGUpIHt9XHJcblx0cHJpdmF0ZSBjcmVhdGVHcmlkKHdpZHRoID0gMSwgaGVpZ2h0ID0gMSwgd2lkdGhTZWdtZW50cyA9IDEsIGhlaWdodFNlZ21lbnRzID0gMSkge1xyXG5cdFx0Y29uc3Qgd2lkdGhfaGFsZiA9IHdpZHRoIC8gMjtcclxuXHRcdGNvbnN0IGhlaWdodF9oYWxmID0gaGVpZ2h0IC8gMjtcclxuXHJcblx0XHRjb25zdCBncmlkWCA9IE1hdGguZmxvb3Iod2lkdGhTZWdtZW50cyk7XHJcblx0XHRjb25zdCBncmlkWSA9IE1hdGguZmxvb3IoaGVpZ2h0U2VnbWVudHMpO1xyXG5cclxuXHRcdGNvbnN0IGdyaWRYMSA9IGdyaWRYICsgMTtcclxuXHRcdGNvbnN0IGdyaWRZMSA9IGdyaWRZICsgMTtcclxuXHJcblx0XHRjb25zdCBzZWdtZW50X3dpZHRoID0gd2lkdGggLyBncmlkWDtcclxuXHRcdGNvbnN0IHNlZ21lbnRfaGVpZ2h0ID0gaGVpZ2h0IC8gZ3JpZFk7XHJcblxyXG5cdFx0Ly9cclxuXHJcblx0XHRjb25zdCBpbmRpY2VzID0gW107XHJcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xyXG5cdFx0Y29uc3Qgbm9ybWFscyA9IFtdO1xyXG5cdFx0Y29uc3QgdXZzID0gW107XHJcblxyXG5cdFx0Zm9yIChsZXQgaXkgPSAwOyBpeSA8IGdyaWRZMTsgaXkrKykge1xyXG5cdFx0XHRjb25zdCB5ID0gaXkgKiBzZWdtZW50X2hlaWdodCAtIGhlaWdodF9oYWxmO1xyXG5cclxuXHRcdFx0Zm9yIChsZXQgaXggPSAwOyBpeCA8IGdyaWRYMTsgaXgrKykge1xyXG5cdFx0XHRcdGNvbnN0IHggPSBpeCAqIHNlZ21lbnRfd2lkdGggLSB3aWR0aF9oYWxmO1xyXG5cclxuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKHgsIC15LCAwKTtcclxuXHJcblx0XHRcdFx0bm9ybWFscy5wdXNoKDAsIDAsIDEpO1xyXG5cclxuXHRcdFx0XHR1dnMucHVzaChpeCAvIGdyaWRYKTtcclxuXHRcdFx0XHR1dnMucHVzaCgxIC0gaXkgLyBncmlkWSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGxldCBpeSA9IDA7IGl5IDwgZ3JpZFk7IGl5KyspIHtcclxuXHRcdFx0Zm9yIChsZXQgaXggPSAwOyBpeCA8IGdyaWRYOyBpeCsrKSB7XHJcblx0XHRcdFx0Y29uc3QgYSA9IGl4ICsgZ3JpZFgxICogaXk7XHJcblx0XHRcdFx0Y29uc3QgYiA9IGl4ICsgZ3JpZFgxICogKGl5ICsgMSk7XHJcblx0XHRcdFx0Y29uc3QgYyA9IGl4ICsgMSArIGdyaWRYMSAqIChpeSArIDEpO1xyXG5cdFx0XHRcdGNvbnN0IGQgPSBpeCArIDEgKyBncmlkWDEgKiBpeTtcclxuXHJcblx0XHRcdFx0aW5kaWNlcy5wdXNoKGEsIGIsIGQpO1xyXG5cdFx0XHRcdGluZGljZXMucHVzaChiLCBjLCBkKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHsgaW5kaWNlcywgbm9ybWFscywgdXZzLCB2ZXJ0aWNlcyB9O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IEdNYXRoIGZyb20gXCIuL01hdGhcIjtcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4vTWF0cml4NFwiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi9WZWN0b3IzXCI7XHJcbi8qKlxyXG4gKiBBIHNldCBvZiA0LWRpbWVuc2lvbmFsIGNvb3JkaW5hdGVzIHVzZWQgdG8gcmVwcmVzZW50IHJvdGF0aW9uIGluIDMtZGltZW5zaW9uYWwgc3BhY2UuXHJcbiAqIEBhbGlhcyBRdWF0ZXJuaW9uXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3g9MC4wXSBUaGUgWCBjb21wb25lbnQuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbeT0wLjBdIFRoZSBZIGNvbXBvbmVudC5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFt6PTAuMF0gVGhlIFogY29tcG9uZW50LlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3c9MC4wXSBUaGUgVyBjb21wb25lbnQuXHJcbiAqXHJcbiAqIEBzZWUgUGFja2FibGVGb3JJbnRlcnBvbGF0aW9uXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUXVhdGVybmlvbiB7XHJcblx0cHVibGljIHN0YXRpYyBaRVJPID0gT2JqZWN0LmZyZWV6ZShuZXcgUXVhdGVybmlvbigwLjAsIDAuMCwgMC4wLCAwLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBJREVOVElUWSA9IE9iamVjdC5mcmVlemUobmV3IFF1YXRlcm5pb24oMC4wLCAwLjAsIDAuMCwgMS4wKSk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyB4OiBudW1iZXIgPSAwLCBwdWJsaWMgeTogbnVtYmVyID0gMCwgcHVibGljIHo6IG51bWJlciA9IDAsIHB1YmxpYyB3OiBudW1iZXIgPSAxKSB7fVxyXG5cdHNldCh4LCB5LCB6LCB3KSB7XHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHRoaXMueiA9IHo7XHJcblx0XHR0aGlzLncgPSB3O1xyXG5cdH1cclxuXHRub3JtYWxpemUoKSB7XHJcblx0XHRjb25zdCBpbnZlcnNlTWFnbml0dWRlID0gMS4wIC8gUXVhdGVybmlvbi5tYWduaXR1ZGUodGhpcyk7XHJcblx0XHRjb25zdCB4ID0gdGhpcy54ICogaW52ZXJzZU1hZ25pdHVkZTtcclxuXHRcdGNvbnN0IHkgPSB0aGlzLnkgKiBpbnZlcnNlTWFnbml0dWRlO1xyXG5cdFx0Y29uc3QgeiA9IHRoaXMueiAqIGludmVyc2VNYWduaXR1ZGU7XHJcblx0XHRjb25zdCB3ID0gdGhpcy53ICogaW52ZXJzZU1hZ25pdHVkZTtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHRoaXMueiA9IHo7XHJcblx0XHR0aGlzLncgPSB3O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdGludmVydCgpIHtcclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHRoaXMueiAqPSAtMTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0ZG90KHY6IFF1YXRlcm5pb24pOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMueCAqIHYueCArIHRoaXMueSAqIHYueSArIHRoaXMueiAqIHYueiArIHRoaXMudyAqIHYudztcclxuXHR9XHJcblx0c2V0RnJvbVVuaXRWZWN0b3JzKHZGcm9tOiBWZWN0b3IzLCB2VG86IFZlY3RvcjMpOiBRdWF0ZXJuaW9uIHtcclxuXHRcdC8vIGFzc3VtZXMgZGlyZWN0aW9uIHZlY3RvcnMgdkZyb20gYW5kIHZUbyBhcmUgbm9ybWFsaXplZFxyXG5cdFx0bGV0IHIgPSBWZWN0b3IzLmRvdCh2RnJvbSwgdlRvKSArIDE7XHJcblx0XHRpZiAociA8IE51bWJlci5FUFNJTE9OKSB7XHJcblx0XHRcdC8vIHZGcm9tIGFuZCB2VG8gcG9pbnQgaW4gb3Bwb3NpdGUgZGlyZWN0aW9uc1xyXG5cclxuXHRcdFx0ciA9IDA7XHJcblxyXG5cdFx0XHRpZiAoTWF0aC5hYnModkZyb20ueCkgPiBNYXRoLmFicyh2RnJvbS56KSkge1xyXG5cdFx0XHRcdHRoaXMueCA9IC12RnJvbS55O1xyXG5cdFx0XHRcdHRoaXMueSA9IHZGcm9tLng7XHJcblx0XHRcdFx0dGhpcy56ID0gMDtcclxuXHRcdFx0XHR0aGlzLncgPSByO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMueCA9IDA7XHJcblx0XHRcdFx0dGhpcy55ID0gLXZGcm9tLno7XHJcblx0XHRcdFx0dGhpcy56ID0gdkZyb20ueTtcclxuXHRcdFx0XHR0aGlzLncgPSByO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBjcm9zc1ZlY3RvcnMoIHZGcm9tLCB2VG8gKTsgLy8gaW5saW5lZCB0byBhdm9pZCBjeWNsaWMgZGVwZW5kZW5jeSBvbiBWZWN0b3IzXHJcblxyXG5cdFx0XHR0aGlzLnggPSB2RnJvbS55ICogdlRvLnogLSB2RnJvbS56ICogdlRvLnk7XHJcblx0XHRcdHRoaXMueSA9IHZGcm9tLnogKiB2VG8ueCAtIHZGcm9tLnggKiB2VG8uejtcclxuXHRcdFx0dGhpcy56ID0gdkZyb20ueCAqIHZUby55IC0gdkZyb20ueSAqIHZUby54O1xyXG5cdFx0XHR0aGlzLncgPSByO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLm5vcm1hbGl6ZSgpO1xyXG5cdH1cclxuXHRzZXRGcm9tUm90YXRpb25NYXRyaXgobWF0cml4OiBNYXRyaXg0KTogUXVhdGVybmlvbiB7XHJcblx0XHRjb25zdCB0ZSA9IG1hdHJpeCxcclxuXHRcdFx0bTExID0gdGVbMF0sXHJcblx0XHRcdG0xMiA9IHRlWzRdLFxyXG5cdFx0XHRtMTMgPSB0ZVs4XSxcclxuXHRcdFx0bTIxID0gdGVbMV0sXHJcblx0XHRcdG0yMiA9IHRlWzVdLFxyXG5cdFx0XHRtMjMgPSB0ZVs5XSxcclxuXHRcdFx0bTMxID0gdGVbMl0sXHJcblx0XHRcdG0zMiA9IHRlWzZdLFxyXG5cdFx0XHRtMzMgPSB0ZVsxMF0sXHJcblx0XHRcdHRyYWNlID0gbTExICsgbTIyICsgbTMzO1xyXG5cclxuXHRcdGlmICh0cmFjZSA+IDApIHtcclxuXHRcdFx0Y29uc3QgcyA9IDAuNSAvIE1hdGguc3FydCh0cmFjZSArIDEuMCk7XHJcblxyXG5cdFx0XHR0aGlzLncgPSAwLjI1IC8gcztcclxuXHRcdFx0dGhpcy54ID0gKG0zMiAtIG0yMykgKiBzO1xyXG5cdFx0XHR0aGlzLnkgPSAobTEzIC0gbTMxKSAqIHM7XHJcblx0XHRcdHRoaXMueiA9IChtMjEgLSBtMTIpICogcztcclxuXHRcdH0gZWxzZSBpZiAobTExID4gbTIyICYmIG0xMSA+IG0zMykge1xyXG5cdFx0XHRjb25zdCBzID0gMi4wICogTWF0aC5zcXJ0KDEuMCArIG0xMSAtIG0yMiAtIG0zMyk7XHJcblxyXG5cdFx0XHR0aGlzLncgPSAobTMyIC0gbTIzKSAvIHM7XHJcblx0XHRcdHRoaXMueCA9IDAuMjUgKiBzO1xyXG5cdFx0XHR0aGlzLnkgPSAobTEyICsgbTIxKSAvIHM7XHJcblx0XHRcdHRoaXMueiA9IChtMTMgKyBtMzEpIC8gcztcclxuXHRcdH0gZWxzZSBpZiAobTIyID4gbTMzKSB7XHJcblx0XHRcdGNvbnN0IHMgPSAyLjAgKiBNYXRoLnNxcnQoMS4wICsgbTIyIC0gbTExIC0gbTMzKTtcclxuXHJcblx0XHRcdHRoaXMudyA9IChtMTMgLSBtMzEpIC8gcztcclxuXHRcdFx0dGhpcy54ID0gKG0xMiArIG0yMSkgLyBzO1xyXG5cdFx0XHR0aGlzLnkgPSAwLjI1ICogcztcclxuXHRcdFx0dGhpcy56ID0gKG0yMyArIG0zMikgLyBzO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc3QgcyA9IDIuMCAqIE1hdGguc3FydCgxLjAgKyBtMzMgLSBtMTEgLSBtMjIpO1xyXG5cclxuXHRcdFx0dGhpcy53ID0gKG0yMSAtIG0xMikgLyBzO1xyXG5cdFx0XHR0aGlzLnggPSAobTEzICsgbTMxKSAvIHM7XHJcblx0XHRcdHRoaXMueSA9IChtMjMgKyBtMzIpIC8gcztcclxuXHRcdFx0dGhpcy56ID0gMC4yNSAqIHM7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0Y2xvbmUoKSB7XHJcblx0XHRyZXR1cm4gUXVhdGVybmlvbi5jbG9uZSh0aGlzLCB0aGlzKTtcclxuXHR9XHJcblxyXG5cdGVxdWFscyhyaWdodDogUXVhdGVybmlvbik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIFF1YXRlcm5pb24uZXF1YWxzKHRoaXMsIHJpZ2h0KTtcclxuXHR9XHJcblxyXG5cdGVxdWFsc0Vwc2lsb24ocmlnaHQ6IFF1YXRlcm5pb24sIGVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gUXVhdGVybmlvbi5lcXVhbHNFcHNpbG9uKHRoaXMsIHJpZ2h0LCBlcHNpbG9uKTtcclxuXHR9XHJcblx0dG9BcnJheSgpOiBudW1iZXJbXSB7XHJcblx0XHRjb25zdCB7IHgsIHksIHosIHcgfSA9IHRoaXM7XHJcblx0XHRyZXR1cm4gW3gsIHksIHosIHddO1xyXG5cdH1cclxuXHRzdGF0aWMgZnJvbUF4aXNBbmdsZShheGlzOiBWZWN0b3IzLCBhbmdsZTogbnVtYmVyKTogUXVhdGVybmlvbiB7XHJcblx0XHRjb25zdCBoYWxmQW5nbGUgPSBhbmdsZSAvIDIuMDtcclxuXHRcdGNvbnN0IHMgPSBNYXRoLnNpbihoYWxmQW5nbGUpO1xyXG5cdFx0ZnJvbUF4aXNBbmdsZVNjcmF0Y2ggPSBWZWN0b3IzLm5vcm1hbGl6ZShheGlzLCBmcm9tQXhpc0FuZ2xlU2NyYXRjaCk7XHJcblxyXG5cdFx0Y29uc3QgeCA9IGZyb21BeGlzQW5nbGVTY3JhdGNoLnggKiBzO1xyXG5cdFx0Y29uc3QgeSA9IGZyb21BeGlzQW5nbGVTY3JhdGNoLnkgKiBzO1xyXG5cdFx0Y29uc3QgeiA9IGZyb21BeGlzQW5nbGVTY3JhdGNoLnogKiBzO1xyXG5cdFx0Y29uc3QgdyA9IE1hdGguY29zKGhhbGZBbmdsZSk7XHJcblx0XHQvLyBpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0Ly8gICByZXR1cm5cclxuXHRcdC8vIH1cclxuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBRdWF0ZXJuaW9uKHgsIHksIHosIHcpO1xyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmVzdWx0LnogPSB6O1xyXG5cdFx0cmVzdWx0LncgPSB3O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8vIHN0YXRpYyBmcm9tUm90YXRpb25NYXRyaXgobWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHQvLyBcdGxldCByb290O1xyXG5cdC8vIFx0bGV0IHg7XHJcblx0Ly8gXHRsZXQgeTtcclxuXHQvLyBcdGxldCB6O1xyXG5cdC8vIFx0bGV0IHc7XHJcblxyXG5cdC8vIFx0Y29uc3QgbTAwID0gbWF0cml4W01hdHJpeDMuQ09MVU1OMFJPVzBdO1xyXG5cdC8vIFx0Y29uc3QgbTExID0gbWF0cml4W01hdHJpeDMuQ09MVU1OMVJPVzFdO1xyXG5cdC8vIFx0Y29uc3QgbTIyID0gbWF0cml4W01hdHJpeDMuQ09MVU1OMlJPVzJdO1xyXG5cdC8vIFx0Y29uc3QgdHJhY2UgPSBtMDAgKyBtMTEgKyBtMjI7XHJcblxyXG5cdC8vIFx0aWYgKHRyYWNlID4gMC4wKSB7XHJcblx0Ly8gXHRcdC8vIHx3fCA+IDEvMiwgbWF5IGFzIHdlbGwgY2hvb3NlIHcgPiAxLzJcclxuXHQvLyBcdFx0cm9vdCA9IE1hdGguc3FydCh0cmFjZSArIDEuMCk7IC8vIDJ3XHJcblx0Ly8gXHRcdHcgPSAwLjUgKiByb290O1xyXG5cdC8vIFx0XHRyb290ID0gMC41IC8gcm9vdDsgLy8gMS8oNHcpXHJcblxyXG5cdC8vIFx0XHR4ID0gKG1hdHJpeFtNYXRyaXgzLkNPTFVNTjFST1cyXSAtIG1hdHJpeFtNYXRyaXgzLkNPTFVNTjJST1cxXSkgKiByb290O1xyXG5cdC8vIFx0XHR5ID0gKG1hdHJpeFtNYXRyaXgzLkNPTFVNTjJST1cwXSAtIG1hdHJpeFtNYXRyaXgzLkNPTFVNTjBST1cyXSkgKiByb290O1xyXG5cdC8vIFx0XHR6ID0gKG1hdHJpeFtNYXRyaXgzLkNPTFVNTjBST1cxXSAtIG1hdHJpeFtNYXRyaXgzLkNPTFVNTjFST1cwXSkgKiByb290O1xyXG5cdC8vIFx0fSBlbHNlIHtcclxuXHQvLyBcdFx0Ly8gfHd8IDw9IDEvMlxyXG5cdC8vIFx0XHRjb25zdCBuZXh0ID0gZnJvbVJvdGF0aW9uTWF0cml4TmV4dDtcclxuXHJcblx0Ly8gXHRcdGxldCBpID0gMDtcclxuXHQvLyBcdFx0aWYgKG0xMSA+IG0wMCkge1xyXG5cdC8vIFx0XHRcdGkgPSAxO1xyXG5cdC8vIFx0XHR9XHJcblx0Ly8gXHRcdGlmIChtMjIgPiBtMDAgJiYgbTIyID4gbTExKSB7XHJcblx0Ly8gXHRcdFx0aSA9IDI7XHJcblx0Ly8gXHRcdH1cclxuXHQvLyBcdFx0Y29uc3QgaiA9IG5leHRbaV07XHJcblx0Ly8gXHRcdGNvbnN0IGsgPSBuZXh0W2pdO1xyXG5cclxuXHQvLyBcdFx0cm9vdCA9IE1hdGguc3FydChcclxuXHQvLyBcdFx0XHRtYXRyaXhbTWF0cml4My5nZXRFbGVtZW50SW5kZXgoaSwgaSldIC1cclxuXHQvLyBcdFx0XHRcdG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChqLCBqKV0gLVxyXG5cdC8vIFx0XHRcdFx0bWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KGssIGspXSArXHJcblx0Ly8gXHRcdFx0XHQxLjBcclxuXHQvLyBcdFx0KTtcclxuXHJcblx0Ly8gXHRcdGNvbnN0IHF1YXQgPSBmcm9tUm90YXRpb25NYXRyaXhRdWF0O1xyXG5cdC8vIFx0XHRxdWF0W2ldID0gMC41ICogcm9vdDtcclxuXHQvLyBcdFx0cm9vdCA9IDAuNSAvIHJvb3Q7XHJcblx0Ly8gXHRcdHcgPSAobWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KGssIGopXSAtIG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChqLCBrKV0pICogcm9vdDtcclxuXHQvLyBcdFx0cXVhdFtqXSA9IChtYXRyaXhbTWF0cml4My5nZXRFbGVtZW50SW5kZXgoaiwgaSldICsgbWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KGksIGopXSkgKiByb290O1xyXG5cdC8vIFx0XHRxdWF0W2tdID0gKG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChrLCBpKV0gKyBtYXRyaXhbTWF0cml4My5nZXRFbGVtZW50SW5kZXgoaSwgayldKSAqIHJvb3Q7XHJcblxyXG5cdC8vIFx0XHR4ID0gLXF1YXRbMF07XHJcblx0Ly8gXHRcdHkgPSAtcXVhdFsxXTtcclxuXHQvLyBcdFx0eiA9IC1xdWF0WzJdO1xyXG5cdC8vIFx0fVxyXG5cclxuXHQvLyBcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0Ly8gXHRcdHJldHVybiBuZXcgUXVhdGVybmlvbih4LCB5LCB6LCB3KTtcclxuXHQvLyBcdH1cclxuXHQvLyBcdHJlc3VsdC54ID0geDtcclxuXHQvLyBcdHJlc3VsdC55ID0geTtcclxuXHQvLyBcdHJlc3VsdC56ID0gejtcclxuXHQvLyBcdHJlc3VsdC53ID0gdztcclxuXHQvLyBcdHJldHVybiByZXN1bHQ7XHJcblx0Ly8gfVxyXG5cclxuXHRzdGF0aWMgY2xvbmUocXVhdGVybmlvbjogUXVhdGVybmlvbiwgcmVzdWx0OiBRdWF0ZXJuaW9uKTogUXVhdGVybmlvbiB7XHJcblx0XHRpZiAoIWRlZmluZWQocXVhdGVybmlvbikpIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQueCA9IHF1YXRlcm5pb24ueDtcclxuXHRcdHJlc3VsdC55ID0gcXVhdGVybmlvbi55O1xyXG5cdFx0cmVzdWx0LnogPSBxdWF0ZXJuaW9uLno7XHJcblx0XHRyZXN1bHQudyA9IHF1YXRlcm5pb24udztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY29uanVnYXRlKHF1YXRlcm5pb246IFF1YXRlcm5pb24sIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0cmVzdWx0LnggPSAtcXVhdGVybmlvbi54O1xyXG5cdFx0cmVzdWx0LnkgPSAtcXVhdGVybmlvbi55O1xyXG5cdFx0cmVzdWx0LnogPSAtcXVhdGVybmlvbi56O1xyXG5cdFx0cmVzdWx0LncgPSBxdWF0ZXJuaW9uLnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1hZ25pdHVkZVNxdWFyZWQocXVhdGVybmlvbjogUXVhdGVybmlvbik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRxdWF0ZXJuaW9uLnggKiBxdWF0ZXJuaW9uLnggK1xyXG5cdFx0XHRxdWF0ZXJuaW9uLnkgKiBxdWF0ZXJuaW9uLnkgK1xyXG5cdFx0XHRxdWF0ZXJuaW9uLnogKiBxdWF0ZXJuaW9uLnogK1xyXG5cdFx0XHRxdWF0ZXJuaW9uLncgKiBxdWF0ZXJuaW9uLndcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWFnbml0dWRlKHF1YXRlcm5pb246IFF1YXRlcm5pb24pOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIE1hdGguc3FydChRdWF0ZXJuaW9uLm1hZ25pdHVkZVNxdWFyZWQocXVhdGVybmlvbikpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG5vcm1hbGl6ZShxdWF0ZXJuaW9uOiBRdWF0ZXJuaW9uLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHRcdGNvbnN0IGludmVyc2VNYWduaXR1ZGUgPSAxLjAgLyBRdWF0ZXJuaW9uLm1hZ25pdHVkZShxdWF0ZXJuaW9uKTtcclxuXHRcdGNvbnN0IHggPSBxdWF0ZXJuaW9uLnggKiBpbnZlcnNlTWFnbml0dWRlO1xyXG5cdFx0Y29uc3QgeSA9IHF1YXRlcm5pb24ueSAqIGludmVyc2VNYWduaXR1ZGU7XHJcblx0XHRjb25zdCB6ID0gcXVhdGVybmlvbi56ICogaW52ZXJzZU1hZ25pdHVkZTtcclxuXHRcdGNvbnN0IHcgPSBxdWF0ZXJuaW9uLncgKiBpbnZlcnNlTWFnbml0dWRlO1xyXG5cclxuXHRcdHJlc3VsdC54ID0geDtcclxuXHRcdHJlc3VsdC55ID0geTtcclxuXHRcdHJlc3VsdC56ID0gejtcclxuXHRcdHJlc3VsdC53ID0gdztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgaW52ZXJzZShxdWF0ZXJuaW9uOiBRdWF0ZXJuaW9uLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHRcdGNvbnN0IG1hZ25pdHVkZVNxdWFyZWQgPSBRdWF0ZXJuaW9uLm1hZ25pdHVkZVNxdWFyZWQocXVhdGVybmlvbik7XHJcblx0XHRyZXN1bHQgPSBRdWF0ZXJuaW9uLmNvbmp1Z2F0ZShxdWF0ZXJuaW9uLCByZXN1bHQpO1xyXG5cdFx0cmV0dXJuIFF1YXRlcm5pb24ubXVsdGlwbHlCeVNjYWxhcihyZXN1bHQsIDEuMCAvIG1hZ25pdHVkZVNxdWFyZWQsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYWRkKGxlZnQ6IFF1YXRlcm5pb24sIHJpZ2h0OiBRdWF0ZXJuaW9uLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHRcdHJlc3VsdC54ID0gbGVmdC54ICsgcmlnaHQueDtcclxuXHRcdHJlc3VsdC55ID0gbGVmdC55ICsgcmlnaHQueTtcclxuXHRcdHJlc3VsdC56ID0gbGVmdC56ICsgcmlnaHQuejtcclxuXHRcdHJlc3VsdC53ID0gbGVmdC53ICsgcmlnaHQudztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc3VidHJhY3QobGVmdDogUXVhdGVybmlvbiwgcmlnaHQ6IFF1YXRlcm5pb24sIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0cmVzdWx0LnggPSBsZWZ0LnggLSByaWdodC54O1xyXG5cdFx0cmVzdWx0LnkgPSBsZWZ0LnkgLSByaWdodC55O1xyXG5cdFx0cmVzdWx0LnogPSBsZWZ0LnogLSByaWdodC56O1xyXG5cdFx0cmVzdWx0LncgPSBsZWZ0LncgLSByaWdodC53O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBuZWdhdGUocXVhdGVybmlvbjogUXVhdGVybmlvbiwgcmVzdWx0OiBRdWF0ZXJuaW9uKTogUXVhdGVybmlvbiB7XHJcblx0XHRyZXN1bHQueCA9IC1xdWF0ZXJuaW9uLng7XHJcblx0XHRyZXN1bHQueSA9IC1xdWF0ZXJuaW9uLnk7XHJcblx0XHRyZXN1bHQueiA9IC1xdWF0ZXJuaW9uLno7XHJcblx0XHRyZXN1bHQudyA9IC1xdWF0ZXJuaW9uLnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRvdChsZWZ0OiBRdWF0ZXJuaW9uLCByaWdodDogUXVhdGVybmlvbik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gbGVmdC54ICogcmlnaHQueCArIGxlZnQueSAqIHJpZ2h0LnkgKyBsZWZ0LnogKiByaWdodC56ICsgbGVmdC53ICogcmlnaHQudztcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseShsZWZ0OiBRdWF0ZXJuaW9uLCByaWdodDogUXVhdGVybmlvbiwgcmVzdWx0OiBRdWF0ZXJuaW9uKTogUXVhdGVybmlvbiB7XHJcblx0XHRjb25zdCBsZWZ0WCA9IGxlZnQueDtcclxuXHRcdGNvbnN0IGxlZnRZID0gbGVmdC55O1xyXG5cdFx0Y29uc3QgbGVmdFogPSBsZWZ0Lno7XHJcblx0XHRjb25zdCBsZWZ0VyA9IGxlZnQudztcclxuXHJcblx0XHRjb25zdCByaWdodFggPSByaWdodC54O1xyXG5cdFx0Y29uc3QgcmlnaHRZID0gcmlnaHQueTtcclxuXHRcdGNvbnN0IHJpZ2h0WiA9IHJpZ2h0Lno7XHJcblx0XHRjb25zdCByaWdodFcgPSByaWdodC53O1xyXG5cclxuXHRcdGNvbnN0IHggPSBsZWZ0VyAqIHJpZ2h0WCArIGxlZnRYICogcmlnaHRXICsgbGVmdFkgKiByaWdodFogLSBsZWZ0WiAqIHJpZ2h0WTtcclxuXHRcdGNvbnN0IHkgPSBsZWZ0VyAqIHJpZ2h0WSAtIGxlZnRYICogcmlnaHRaICsgbGVmdFkgKiByaWdodFcgKyBsZWZ0WiAqIHJpZ2h0WDtcclxuXHRcdGNvbnN0IHogPSBsZWZ0VyAqIHJpZ2h0WiArIGxlZnRYICogcmlnaHRZIC0gbGVmdFkgKiByaWdodFggKyBsZWZ0WiAqIHJpZ2h0VztcclxuXHRcdGNvbnN0IHcgPSBsZWZ0VyAqIHJpZ2h0VyAtIGxlZnRYICogcmlnaHRYIC0gbGVmdFkgKiByaWdodFkgLSBsZWZ0WiAqIHJpZ2h0WjtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXN1bHQudyA9IHc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlTY2FsYXIocXVhdGVybmlvbjogUXVhdGVybmlvbiwgc2NhbGFyOiBudW1iZXIsIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0cmVzdWx0LnggPSBxdWF0ZXJuaW9uLnggKiBzY2FsYXI7XHJcblx0XHRyZXN1bHQueSA9IHF1YXRlcm5pb24ueSAqIHNjYWxhcjtcclxuXHRcdHJlc3VsdC56ID0gcXVhdGVybmlvbi56ICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0LncgPSBxdWF0ZXJuaW9uLncgKiBzY2FsYXI7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRpdmlkZUJ5U2NhbGFyKHF1YXRlcm5pb246IFF1YXRlcm5pb24sIHNjYWxhcjogbnVtYmVyLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHRcdHJlc3VsdC54ID0gcXVhdGVybmlvbi54IC8gc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnkgPSBxdWF0ZXJuaW9uLnkgLyBzY2FsYXI7XHJcblx0XHRyZXN1bHQueiA9IHF1YXRlcm5pb24ueiAvIHNjYWxhcjtcclxuXHRcdHJlc3VsdC53ID0gcXVhdGVybmlvbi53IC8gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjb21wdXRlQXhpcyhxdWF0ZXJuaW9uOiBRdWF0ZXJuaW9uLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IHcgPSBxdWF0ZXJuaW9uLnc7XHJcblx0XHRpZiAoTWF0aC5hYnModyAtIDEuMCkgPCBHTWF0aC5FUFNJTE9ONikge1xyXG5cdFx0XHRyZXN1bHQueCA9IHJlc3VsdC55ID0gcmVzdWx0LnogPSAwO1xyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHNjYWxhciA9IDEuMCAvIE1hdGguc3FydCgxLjAgLSB3ICogdyk7XHJcblxyXG5cdFx0cmVzdWx0LnggPSBxdWF0ZXJuaW9uLnggKiBzY2FsYXI7XHJcblx0XHRyZXN1bHQueSA9IHF1YXRlcm5pb24ueSAqIHNjYWxhcjtcclxuXHRcdHJlc3VsdC56ID0gcXVhdGVybmlvbi56ICogc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjb21wdXRlQW5nbGUocXVhdGVybmlvbjogUXVhdGVybmlvbik6IG51bWJlciB7XHJcblx0XHRpZiAoTWF0aC5hYnMocXVhdGVybmlvbi53IC0gMS4wKSA8IEdNYXRoLkVQU0lMT042KSB7XHJcblx0XHRcdHJldHVybiAwLjA7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gMi4wICogTWF0aC5hY29zKHF1YXRlcm5pb24udyk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbGVycChzdGFydDogUXVhdGVybmlvbiwgZW5kOiBRdWF0ZXJuaW9uLCB0OiBudW1iZXIsIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0bGVycFNjcmF0Y2ggPSBRdWF0ZXJuaW9uLm11bHRpcGx5QnlTY2FsYXIoZW5kLCB0LCBsZXJwU2NyYXRjaCk7XHJcblx0XHRyZXN1bHQgPSBRdWF0ZXJuaW9uLm11bHRpcGx5QnlTY2FsYXIoc3RhcnQsIDEuMCAtIHQsIHJlc3VsdCk7XHJcblx0XHRyZXR1cm4gUXVhdGVybmlvbi5hZGQobGVycFNjcmF0Y2gsIHJlc3VsdCwgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzbGVycChzdGFydDogUXVhdGVybmlvbiwgZW5kOiBRdWF0ZXJuaW9uLCB0OiBudW1iZXIsIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0bGV0IGRvdCA9IFF1YXRlcm5pb24uZG90KHN0YXJ0LCBlbmQpO1xyXG5cclxuXHRcdC8vIFRoZSBhbmdsZSBiZXR3ZWVuIHN0YXJ0IG11c3QgYmUgYWN1dGUuIFNpbmNlIHEgYW5kIC1xIHJlcHJlc2VudFxyXG5cdFx0Ly8gdGhlIHNhbWUgcm90YXRpb24sIG5lZ2F0ZSBxIHRvIGdldCB0aGUgYWN1dGUgYW5nbGUuXHJcblx0XHRsZXQgciA9IGVuZDtcclxuXHRcdGlmIChkb3QgPCAwLjApIHtcclxuXHRcdFx0ZG90ID0gLWRvdDtcclxuXHRcdFx0ciA9IHNsZXJwRW5kTmVnYXRlZCA9IFF1YXRlcm5pb24ubmVnYXRlKGVuZCwgc2xlcnBFbmROZWdhdGVkKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBkb3QgPiAwLCBhcyB0aGUgZG90IHByb2R1Y3QgYXBwcm9hY2hlcyAxLCB0aGUgYW5nbGUgYmV0d2VlbiB0aGVcclxuXHRcdC8vIHF1YXRlcm5pb25zIHZhbmlzaGVzLiB1c2UgbGluZWFyIGludGVycG9sYXRpb24uXHJcblx0XHRpZiAoMS4wIC0gZG90IDwgR01hdGguRVBTSUxPTjYpIHtcclxuXHRcdFx0cmV0dXJuIFF1YXRlcm5pb24ubGVycChzdGFydCwgciwgdCwgcmVzdWx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCB0aGV0YSA9IE1hdGguYWNvcyhkb3QpO1xyXG5cdFx0c2xlcnBTY2FsZWRQID0gUXVhdGVybmlvbi5tdWx0aXBseUJ5U2NhbGFyKHN0YXJ0LCBNYXRoLnNpbigoMSAtIHQpICogdGhldGEpLCBzbGVycFNjYWxlZFApO1xyXG5cdFx0c2xlcnBTY2FsZWRSID0gUXVhdGVybmlvbi5tdWx0aXBseUJ5U2NhbGFyKHIsIE1hdGguc2luKHQgKiB0aGV0YSksIHNsZXJwU2NhbGVkUik7XHJcblx0XHRyZXN1bHQgPSBRdWF0ZXJuaW9uLmFkZChzbGVycFNjYWxlZFAsIHNsZXJwU2NhbGVkUiwgcmVzdWx0KTtcclxuXHRcdHJldHVybiBRdWF0ZXJuaW9uLm11bHRpcGx5QnlTY2FsYXIocmVzdWx0LCAxLjAgLyBNYXRoLnNpbih0aGV0YSksIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc3F1YWQoXHJcblx0XHRxMDogUXVhdGVybmlvbixcclxuXHRcdHExOiBRdWF0ZXJuaW9uLFxyXG5cdFx0czA6IFF1YXRlcm5pb24sXHJcblx0XHRzMTogUXVhdGVybmlvbixcclxuXHRcdHQ6IG51bWJlcixcclxuXHRcdHJlc3VsdDogUXVhdGVybmlvblxyXG5cdCk6IFF1YXRlcm5pb24ge1xyXG5cdFx0Y29uc3Qgc2xlcnAwID0gUXVhdGVybmlvbi5zbGVycChxMCwgcTEsIHQsIHNxdWFkU2NyYXRjaFF1YXRlcm5pb24wKTtcclxuXHRcdGNvbnN0IHNsZXJwMSA9IFF1YXRlcm5pb24uc2xlcnAoczAsIHMxLCB0LCBzcXVhZFNjcmF0Y2hRdWF0ZXJuaW9uMSk7XHJcblx0XHRyZXR1cm4gUXVhdGVybmlvbi5zbGVycChzbGVycDAsIHNsZXJwMSwgMi4wICogdCAqICgxLjAgLSB0KSwgcmVzdWx0KTtcclxuXHR9XHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBRdWF0ZXJuaW9uLCByaWdodDogUXVhdGVybmlvbik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdGxlZnQueCA9PT0gcmlnaHQueCAmJlxyXG5cdFx0XHRcdGxlZnQueSA9PT0gcmlnaHQueSAmJlxyXG5cdFx0XHRcdGxlZnQueiA9PT0gcmlnaHQueiAmJlxyXG5cdFx0XHRcdGxlZnQudyA9PT0gcmlnaHQudylcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZXF1YWxzRXBzaWxvbihsZWZ0OiBRdWF0ZXJuaW9uLCByaWdodDogUXVhdGVybmlvbiwgZXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdGVwc2lsb24gPSBkZWZhdWx0VmFsdWUoZXBzaWxvbiwgMCk7XHJcblxyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnQueCAtIHJpZ2h0LngpIDw9IGVwc2lsb24gJiZcclxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0LnkgLSByaWdodC55KSA8PSBlcHNpbG9uICYmXHJcblx0XHRcdFx0TWF0aC5hYnMobGVmdC56IC0gcmlnaHQueikgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnQudyAtIHJpZ2h0LncpIDw9IGVwc2lsb24pXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGV4cChjYXJ0ZXNpYW46IFZlY3RvcjMsIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0Y29uc3QgdGhldGEgPSBWZWN0b3IzLm1hZ25pdHVkZShjYXJ0ZXNpYW4pO1xyXG5cdFx0bGV0IHNpblRoZXRhT3ZlclRoZXRhID0gMC4wO1xyXG5cclxuXHRcdGlmICh0aGV0YSAhPT0gMC4wKSB7XHJcblx0XHRcdHNpblRoZXRhT3ZlclRoZXRhID0gTWF0aC5zaW4odGhldGEpIC8gdGhldGE7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0LnggPSBjYXJ0ZXNpYW4ueCAqIHNpblRoZXRhT3ZlclRoZXRhO1xyXG5cdFx0cmVzdWx0LnkgPSBjYXJ0ZXNpYW4ueSAqIHNpblRoZXRhT3ZlclRoZXRhO1xyXG5cdFx0cmVzdWx0LnogPSBjYXJ0ZXNpYW4ueiAqIHNpblRoZXRhT3ZlclRoZXRhO1xyXG5cdFx0cmVzdWx0LncgPSBNYXRoLmNvcyh0aGV0YSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcbn1cclxuXHJcbmxldCBmcm9tQXhpc0FuZ2xlU2NyYXRjaCA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG5jb25zdCBmcm9tUm90YXRpb25NYXRyaXhOZXh0ID0gWzEsIDIsIDBdO1xyXG5jb25zdCBmcm9tUm90YXRpb25NYXRyaXhRdWF0ID0gbmV3IEFycmF5KDMpO1xyXG5cclxubGV0IGxlcnBTY3JhdGNoID0gbmV3IFF1YXRlcm5pb24oKTtcclxuXHJcbmxldCBzbGVycEVuZE5lZ2F0ZWQgPSBuZXcgUXVhdGVybmlvbigpO1xyXG5sZXQgc2xlcnBTY2FsZWRQID0gbmV3IFF1YXRlcm5pb24oKTtcclxubGV0IHNsZXJwU2NhbGVkUiA9IG5ldyBRdWF0ZXJuaW9uKCk7XHJcblxyXG5jb25zdCBzcXVhZFNjcmF0Y2hDYXJ0ZXNpYW4wID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3Qgc3F1YWRTY3JhdGNoQ2FydGVzaWFuMSA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHNxdWFkU2NyYXRjaFF1YXRlcm5pb24wID0gbmV3IFF1YXRlcm5pb24oKTtcclxuY29uc3Qgc3F1YWRTY3JhdGNoUXVhdGVybmlvbjEgPSBuZXcgUXVhdGVybmlvbigpO1xyXG4iLCJpbXBvcnQgTWF0cml4NCBmcm9tIFwiLi4vbWF0aC9NYXRyaXg0XCI7XG5pbXBvcnQgeyBRdWF0ZXJuaW9uIH0gZnJvbSBcIi4uL21hdGgvUXVhdGVybmlvblwiO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xuaW1wb3J0IElDbG9uZSBmcm9tIFwiLi9JQ2xvbmVcIjtcbmltcG9ydCB7IFJlbmRlck9iamVjdFR5cGUgfSBmcm9tIFwiLi9XZWJHUFVUeXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZW5kZXJPYmplY3QgaW1wbGVtZW50cyBJQ2xvbmUge1xuXHRwdWJsaWMgdXA6IFZlY3RvcjM7XG5cdHByb3RlY3RlZCBfcG9zaXRpb246IFZlY3RvcjM7XG5cdHByb3RlY3RlZCBfc2NhbGU6IFZlY3RvcjM7XG5cdHByb3RlY3RlZCBfcXVhdGVybmlvbjogUXVhdGVybmlvbjtcblx0cHJvdGVjdGVkIF90YXJnZXQ6IFZlY3RvcjM7XG5cdHByaXZhdGUgX25vcm1hbE1hdHJpeDogTWF0cml4NDtcblx0bW9kZWxNYXRyaXg6IE1hdHJpeDQ7XG5cdHBhcmVudDogUmVuZGVyT2JqZWN0O1xuXHR0eXBlOiBSZW5kZXJPYmplY3RUeXBlO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuX3Bvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcblx0XHR0aGlzLl9zY2FsZSA9IG5ldyBWZWN0b3IzKDEsIDEsIDEpO1xuXHRcdHRoaXMuX3F1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpO1xuXHRcdHRoaXMubW9kZWxNYXRyaXggPSBNYXRyaXg0LmNsb25lKE1hdHJpeDQuSURFTlRJVFksIG5ldyBNYXRyaXg0KCkpO1xuXHRcdHRoaXMuX25vcm1hbE1hdHJpeCA9IE1hdHJpeDQuY2xvbmUoTWF0cml4NC5JREVOVElUWSwgbmV3IE1hdHJpeDQoKSk7XG5cdFx0dGhpcy51cCA9IG5ldyBWZWN0b3IzKDAsIDEsIDApO1xuXHRcdHRoaXMuX3RhcmdldCA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xuXHR9XG5cdHB1YmxpYyBnZXQgbm9ybWFsTWF0cml4KCk6IE1hdHJpeDQge1xuXHRcdHJldHVybiB0aGlzLl9ub3JtYWxNYXRyaXg7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IHBvc2l0aW9uKCk6IFZlY3RvcjMge1xuXHRcdHJldHVybiB0aGlzLl9wb3NpdGlvbjtcblx0fVxuXHRwdWJsaWMgZ2V0IHNjYWxlKCk6IFZlY3RvcjMge1xuXHRcdHJldHVybiB0aGlzLl9zY2FsZTtcblx0fVxuXHRwdWJsaWMgZ2V0IHF1YXRlcm5pb24oKTogUXVhdGVybmlvbiB7XG5cdFx0cmV0dXJuIHRoaXMuX3F1YXRlcm5pb247XG5cdH1cblx0cHJpdmF0ZSB1cGRhdGVOb3JtYWxNYXRyaXgoKSB7XG5cdFx0TWF0cml4NC5pbnZlcnNlKHRoaXMubW9kZWxNYXRyaXgsIHRoaXMuX25vcm1hbE1hdHJpeCk7XG5cdFx0TWF0cml4NC50cmFuc3Bvc2UodGhpcy5fbm9ybWFsTWF0cml4LCB0aGlzLl9ub3JtYWxNYXRyaXgpO1xuXHR9XG5cdHVwZGF0ZU1hdHJpeChtYXRyaXg/OiBNYXRyaXg0KSB7XG5cdFx0dGhpcy5tb2RlbE1hdHJpeC5jb21wb3NlKHRoaXMucG9zaXRpb24sIHRoaXMucXVhdGVybmlvbiwgdGhpcy5zY2FsZSk7XG5cdFx0aWYgKG1hdHJpeCkgTWF0cml4NC5tdWx0aXBseShtYXRyaXgsIHRoaXMubW9kZWxNYXRyaXgsIHRoaXMubW9kZWxNYXRyaXgpO1xuXHRcdHRoaXMudXBkYXRlTm9ybWFsTWF0cml4KCk7XG5cdH1cblx0bG9va0F0KHgsIHksIHopIHtcblx0XHR0aGlzLl90YXJnZXQuc2V0KHgsIHksIHopO1xuXHRcdGlmICh0aGlzLnR5cGUgPT0gUmVuZGVyT2JqZWN0VHlwZS5DYW1lcmEgfHwgdGhpcy50eXBlID09IFJlbmRlck9iamVjdFR5cGUuTGlnaHQpIHtcblx0XHRcdF9tMS5sb29rQXQodGhpcy5wb3NpdGlvbiwgdGhpcy5fdGFyZ2V0LCB0aGlzLnVwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0X20xLmxvb2tBdCh0aGlzLl90YXJnZXQsIHRoaXMucG9zaXRpb24sIHRoaXMudXApO1xuXHRcdH1cblx0XHR0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KF9tMSk7XG5cdH1cblx0cm90YXRlT25BeGlzKGF4aXMsIGFuZ2xlKSB7XG5cdFx0Y29uc3QgcXVhdCA9IFF1YXRlcm5pb24uZnJvbUF4aXNBbmdsZShheGlzLCBhbmdsZSk7XG5cdFx0UXVhdGVybmlvbi5tdWx0aXBseSh0aGlzLnF1YXRlcm5pb24sIHF1YXQsIHRoaXMucXVhdGVybmlvbik7XG5cdH1cblx0cm90YXRlWChhbmdsZSkge1xuXHRcdHJldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhfeEF4aXMsIGFuZ2xlKTtcblx0fVxuXHRyb3RhdGVZKGFuZ2xlKSB7XG5cdFx0cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKF95QXhpcywgYW5nbGUpO1xuXHR9XG5cdHJvdGF0ZVooYW5nbGUpIHtcblx0XHRyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoX3pBeGlzLCBhbmdsZSk7XG5cdH1cbn1cbmNvbnN0IF94QXhpcyA9IG5ldyBWZWN0b3IzKDEsIDAsIDApO1xuY29uc3QgX3lBeGlzID0gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XG5jb25zdCBfekF4aXMgPSBuZXcgVmVjdG9yMygwLCAwLCAxKTtcbmNvbnN0IF9tMSA9IG5ldyBNYXRyaXg0KCk7XG4iLCJpbXBvcnQgUmVuZGVyT2JqZWN0IGZyb20gXCIuLi9jb3JlL1JlbmRlck9iamVjdFwiO1xyXG5pbXBvcnQgeyBMaWdodFR5cGUsIFJlbmRlck9iamVjdFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XHJcbmltcG9ydCB7IEJhc2VTaGFkb3cgfSBmcm9tIFwiLi9zaGFkb3dzL0Jhc2VTaGFkb3dcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBMaWdodCBleHRlbmRzIFJlbmRlck9iamVjdCB7XHJcblx0cHJpdmF0ZSBfY29sb3I6IFZlY3RvcjM7XHJcblx0dHlwZTogUmVuZGVyT2JqZWN0VHlwZTtcclxuXHRwcml2YXRlIF9pbnRlbnNpdHk6IG51bWJlcjtcclxuXHRkaXJ0eTogYm9vbGVhbjtcclxuXHRjb2xvckRpcnR5OiBib29sZWFuO1xyXG5cdHNoYWRvd0RpcnR5OiBib29sZWFuO1xyXG5cdGludGVuc2l0eURpcnR5OiBib29sZWFuO1xyXG5cdHBvc2l0aW9uRGlydHk6IGJvb2xlYW47XHJcblx0cHVibGljIF9zaGFkb3c6IEJhc2VTaGFkb3c7XHJcblx0cHVibGljIHRhcmdldERpcnR5OiBib29sZWFuO1xyXG5cdHB1YmxpYyBsaWdodFR5cGU6IExpZ2h0VHlwZTtcclxuXHJcblx0Y29uc3RydWN0b3IoY29sb3I6IFZlY3RvcjMsIGludGVuc2l0eTogbnVtYmVyKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0dGhpcy50eXBlID0gUmVuZGVyT2JqZWN0VHlwZS5MaWdodDtcclxuXHRcdHRoaXMuX2NvbG9yID0gVmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGNvbG9yLCBpbnRlbnNpdHksIG5ldyBWZWN0b3IzKCkpO1xyXG5cdFx0dGhpcy5faW50ZW5zaXR5ID0gaW50ZW5zaXR5O1xyXG5cdFx0dGhpcy5fcG9zaXRpb24gPSBuZXcgVmVjdG9yMygwLCAxLCAwKTtcclxuXHRcdHRoaXMuX3RhcmdldCA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHR0aGlzLnBvc2l0aW9uRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy50YXJnZXREaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmNvbG9yRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5zaGFkb3dEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmludGVuc2l0eURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX3NoYWRvdyA9IG51bGw7XHJcblx0fVxyXG5cclxuXHRnZXQgcG9zaXRpb24oKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fcG9zaXRpb247XHJcblx0fVxyXG5cclxuXHRzZXQgcG9zaXRpb24odmFsdWUpIHtcclxuXHRcdHRoaXMucG9zaXRpb25EaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9wb3NpdGlvbiA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Z2V0IHRhcmdldCgpIHtcclxuXHRcdHJldHVybiB0aGlzLl90YXJnZXQ7XHJcblx0fVxyXG5cclxuXHRzZXQgdGFyZ2V0KHZhbHVlKSB7XHJcblx0XHR0aGlzLnRhcmdldERpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX3RhcmdldCA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Z2V0IGNvbG9yKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2NvbG9yO1xyXG5cdH1cclxuXHJcblx0c2V0IGNvbG9yKHZhbHVlKSB7XHJcblx0XHR0aGlzLmNvbG9yRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fY29sb3IgPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdHNldCBpbnRlbnNpdHkodmFsdWUpIHtcclxuXHRcdHRoaXMuY29sb3IgPSBWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIodGhpcy5jb2xvciwgdmFsdWUsIG5ldyBWZWN0b3IzKCkpO1xyXG5cdFx0dGhpcy5pbnRlbnNpdHlEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9pbnRlbnNpdHkgPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGdldCBpbnRlbnNpdHkoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5faW50ZW5zaXR5O1xyXG5cdH1cclxuXHJcblx0Z2V0IHNoYWRvdygpIHtcclxuXHRcdHJldHVybiB0aGlzLl9zaGFkb3c7XHJcblx0fVxyXG5cclxuXHRzZXQgc2hhZG93KHZhbHVlKSB7XHJcblx0XHR0aGlzLnNoYWRvd0RpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX3NoYWRvdyA9IHZhbHVlO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IEdNYXRoIGZyb20gXCIuL01hdGhcIjtcclxuLy8gI3JnYmFcclxuY29uc3QgcmdiYU1hdGNoZXIgPSAvXiMoWzAtOWEtZl0pKFswLTlhLWZdKShbMC05YS1mXSkoWzAtOWEtZl0pPyQvaTtcclxuLy8gI3JyZ2diYmFhXHJcbmNvbnN0IHJyZ2diYmFhTWF0Y2hlciA9IC9eIyhbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSk/JC9pO1xyXG4vLyByZ2IoKSwgcmdiYSgpLCBvciByZ2IlKClcclxuY29uc3QgcmdiUGFyZW50aGVzZXNNYXRjaGVyID0gL15yZ2JhP1xcKFxccyooWzAtOS5dKyU/KVxccyosXFxzKihbMC05Ll0rJT8pXFxzKixcXHMqKFswLTkuXSslPykoPzpcXHMqLFxccyooWzAtOS5dKykpP1xccypcXCkkL2k7XHJcbi8vIGhzbCgpIG9yIGhzbGEoKVxyXG5jb25zdCBoc2xQYXJlbnRoZXNlc01hdGNoZXIgPSAvXmhzbGE/XFwoXFxzKihbMC05Ll0rKVxccyosXFxzKihbMC05Ll0rJSlcXHMqLFxccyooWzAtOS5dKyUpKD86XFxzKixcXHMqKFswLTkuXSspKT9cXHMqXFwpJC9pO1xyXG5mdW5jdGlvbiBodWUycmdiKG0xLCBtMiwgaCkge1xyXG5cdGlmIChoIDwgMCkge1xyXG5cdFx0aCArPSAxO1xyXG5cdH1cclxuXHRpZiAoaCA+IDEpIHtcclxuXHRcdGggLT0gMTtcclxuXHR9XHJcblx0aWYgKGggKiA2IDwgMSkge1xyXG5cdFx0cmV0dXJuIG0xICsgKG0yIC0gbTEpICogNiAqIGg7XHJcblx0fVxyXG5cdGlmIChoICogMiA8IDEpIHtcclxuXHRcdHJldHVybiBtMjtcclxuXHR9XHJcblx0aWYgKGggKiAzIDwgMikge1xyXG5cdFx0cmV0dXJuIG0xICsgKG0yIC0gbTEpICogKDIgLyAzIC0gaCkgKiA2O1xyXG5cdH1cclxuXHRyZXR1cm4gbTE7XHJcbn1cclxuXHJcbmNsYXNzIENvbG9yIHtcclxuXHRncmVlbjogbnVtYmVyO1xyXG5cdHJlZDogbnVtYmVyO1xyXG5cdGJsdWU6IG51bWJlcjtcclxuXHRjb25zdHJ1Y3RvcihyZWQgPSAxLjAsIGdyZWVuID0gMS4wLCBibHVlID0gMS4wKSB7XHJcblx0XHQvKipcclxuXHRcdCAqIFRoZSByZWQgY29tcG9uZW50LlxyXG5cdFx0ICogQHR5cGUge051bWJlcn1cclxuXHRcdCAqIEBkZWZhdWx0IDEuMFxyXG5cdFx0ICovXHJcblx0XHR0aGlzLnJlZCA9IHJlZDtcclxuXHRcdC8qKlxyXG5cdFx0ICogVGhlIGdyZWVuIGNvbXBvbmVudC5cclxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XHJcblx0XHQgKiBAZGVmYXVsdCAxLjBcclxuXHRcdCAqL1xyXG5cdFx0dGhpcy5ncmVlbiA9IGdyZWVuO1xyXG5cdFx0LyoqXHJcblx0XHQgKiBUaGUgYmx1ZSBjb21wb25lbnQuXHJcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxyXG5cdFx0ICogQGRlZmF1bHQgMS4wXHJcblx0XHQgKi9cclxuXHRcdHRoaXMuYmx1ZSA9IGJsdWU7XHJcblx0fVxyXG5cdHNldCh2YWx1ZTogc3RyaW5nKTogQ29sb3Ige1xyXG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xyXG5cdFx0XHRDb2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodmFsdWUsIHRoaXMpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdHRvQXJyYXkoKTogbnVtYmVyW10ge1xyXG5cdFx0cmV0dXJuIFt0aGlzLnJlZCwgdGhpcy5ncmVlbiwgdGhpcy5ibHVlXTtcclxuXHR9XHJcblxyXG5cdGNsb25lKHJlc3VsdDogQ29sb3IpOiBDb2xvciB7XHJcblx0XHRyZXR1cm4gQ29sb3IuY2xvbmUodGhpcywgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdGVxdWFscyhvdGhlcjogQ29sb3IpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBDb2xvci5lcXVhbHModGhpcywgb3RoZXIpO1xyXG5cdH1cclxuXHJcblx0dG9Dc3NIZXhTdHJpbmcoKTogc3RyaW5nIHtcclxuXHRcdGxldCByID0gQ29sb3IuZmxvYXRUb0J5dGUodGhpcy5yZWQpLnRvU3RyaW5nKDE2KTtcclxuXHRcdGlmIChyLmxlbmd0aCA8IDIpIHtcclxuXHRcdFx0ciA9IGAwJHtyfWA7XHJcblx0XHR9XHJcblx0XHRsZXQgZyA9IENvbG9yLmZsb2F0VG9CeXRlKHRoaXMuZ3JlZW4pLnRvU3RyaW5nKDE2KTtcclxuXHRcdGlmIChnLmxlbmd0aCA8IDIpIHtcclxuXHRcdFx0ZyA9IGAwJHtnfWA7XHJcblx0XHR9XHJcblx0XHRsZXQgYiA9IENvbG9yLmZsb2F0VG9CeXRlKHRoaXMuYmx1ZSkudG9TdHJpbmcoMTYpO1xyXG5cdFx0aWYgKGIubGVuZ3RoIDwgMikge1xyXG5cdFx0XHRiID0gYDAke2J9YDtcclxuXHRcdH1cclxuXHRcdHJldHVybiBgIyR7cn0ke2d9JHtifWA7XHJcblx0fVxyXG5cclxuXHR0b0J5dGVzKHJlc3VsdDogbnVtYmVyW10pOiBudW1iZXJbXSB7XHJcblx0XHRjb25zdCByZWQgPSBDb2xvci5mbG9hdFRvQnl0ZSh0aGlzLnJlZCk7XHJcblx0XHRjb25zdCBncmVlbiA9IENvbG9yLmZsb2F0VG9CeXRlKHRoaXMuZ3JlZW4pO1xyXG5cdFx0Y29uc3QgYmx1ZSA9IENvbG9yLmZsb2F0VG9CeXRlKHRoaXMuYmx1ZSk7XHJcblxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIFtyZWQsIGdyZWVuLCBibHVlXTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IHJlZDtcclxuXHRcdHJlc3VsdFsxXSA9IGdyZWVuO1xyXG5cdFx0cmVzdWx0WzJdID0gYmx1ZTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbUJ5dGVzKHJlZDogbnVtYmVyLCBncmVlbjogbnVtYmVyLCBibHVlOiBudW1iZXIsIHJlc3VsdDogQ29sb3IpOiBDb2xvciB7XHJcblx0XHRyZWQgPSBDb2xvci5ieXRlVG9GbG9hdChkZWZhdWx0VmFsdWUocmVkLCAyNTUuMCkpO1xyXG5cdFx0Z3JlZW4gPSBDb2xvci5ieXRlVG9GbG9hdChkZWZhdWx0VmFsdWUoZ3JlZW4sIDI1NS4wKSk7XHJcblx0XHRibHVlID0gQ29sb3IuYnl0ZVRvRmxvYXQoZGVmYXVsdFZhbHVlKGJsdWUsIDI1NS4wKSk7XHJcblxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBDb2xvcihyZWQsIGdyZWVuLCBibHVlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQucmVkID0gcmVkO1xyXG5cdFx0cmVzdWx0LmdyZWVuID0gZ3JlZW47XHJcblx0XHRyZXN1bHQuYmx1ZSA9IGJsdWU7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Ic2woaHVlOiBudW1iZXIsIHNhdHVyYXRpb246IG51bWJlciwgbGlnaHRuZXNzOiBudW1iZXIsIHJlc3VsdDogQ29sb3IpOiBDb2xvciB7XHJcblx0XHRodWUgPSBkZWZhdWx0VmFsdWUoaHVlLCAwLjApICUgMS4wO1xyXG5cdFx0c2F0dXJhdGlvbiA9IGRlZmF1bHRWYWx1ZShzYXR1cmF0aW9uLCAwLjApO1xyXG5cdFx0bGlnaHRuZXNzID0gZGVmYXVsdFZhbHVlKGxpZ2h0bmVzcywgMC4wKTtcclxuXHRcdGxldCByZWQgPSBsaWdodG5lc3M7XHJcblx0XHRsZXQgZ3JlZW4gPSBsaWdodG5lc3M7XHJcblx0XHRsZXQgYmx1ZSA9IGxpZ2h0bmVzcztcclxuXHJcblx0XHRpZiAoc2F0dXJhdGlvbiAhPT0gMCkge1xyXG5cdFx0XHRsZXQgbTI7XHJcblx0XHRcdGlmIChsaWdodG5lc3MgPCAwLjUpIHtcclxuXHRcdFx0XHRtMiA9IGxpZ2h0bmVzcyAqICgxICsgc2F0dXJhdGlvbik7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0bTIgPSBsaWdodG5lc3MgKyBzYXR1cmF0aW9uIC0gbGlnaHRuZXNzICogc2F0dXJhdGlvbjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgbTEgPSAyLjAgKiBsaWdodG5lc3MgLSBtMjtcclxuXHRcdFx0cmVkID0gaHVlMnJnYihtMSwgbTIsIGh1ZSArIDEgLyAzKTtcclxuXHRcdFx0Z3JlZW4gPSBodWUycmdiKG0xLCBtMiwgaHVlKTtcclxuXHRcdFx0Ymx1ZSA9IGh1ZTJyZ2IobTEsIG0yLCBodWUgLSAxIC8gMyk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBDb2xvcihyZWQsIGdyZWVuLCBibHVlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQucmVkID0gcmVkO1xyXG5cdFx0cmVzdWx0LmdyZWVuID0gZ3JlZW47XHJcblx0XHRyZXN1bHQuYmx1ZSA9IGJsdWU7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ3JlYXRlcyBhIHJhbmRvbSBjb2xvciB1c2luZyB0aGUgcHJvdmlkZWQgb3B0aW9ucy4gRm9yIHJlcHJvZHVjaWJsZSByYW5kb20gY29sb3JzLCB5b3Ugc2hvdWxkXHJcblx0ICogY2FsbCB7QGxpbmsgR01hdGgjc2V0UmFuZG9tTnVtYmVyU2VlZH0gb25jZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHlvdXIgYXBwbGljYXRpb24uXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMucmVkXSBJZiBzcGVjaWZpZWQsIHRoZSByZWQgY29tcG9uZW50IHRvIHVzZSBpbnN0ZWFkIG9mIGEgcmFuZG9taXplZCB2YWx1ZS5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMubWluaW11bVJlZD0wLjBdIFRoZSBtYXhpbXVtIHJlZCB2YWx1ZSB0byBnZW5lcmF0ZSBpZiBub25lIHdhcyBzcGVjaWZpZWQuXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLm1heGltdW1SZWQ9MS4wXSBUaGUgbWluaW11bSByZWQgdmFsdWUgdG8gZ2VuZXJhdGUgaWYgbm9uZSB3YXMgc3BlY2lmaWVkLlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5ncmVlbl0gSWYgc3BlY2lmaWVkLCB0aGUgZ3JlZW4gY29tcG9uZW50IHRvIHVzZSBpbnN0ZWFkIG9mIGEgcmFuZG9taXplZCB2YWx1ZS5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMubWluaW11bUdyZWVuPTAuMF0gVGhlIG1heGltdW0gZ3JlZW4gdmFsdWUgdG8gZ2VuZXJhdGUgaWYgbm9uZSB3YXMgc3BlY2lmaWVkLlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5tYXhpbXVtR3JlZW49MS4wXSBUaGUgbWluaW11bSBncmVlbiB2YWx1ZSB0byBnZW5lcmF0ZSBpZiBub25lIHdhcyBzcGVjaWZpZWQuXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmJsdWVdIElmIHNwZWNpZmllZCwgdGhlIGJsdWUgY29tcG9uZW50IHRvIHVzZSBpbnN0ZWFkIG9mIGEgcmFuZG9taXplZCB2YWx1ZS5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMubWluaW11bUJsdWU9MC4wXSBUaGUgbWF4aW11bSBibHVlIHZhbHVlIHRvIGdlbmVyYXRlIGlmIG5vbmUgd2FzIHNwZWNpZmllZC5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMubWF4aW11bUJsdWU9MS4wXSBUaGUgbWluaW11bSBibHVlIHZhbHVlIHRvIGdlbmVyYXRlIGlmIG5vbmUgd2FzIHNwZWNpZmllZC5cclxuXHQgKiBAcGFyYW0ge0NvbG9yfSBbcmVzdWx0XSBUaGUgb2JqZWN0IHRvIHN0b3JlIHRoZSByZXN1bHQgaW4sIGlmIHVuZGVmaW5lZCBhIG5ldyBpbnN0YW5jZSB3aWxsIGJlIGNyZWF0ZWQuXHJcblx0ICogQHJldHVybnMge0NvbG9yfSBUaGUgbW9kaWZpZWQgcmVzdWx0IHBhcmFtZXRlciBvciBhIG5ldyBpbnN0YW5jZSBpZiByZXN1bHQgd2FzIHVuZGVmaW5lZC5cclxuXHQgKlxyXG5cdCAqIEBleGFtcGxlXHJcblx0ICogLy9DcmVhdGUgYSBjb21wbGV0ZWx5IHJhbmRvbSBjb2xvclxyXG5cdCAqIGNvbnN0IGNvbG9yID0gQ29sb3IuZnJvbVJhbmRvbSgpO1xyXG5cdCAqXHJcblx0ICogLy9DcmVhdGUgYSByYW5kb20gc2hhZGUgb2YgeWVsbG93LlxyXG5cdCAqIGNvbnN0IGNvbG9yMSA9IENvbG9yLmZyb21SYW5kb20oe1xyXG5cdCAqICAgICByZWQgOiAxLjAsXHJcblx0ICogICAgIGdyZWVuIDogMS4wLFxyXG5cdCAqIH0pO1xyXG5cdCAqXHJcblx0ICogLy9DcmVhdGUgYSByYW5kb20gYnJpZ2h0IGNvbG9yLlxyXG5cdCAqIGNvbnN0IGNvbG9yMiA9IENvbG9yLmZyb21SYW5kb20oe1xyXG5cdCAqICAgICBtaW5pbXVtUmVkIDogMC43NSxcclxuXHQgKiAgICAgbWluaW11bUdyZWVuIDogMC43NSxcclxuXHQgKiAgICAgbWluaW11bUJsdWUgOiAwLjc1LFxyXG5cdCAqIH0pO1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBmcm9tUmFuZG9tKG9wdGlvbnMsIHJlc3VsdDogQ29sb3IpOiBDb2xvciB7XHJcblx0XHRvcHRpb25zID0gZGVmYXVsdFZhbHVlKG9wdGlvbnMsIGRlZmF1bHRWYWx1ZS5FTVBUWV9PQkpFQ1QpO1xyXG5cclxuXHRcdGxldCByZWQgPSBvcHRpb25zLnJlZDtcclxuXHRcdGlmICghZGVmaW5lZChyZWQpKSB7XHJcblx0XHRcdGNvbnN0IG1pbmltdW1SZWQgPSBkZWZhdWx0VmFsdWUob3B0aW9ucy5taW5pbXVtUmVkLCAwKTtcclxuXHRcdFx0Y29uc3QgbWF4aW11bVJlZCA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLm1heGltdW1SZWQsIDEuMCk7XHJcblxyXG5cdFx0XHRyZWQgPSBtaW5pbXVtUmVkICsgR01hdGgubmV4dFJhbmRvbU51bWJlcigpICogKG1heGltdW1SZWQgLSBtaW5pbXVtUmVkKTtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZ3JlZW4gPSBvcHRpb25zLmdyZWVuO1xyXG5cdFx0aWYgKCFkZWZpbmVkKGdyZWVuKSkge1xyXG5cdFx0XHRjb25zdCBtaW5pbXVtR3JlZW4gPSBkZWZhdWx0VmFsdWUob3B0aW9ucy5taW5pbXVtR3JlZW4sIDApO1xyXG5cdFx0XHRjb25zdCBtYXhpbXVtR3JlZW4gPSBkZWZhdWx0VmFsdWUob3B0aW9ucy5tYXhpbXVtR3JlZW4sIDEuMCk7XHJcblxyXG5cdFx0XHRncmVlbiA9IG1pbmltdW1HcmVlbiArIEdNYXRoLm5leHRSYW5kb21OdW1iZXIoKSAqIChtYXhpbXVtR3JlZW4gLSBtaW5pbXVtR3JlZW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBibHVlID0gb3B0aW9ucy5ibHVlO1xyXG5cdFx0aWYgKCFkZWZpbmVkKGJsdWUpKSB7XHJcblx0XHRcdGNvbnN0IG1pbmltdW1CbHVlID0gZGVmYXVsdFZhbHVlKG9wdGlvbnMubWluaW11bUJsdWUsIDApO1xyXG5cdFx0XHRjb25zdCBtYXhpbXVtQmx1ZSA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLm1heGltdW1CbHVlLCAxLjApO1xyXG5cclxuXHRcdFx0Ymx1ZSA9IG1pbmltdW1CbHVlICsgR01hdGgubmV4dFJhbmRvbU51bWJlcigpICogKG1heGltdW1CbHVlIC0gbWluaW11bUJsdWUpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBDb2xvcihyZWQsIGdyZWVuLCBibHVlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQucmVkID0gcmVkO1xyXG5cdFx0cmVzdWx0LmdyZWVuID0gZ3JlZW47XHJcblx0XHRyZXN1bHQuYmx1ZSA9IGJsdWU7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Dc3NDb2xvclN0cmluZyhjb2xvcjogc3RyaW5nLCByZXN1bHQ6IENvbG9yID0gbmV3IENvbG9yKCkpOiBDb2xvciB7XHJcblx0XHQvLyBSZW1vdmUgYWxsIHdoaXRlc3BhY2VzIGZyb20gdGhlIGNvbG9yIHN0cmluZ1xyXG5cdFx0Y29sb3IgPSBjb2xvci5yZXBsYWNlKC9cXHMvZywgXCJcIik7XHJcblxyXG5cdFx0Y29uc3QgbmFtZWRDb2xvciA9IENvbG9yW2NvbG9yLnRvVXBwZXJDYXNlKCldO1xyXG5cdFx0aWYgKGRlZmluZWQobmFtZWRDb2xvcikpIHtcclxuXHRcdFx0Q29sb3IuY2xvbmUobmFtZWRDb2xvciwgcmVzdWx0KTtcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgbWF0Y2hlcyA9IHJnYmFNYXRjaGVyLmV4ZWMoY29sb3IpO1xyXG5cdFx0aWYgKG1hdGNoZXMgIT09IG51bGwpIHtcclxuXHRcdFx0cmVzdWx0LnJlZCA9IHBhcnNlSW50KG1hdGNoZXNbMV0sIDE2KSAvIDE1O1xyXG5cdFx0XHRyZXN1bHQuZ3JlZW4gPSBwYXJzZUludChtYXRjaGVzWzJdLCAxNikgLyAxNS4wO1xyXG5cdFx0XHRyZXN1bHQuYmx1ZSA9IHBhcnNlSW50KG1hdGNoZXNbM10sIDE2KSAvIDE1LjA7XHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0bWF0Y2hlcyA9IHJyZ2diYmFhTWF0Y2hlci5leGVjKGNvbG9yKTtcclxuXHRcdGlmIChtYXRjaGVzICE9PSBudWxsKSB7XHJcblx0XHRcdHJlc3VsdC5yZWQgPSBwYXJzZUludChtYXRjaGVzWzFdLCAxNikgLyAyNTUuMDtcclxuXHRcdFx0cmVzdWx0LmdyZWVuID0gcGFyc2VJbnQobWF0Y2hlc1syXSwgMTYpIC8gMjU1LjA7XHJcblx0XHRcdHJlc3VsdC5ibHVlID0gcGFyc2VJbnQobWF0Y2hlc1szXSwgMTYpIC8gMjU1LjA7XHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0bWF0Y2hlcyA9IHJnYlBhcmVudGhlc2VzTWF0Y2hlci5leGVjKGNvbG9yKTtcclxuXHRcdGlmIChtYXRjaGVzICE9PSBudWxsKSB7XHJcblx0XHRcdHJlc3VsdC5yZWQgPSBwYXJzZUZsb2F0KG1hdGNoZXNbMV0pIC8gKFwiJVwiID09PSBtYXRjaGVzWzFdLnN1YnN0cigtMSkgPyAxMDAuMCA6IDI1NS4wKTtcclxuXHRcdFx0cmVzdWx0LmdyZWVuID0gcGFyc2VGbG9hdChtYXRjaGVzWzJdKSAvIChcIiVcIiA9PT0gbWF0Y2hlc1syXS5zdWJzdHIoLTEpID8gMTAwLjAgOiAyNTUuMCk7XHJcblx0XHRcdHJlc3VsdC5ibHVlID0gcGFyc2VGbG9hdChtYXRjaGVzWzNdKSAvIChcIiVcIiA9PT0gbWF0Y2hlc1szXS5zdWJzdHIoLTEpID8gMTAwLjAgOiAyNTUuMCk7XHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0bWF0Y2hlcyA9IGhzbFBhcmVudGhlc2VzTWF0Y2hlci5leGVjKGNvbG9yKTtcclxuXHRcdGlmIChtYXRjaGVzICE9PSBudWxsKSB7XHJcblx0XHRcdHJldHVybiBDb2xvci5mcm9tSHNsKFxyXG5cdFx0XHRcdHBhcnNlRmxvYXQobWF0Y2hlc1sxXSkgLyAzNjAuMCxcclxuXHRcdFx0XHRwYXJzZUZsb2F0KG1hdGNoZXNbMl0pIC8gMTAwLjAsXHJcblx0XHRcdFx0cGFyc2VGbG9hdChtYXRjaGVzWzNdKSAvIDEwMC4wLFxyXG5cdFx0XHRcdHJlc3VsdFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdCA9IHVuZGVmaW5lZDtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYnl0ZVRvRmxvYXQodmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdmFsdWUgLyAyNTUuMDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmbG9hdFRvQnl0ZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB2YWx1ZSA9PT0gMS4wID8gMjU1LjAgOiAodmFsdWUgKiAyNTYuMCkgfCAwO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNsb25lKGNvbG9yOiBDb2xvciwgcmVzdWx0OiBDb2xvcik6IENvbG9yIHtcclxuXHRcdGlmICghZGVmaW5lZChjb2xvcikpIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgQ29sb3IoY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSk7XHJcblx0XHR9XHJcblx0XHRyZXN1bHQucmVkID0gY29sb3IucmVkO1xyXG5cdFx0cmVzdWx0LmdyZWVuID0gY29sb3IuZ3JlZW47XHJcblx0XHRyZXN1bHQuYmx1ZSA9IGNvbG9yLmJsdWU7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBDb2xvciwgcmlnaHQ6IENvbG9yKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRsZWZ0ID09PSByaWdodCB8fCAvL1xyXG5cdFx0XHQoZGVmaW5lZChsZWZ0KSAmJiAvL1xyXG5cdFx0XHRcdGRlZmluZWQocmlnaHQpICYmIC8vXHJcblx0XHRcdFx0bGVmdC5yZWQgPT09IHJpZ2h0LnJlZCAmJiAvL1xyXG5cdFx0XHRcdGxlZnQuZ3JlZW4gPT09IHJpZ2h0LmdyZWVuICYmIC8vXHJcblx0XHRcdFx0bGVmdC5ibHVlID09PSByaWdodC5ibHVlKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0c3RhdGljIGVxdWFsc0FycmF5KGNvbG9yOiBDb2xvciwgYXJyYXk6IG51bWJlcltdLCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIGNvbG9yLnJlZCA9PT0gYXJyYXlbb2Zmc2V0XSAmJiBjb2xvci5ncmVlbiA9PT0gYXJyYXlbb2Zmc2V0ICsgMV0gJiYgY29sb3IuYmx1ZSA9PT0gYXJyYXlbb2Zmc2V0ICsgMl07XHJcblx0fVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IENvbG9yO1xyXG4iLCJpbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4vVmVjdG9yMlwiO1xyXG5cclxuLyoqXHJcbiAqIEEgMngyIG1hdHJpeCwgaW5kZXhhYmxlIGFzIGEgY29sdW1uLW1ham9yIG9yZGVyIGFycmF5LlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjBSb3cwPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMCwgcm93IDAuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMVJvdzA9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAxLCByb3cgMC5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93MT0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAxLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3cxPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDEuXHJcbiAqL1xyXG5jbGFzcyBNYXRyaXgyIHtcclxuXHRjb25zdHJ1Y3Rvcihjb2x1bW4wUm93MCA9IDAsIGNvbHVtbjFSb3cwID0gMCwgY29sdW1uMFJvdzEgPSAwLCBjb2x1bW4xUm93MSA9IDApIHtcclxuXHRcdHRoaXNbMF0gPSBjb2x1bW4wUm93MDtcclxuXHRcdHRoaXNbMV0gPSBjb2x1bW4wUm93MTtcclxuXHRcdHRoaXNbMl0gPSBjb2x1bW4xUm93MDtcclxuXHRcdHRoaXNbM10gPSBjb2x1bW4xUm93MTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjbG9uZShtYXRyaXg6IE1hdHJpeDIgfCBudW1iZXJbXSwgcmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRpZiAoIWRlZmluZWQobWF0cml4KSkge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBNYXRyaXgyKG1hdHJpeFswXSwgbWF0cml4WzJdLCBtYXRyaXhbMV0sIG1hdHJpeFszXSk7XHJcblx0XHR9XHJcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF07XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV07XHJcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl07XHJcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Db2x1bW5NYWpvckFycmF5KHZhbHVlczogbnVtYmVyW10sIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0cmV0dXJuIE1hdHJpeDIuY2xvbmUodmFsdWVzLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Sb3dNYWpvckFycmF5KHZhbHVlczogbnVtYmVyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgTWF0cml4Mih2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCB2YWx1ZXNbM10pO1xyXG5cdFx0fVxyXG5cdFx0cmVzdWx0WzBdID0gdmFsdWVzWzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gdmFsdWVzWzJdO1xyXG5cdFx0cmVzdWx0WzJdID0gdmFsdWVzWzFdO1xyXG5cdFx0cmVzdWx0WzNdID0gdmFsdWVzWzNdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tU2NhbGUoc2NhbGU6IFZlY3RvcjIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBNYXRyaXgyKHNjYWxlLngsIDAuMCwgMC4wLCBzY2FsZS55KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHRbMF0gPSBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzFdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzJdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzNdID0gc2NhbGUueTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVJvdGF0aW9uKGFuZ2xlOiBudW1iZXIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0Y29uc3QgY29zQW5nbGUgPSBNYXRoLmNvcyhhbmdsZSk7XHJcblx0XHRjb25zdCBzaW5BbmdsZSA9IE1hdGguc2luKGFuZ2xlKTtcclxuXHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDIoY29zQW5nbGUsIC1zaW5BbmdsZSwgc2luQW5nbGUsIGNvc0FuZ2xlKTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IGNvc0FuZ2xlO1xyXG5cdFx0cmVzdWx0WzFdID0gc2luQW5nbGU7XHJcblx0XHRyZXN1bHRbMl0gPSAtc2luQW5nbGU7XHJcblx0XHRyZXN1bHRbM10gPSBjb3NBbmdsZTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cdHRvQXJyYXkoKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcclxuXHRcdE1hdHJpeDIudG9BcnJheSh0aGlzLCByZXN1bHQpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyB0b0FycmF5KG1hdHJpeDogTWF0cml4MiwgcmVzdWx0OiBudW1iZXJbXSk6IG51bWJlcltdIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBbbWF0cml4WzBdLCBtYXRyaXhbMV0sIG1hdHJpeFsyXSwgbWF0cml4WzNdXTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXTtcclxuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXTtcclxuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0RWxlbWVudEluZGV4KGNvbHVtbjogbnVtYmVyLCByb3c6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gY29sdW1uICogMiArIHJvdztcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRDb2x1bW4obWF0cml4OiBNYXRyaXgyLCBpbmRleDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCAqIDI7XHJcblx0XHRjb25zdCB4ID0gbWF0cml4W3N0YXJ0SW5kZXhdO1xyXG5cdFx0Y29uc3QgeSA9IG1hdHJpeFtzdGFydEluZGV4ICsgMV07XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzZXRDb2x1bW4obWF0cml4OiBNYXRyaXgyLCBpbmRleDogbnVtYmVyLCBjYXJ0ZXNpYW46IFZlY3RvcjIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0cmVzdWx0ID0gTWF0cml4Mi5jbG9uZShtYXRyaXgsIHJlc3VsdCk7XHJcblx0XHRjb25zdCBzdGFydEluZGV4ID0gaW5kZXggKiAyO1xyXG5cdFx0cmVzdWx0W3N0YXJ0SW5kZXhdID0gY2FydGVzaWFuLng7XHJcblx0XHRyZXN1bHRbc3RhcnRJbmRleCArIDFdID0gY2FydGVzaWFuLnk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldFJvdyhtYXRyaXg6IE1hdHJpeDIsIGluZGV4OiBudW1iZXIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0Y29uc3QgeCA9IG1hdHJpeFtpbmRleF07XHJcblx0XHRjb25zdCB5ID0gbWF0cml4W2luZGV4ICsgMl07XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzZXRSb3cobWF0cml4OiBNYXRyaXgyLCBpbmRleDogbnVtYmVyLCBjYXJ0ZXNpYW46IFZlY3RvcjIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0cmVzdWx0ID0gTWF0cml4Mi5jbG9uZShtYXRyaXgsIHJlc3VsdCk7XHJcblx0XHRyZXN1bHRbaW5kZXhdID0gY2FydGVzaWFuLng7XHJcblx0XHRyZXN1bHRbaW5kZXggKyAyXSA9IGNhcnRlc2lhbi55O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzZXRTY2FsZShtYXRyaXg6IE1hdHJpeDIsIHNjYWxlOiBWZWN0b3IyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nU2NhbGUgPSBNYXRyaXgyLmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoMSk7XHJcblx0XHRjb25zdCBzY2FsZVJhdGlvWCA9IHNjYWxlLnggLyBleGlzdGluZ1NjYWxlLng7XHJcblx0XHRjb25zdCBzY2FsZVJhdGlvWSA9IHNjYWxlLnkgLyBleGlzdGluZ1NjYWxlLnk7XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdICogc2NhbGVSYXRpb1g7XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsZVJhdGlvWDtcclxuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXSAqIHNjYWxlUmF0aW9ZO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdICogc2NhbGVSYXRpb1k7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRTY2FsZShtYXRyaXg6IE1hdHJpeDIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0cmVzdWx0LnggPSBWZWN0b3IyLm1hZ25pdHVkZShWZWN0b3IyLmZyb21FbGVtZW50cyhtYXRyaXhbMF0sIG1hdHJpeFsxXSwgc2NyYXRjaENvbHVtbikpO1xyXG5cdFx0cmVzdWx0LnkgPSBWZWN0b3IyLm1hZ25pdHVkZShWZWN0b3IyLmZyb21FbGVtZW50cyhtYXRyaXhbMl0sIG1hdHJpeFszXSwgc2NyYXRjaENvbHVtbikpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRNYXhpbXVtU2NhbGUobWF0cml4OiBNYXRyaXgyKTogbnVtYmVyIHtcclxuXHRcdE1hdHJpeDIuZ2V0U2NhbGUobWF0cml4LCBzY2FsZVNjcmF0Y2gzKTtcclxuXHRcdHJldHVybiBWZWN0b3IyLm1heGltdW1Db21wb25lbnQoc2NhbGVTY3JhdGNoMyk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc2V0Um90YXRpb24obWF0cml4OiBNYXRyaXgyLCByb3RhdGlvbjogTWF0cml4MiwgcmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRjb25zdCBzY2FsZSA9IE1hdHJpeDIuZ2V0U2NhbGUobWF0cml4LCBzY2FsZVNjcmF0Y2g0KTtcclxuXHJcblx0XHRyZXN1bHRbMF0gPSByb3RhdGlvblswXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMV0gPSByb3RhdGlvblsxXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMl0gPSByb3RhdGlvblsyXSAqIHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbM10gPSByb3RhdGlvblszXSAqIHNjYWxlLnk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRSb3RhdGlvbihtYXRyaXg6IE1hdHJpeDIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0Y29uc3Qgc2NhbGUgPSBNYXRyaXgyLmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoNSk7XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdIC8gc2NhbGUueDtcclxuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXSAvIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl0gLyBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdIC8gc2NhbGUueTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5KGxlZnQ6IE1hdHJpeDIsIHJpZ2h0OiBNYXRyaXgyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdGNvbnN0IGNvbHVtbjBSb3cwID0gbGVmdFswXSAqIHJpZ2h0WzBdICsgbGVmdFsyXSAqIHJpZ2h0WzFdO1xyXG5cdFx0Y29uc3QgY29sdW1uMVJvdzAgPSBsZWZ0WzBdICogcmlnaHRbMl0gKyBsZWZ0WzJdICogcmlnaHRbM107XHJcblx0XHRjb25zdCBjb2x1bW4wUm93MSA9IGxlZnRbMV0gKiByaWdodFswXSArIGxlZnRbM10gKiByaWdodFsxXTtcclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cxID0gbGVmdFsxXSAqIHJpZ2h0WzJdICsgbGVmdFszXSAqIHJpZ2h0WzNdO1xyXG5cclxuXHRcdHJlc3VsdFswXSA9IGNvbHVtbjBSb3cwO1xyXG5cdFx0cmVzdWx0WzFdID0gY29sdW1uMFJvdzE7XHJcblx0XHRyZXN1bHRbMl0gPSBjb2x1bW4xUm93MDtcclxuXHRcdHJlc3VsdFszXSA9IGNvbHVtbjFSb3cxO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhZGQobGVmdDogTWF0cml4MiwgcmlnaHQ6IE1hdHJpeDIsIHJlc3VsdDogTWF0cml4Mikge1xyXG5cdFx0cmVzdWx0WzBdID0gbGVmdFswXSArIHJpZ2h0WzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gbGVmdFsxXSArIHJpZ2h0WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gbGVmdFsyXSArIHJpZ2h0WzJdO1xyXG5cdFx0cmVzdWx0WzNdID0gbGVmdFszXSArIHJpZ2h0WzNdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzdWJ0cmFjdChsZWZ0OiBNYXRyaXgyLCByaWdodDogTWF0cml4MiwgcmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRyZXN1bHRbMF0gPSBsZWZ0WzBdIC0gcmlnaHRbMF07XHJcblx0XHRyZXN1bHRbMV0gPSBsZWZ0WzFdIC0gcmlnaHRbMV07XHJcblx0XHRyZXN1bHRbMl0gPSBsZWZ0WzJdIC0gcmlnaHRbMl07XHJcblx0XHRyZXN1bHRbM10gPSBsZWZ0WzNdIC0gcmlnaHRbM107XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlWZWN0b3IobWF0cml4OiBNYXRyaXgyLCBjYXJ0ZXNpYW46IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0Y29uc3QgeCA9IG1hdHJpeFswXSAqIGNhcnRlc2lhbi54ICsgbWF0cml4WzJdICogY2FydGVzaWFuLnk7XHJcblx0XHRjb25zdCB5ID0gbWF0cml4WzFdICogY2FydGVzaWFuLnggKyBtYXRyaXhbM10gKiBjYXJ0ZXNpYW4ueTtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlTY2FsYXIobWF0cml4OiBNYXRyaXgyLCBzY2FsYXI6IG51bWJlciwgcmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF0gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl0gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM10gKiBzY2FsYXI7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlTY2FsZShtYXRyaXg6IE1hdHJpeDIsIHNjYWxlOiBWZWN0b3IyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdICogc2NhbGUueTtcclxuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXSAqIHNjYWxlLnk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBuZWdhdGUobWF0cml4OiBNYXRyaXgyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdHJlc3VsdFswXSA9IC1tYXRyaXhbMF07XHJcblx0XHRyZXN1bHRbMV0gPSAtbWF0cml4WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gLW1hdHJpeFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IC1tYXRyaXhbM107XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHRyYW5zcG9zZShtYXRyaXg6IE1hdHJpeDIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0Y29uc3QgY29sdW1uMFJvdzAgPSBtYXRyaXhbMF07XHJcblx0XHRjb25zdCBjb2x1bW4wUm93MSA9IG1hdHJpeFsyXTtcclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cwID0gbWF0cml4WzFdO1xyXG5cdFx0Y29uc3QgY29sdW1uMVJvdzEgPSBtYXRyaXhbM107XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gY29sdW1uMFJvdzA7XHJcblx0XHRyZXN1bHRbMV0gPSBjb2x1bW4wUm93MTtcclxuXHRcdHJlc3VsdFsyXSA9IGNvbHVtbjFSb3cwO1xyXG5cdFx0cmVzdWx0WzNdID0gY29sdW1uMVJvdzE7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFicyhtYXRyaXg6IE1hdHJpeDIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0cmVzdWx0WzBdID0gTWF0aC5hYnMobWF0cml4WzBdKTtcclxuXHRcdHJlc3VsdFsxXSA9IE1hdGguYWJzKG1hdHJpeFsxXSk7XHJcblx0XHRyZXN1bHRbMl0gPSBNYXRoLmFicyhtYXRyaXhbMl0pO1xyXG5cdFx0cmVzdWx0WzNdID0gTWF0aC5hYnMobWF0cml4WzNdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBNYXRyaXgyLCByaWdodDogTWF0cml4Mik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdGxlZnRbMF0gPT09IHJpZ2h0WzBdICYmXHJcblx0XHRcdFx0bGVmdFsxXSA9PT0gcmlnaHRbMV0gJiZcclxuXHRcdFx0XHRsZWZ0WzJdID09PSByaWdodFsyXSAmJlxyXG5cdFx0XHRcdGxlZnRbM10gPT09IHJpZ2h0WzNdKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0c3RhdGljIGVxdWFsc0FycmF5KG1hdHJpeDogTWF0cml4MiwgYXJyYXk6IG51bWJlcltdLCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bWF0cml4WzBdID09PSBhcnJheVtvZmZzZXRdICYmXHJcblx0XHRcdG1hdHJpeFsxXSA9PT0gYXJyYXlbb2Zmc2V0ICsgMV0gJiZcclxuXHRcdFx0bWF0cml4WzJdID09PSBhcnJheVtvZmZzZXQgKyAyXSAmJlxyXG5cdFx0XHRtYXRyaXhbM10gPT09IGFycmF5W29mZnNldCArIDNdXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFsc0Vwc2lsb24obGVmdDogTWF0cml4MiwgcmlnaHQ6IE1hdHJpeDIsIGVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRlcHNpbG9uID0gZGVmYXVsdFZhbHVlKGVwc2lsb24sIDApO1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMF0gLSByaWdodFswXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMV0gLSByaWdodFsxXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMl0gLSByaWdodFsyXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbM10gLSByaWdodFszXSkgPD0gZXBzaWxvbilcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc3RhdGljIElERU5USVRZID0gT2JqZWN0LmZyZWV6ZShuZXcgTWF0cml4MigxLjAsIDAuMCwgMC4wLCAxLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBaRVJPID0gT2JqZWN0LmZyZWV6ZShuZXcgTWF0cml4MigwLjAsIDAuMCwgMC4wLCAwLjApKTtcclxuXHJcblx0Y2xvbmUocmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRyZXR1cm4gTWF0cml4Mi5jbG9uZSh0aGlzLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0ZXF1YWxzKHJpZ2h0OiBNYXRyaXgyKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gTWF0cml4Mi5lcXVhbHModGhpcywgcmlnaHQpO1xyXG5cdH1cclxuXHJcblx0ZXF1YWxzRXBzaWxvbihyaWdodDogTWF0cml4MiwgZXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBNYXRyaXgyLmVxdWFsc0Vwc2lsb24odGhpcywgcmlnaHQsIGVwc2lsb24pO1xyXG5cdH1cclxuXHJcblx0dG9TdHJpbmcoKSB7XHJcblx0XHRyZXR1cm4gYCgke3RoaXNbMF19LCAke3RoaXNbMl19KVxcbmAgKyBgKCR7dGhpc1sxXX0sICR7dGhpc1szXX0pYDtcclxuXHR9XHJcbn1cclxuY29uc3Qgc2NhbGVTY3JhdGNoMSA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IHNjYWxlU2NyYXRjaDIgPSBuZXcgVmVjdG9yMigpO1xyXG5jb25zdCBzY2FsZVNjcmF0Y2gzID0gbmV3IFZlY3RvcjIoKTtcclxuY29uc3Qgc2NhbGVTY3JhdGNoNCA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IHNjcmF0Y2hDb2x1bW4gPSBuZXcgVmVjdG9yMigpO1xyXG5jb25zdCBzY2FsZVNjcmF0Y2g1ID0gbmV3IFZlY3RvcjIoKTtcclxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MjtcclxuIiwiaW1wb3J0IHsgU2hhZGVyU3RhZ2UgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb25hbExpZ2h0IH0gZnJvbSBcIi4uL2xpZ2h0L0RpcmVjdGlvbmFsTGlnaHRcIjtcclxuaW1wb3J0IHsgUG9pbnRMaWdodCB9IGZyb20gXCIuLi9saWdodC9Qb2ludExpZ2h0XCI7XHJcbmltcG9ydCB7IFNwb3RMaWdodCB9IGZyb20gXCIuLi9saWdodC9TcG90TGlnaHRcIjtcclxuaW1wb3J0IENvbG9yIGZyb20gXCIuLi9tYXRoL0NvbG9yXCI7XHJcbmltcG9ydCBNYXRyaXgyIGZyb20gXCIuLi9tYXRoL01hdHJpeDJcIjtcclxuaW1wb3J0IE1hdHJpeDMgZnJvbSBcIi4uL21hdGgvTWF0cml4M1wiO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tIFwiLi4vbWF0aC9NYXRyaXg0XCI7XHJcbmltcG9ydCBWZWN0b3IyIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjJcIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xyXG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi4vbWF0aC9WZWN0b3I0XCI7XHJcbmltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xyXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi9Db250ZXh0XCI7XHJcbmltcG9ydCBTYW1wbGVyIGZyb20gXCIuL1NhbXBsZXJcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4vVGV4dHVyZVwiO1xyXG5pbXBvcnQgVW5pZm9ybUJ1ZmZlciBmcm9tIFwiLi9Vbmlmb3JtQnVmZmVyXCI7XHJcbmV4cG9ydCBjbGFzcyBVbmlmb3JtPFQ+IHtcclxuXHRfdmFsdWU6IFQ7XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdHZhbHVlOiBUO1xyXG5cdG9mZnNldDogbnVtYmVyO1xyXG5cdGJ1ZmZlcjogRmxvYXQzMkFycmF5IHwgVWludDE2QXJyYXkgfCBVaW50MzJBcnJheSB8IFVpbnQ4QXJyYXkgfCBGbG9hdDY0QXJyYXkgfCBVbmlmb3JtQnVmZmVyO1xyXG5cdGNiOiBGdW5jdGlvbiB8IG51bWJlciB8IE9iamVjdDtcclxuXHRieXRlU2l6ZTogbnVtYmVyO1xyXG5cdHZpc2liaWxpdHk/OiBudW1iZXI7XHJcblx0dHlwZT86IHN0cmluZztcclxuXHRkaXJ0eT86IGJvb2xlYW47XHJcblxyXG5cdGNvbnN0cnVjdG9yKHVuaWZvcm1OYW1lOiBzdHJpbmcsIGNiPzogRnVuY3Rpb24gfCBudW1iZXIgfCBPYmplY3QsIG9mZnNldD86IG51bWJlcikge1xyXG5cdFx0dGhpcy5uYW1lID0gdW5pZm9ybU5hbWU7XHJcblx0XHR0aGlzLmNiID0gY2I7XHJcblx0XHR0aGlzLm9mZnNldCA9IGRlZmF1bHRWYWx1ZShvZmZzZXQsIDApO1xyXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0gU2hhZGVyU3RhZ2UuVmVydGV4IHwgU2hhZGVyU3RhZ2UuRnJhZ21lbnQ7XHJcblx0XHR0aGlzLnR5cGUgPSBcIm51bWJlclwiO1xyXG5cdH1cclxuXHRzZXRCdWZmZXIoYXJyYXk6IEFycmF5PG51bWJlcj4sIG9mZnNldCA9IDApIHtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dGhpcy5idWZmZXJbaSArIG9mZnNldF0gPSBhcnJheVtpXTtcclxuXHRcdH1cclxuXHR9XHJcblx0c2V0KCkge1xyXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHR9XHJcblx0Z2V0VmFsdWUoKSB7XHJcblx0XHRsZXQgcmVzdWx0O1xyXG5cdFx0Y29uc3QgY2JUeXBlID0gdHlwZW9mIHRoaXMuY2I7XHJcblx0XHRzd2l0Y2ggKGNiVHlwZSkge1xyXG5cdFx0XHRjYXNlIFwib2JqZWN0XCI6XHJcblx0XHRcdFx0cmVzdWx0ID0gdGhpcy5jYlt0aGlzLm5hbWVdIHx8IHRoaXMuY2I7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgXCJmdW5jdGlvblwiOlxyXG5cdFx0XHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdFx0XHRyZXN1bHQgPSB0aGlzLmNiKCk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgXCJudW1iZXJcIjpcclxuXHRcdFx0XHRyZXN1bHQgPSB0aGlzLmNiO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgaXMgZXJyb3JcIik7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1VaW50IGV4dGVuZHMgVW5pZm9ybTxudW1iZXI+IHtcclxuXHRzdGF0aWMgYWxpZ24gPSA0O1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XHJcblx0XHR0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5fdmFsdWUgPSAwO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IDQ7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBVaW50MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCAxKTtcclxuXHRcdHRoaXMudHlwZSA9IFwidWludFwiO1xyXG5cdH1cclxuXHRzZXQoKSB7XHJcblx0XHRpZiAodGhpcy5jYiAhPSB1bmRlZmluZWQpIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRpZiAodGhpcy52YWx1ZSAhPT0gdGhpcy5fdmFsdWUpIHtcclxuXHRcdFx0dGhpcy5fdmFsdWUgPSB0aGlzLnZhbHVlO1xyXG5cdFx0XHR0aGlzLmJ1ZmZlclswXSA9IHRoaXMudmFsdWU7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1GbG9hdCBleHRlbmRzIFVuaWZvcm08bnVtYmVyPiB7XHJcblx0c3RhdGljIGFsaWduID0gNDtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBGdW5jdGlvbiB8IG51bWJlciB8IE9iamVjdCxcclxuXHRcdG9mZnNldD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0dGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX3ZhbHVlID0gMDtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSA0O1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIDEpO1xyXG5cdFx0dGhpcy50eXBlID0gXCJ2ZWMxXCI7XHJcblx0fVxyXG5cdHNldCgpIHtcclxuXHRcdGlmICh0aGlzLmNiICE9IHVuZGVmaW5lZCkgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdGlmICh0aGlzLnZhbHVlICE9PSB0aGlzLl92YWx1ZSkge1xyXG5cdFx0XHR0aGlzLl92YWx1ZSA9IHRoaXMudmFsdWU7XHJcblx0XHRcdHRoaXMuYnVmZmVyWzBdID0gdGhpcy52YWx1ZTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBVbmlmb3JtRmxvYXRWZWMyIGV4dGVuZHMgVW5pZm9ybTxWZWN0b3IyPiB7XHJcblx0c3RhdGljIGFsaWduID0gODtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBGdW5jdGlvbiB8IG51bWJlciB8IE9iamVjdCxcclxuXHRcdG9mZnNldD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0dGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX3ZhbHVlID0gbmV3IFZlY3RvcjIoKTtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCAyKTtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSA4O1xyXG5cdFx0dGhpcy50eXBlID0gXCJ2ZWMyXCI7XHJcblx0fVxyXG5cdHNldCgpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLmNiICE9IHVuZGVmaW5lZCkgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdGNvbnN0IHYgPSB0aGlzLnZhbHVlO1xyXG5cdFx0aWYgKCFWZWN0b3IyLmVxdWFscyh2LCB0aGlzLl92YWx1ZSkpIHtcclxuXHRcdFx0VmVjdG9yMi5jbG9uZSh2LCB0aGlzLl92YWx1ZSk7XHJcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHRoaXMuX3ZhbHVlLnRvQXJyYXkoKSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybUZsb2F0VmVjMyBleHRlbmRzIFVuaWZvcm08VmVjdG9yMz4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XHJcblx0XHR0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5fdmFsdWUgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIDMpO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IDEyO1xyXG5cdFx0dGhpcy50eXBlID0gXCJ2ZWMzXCI7XHJcblx0fVxyXG5cdHNldCgpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLmNiICE9IHVuZGVmaW5lZCkgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdGNvbnN0IHYgPSB0aGlzLnZhbHVlO1xyXG5cdFx0aWYgKCFWZWN0b3IzLmVxdWFscyh2LCB0aGlzLl92YWx1ZSkpIHtcclxuXHRcdFx0VmVjdG9yMy5jbG9uZSh2LCB0aGlzLl92YWx1ZSk7XHJcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHRoaXMuX3ZhbHVlLnRvQXJyYXkoKSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybUZsb2F0VmVjNCBleHRlbmRzIFVuaWZvcm08VmVjdG9yND4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XHJcblx0XHR0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5fdmFsdWUgPSBuZXcgVmVjdG9yNCgpO1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIDQpO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IDE2O1xyXG5cdFx0dGhpcy50eXBlID0gXCJ2ZWM0XCI7XHJcblx0fVxyXG5cdHNldCgpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLmNiICE9IHVuZGVmaW5lZCkgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdGNvbnN0IHYgPSB0aGlzLnZhbHVlO1xyXG5cdFx0aWYgKCFWZWN0b3I0LmVxdWFscyh2LCB0aGlzLl92YWx1ZSkpIHtcclxuXHRcdFx0VmVjdG9yNC5jbG9uZSh2LCB0aGlzLl92YWx1ZSk7XHJcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHRoaXMuX3ZhbHVlLnRvQXJyYXkoKSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybUNvbG9yIGV4dGVuZHMgVW5pZm9ybTxDb2xvcj4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XHJcblx0XHR0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5fdmFsdWUgPSBuZXcgQ29sb3IoKTtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCAzKTtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSAxMjtcclxuXHRcdHRoaXMudHlwZSA9IFwidmVjM1wiO1xyXG5cdH1cclxuXHRzZXQoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAodGhpcy5jYiAhPSB1bmRlZmluZWQpIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRjb25zdCB2ID0gdGhpcy52YWx1ZTtcclxuXHRcdGlmICghQ29sb3IuZXF1YWxzKHYsIHRoaXMuX3ZhbHVlKSkge1xyXG5cdFx0XHRDb2xvci5jbG9uZSh2LCB0aGlzLl92YWx1ZSk7XHJcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHRoaXMuX3ZhbHVlLnRvQXJyYXkoKSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1NYXQyIGV4dGVuZHMgVW5pZm9ybTxNYXRyaXgyPiB7XHJcblx0c3RhdGljIGFsaWduID0gODtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBGdW5jdGlvbiB8IG51bWJlciB8IE9iamVjdCxcclxuXHRcdG9mZnNldD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0dGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX3ZhbHVlID0gbmV3IE1hdHJpeDIoKTtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCA0KTtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSAxNjtcclxuXHRcdHRoaXMudHlwZSA9IFwibWF0MlwiO1xyXG5cdH1cclxuXHRzZXQoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAodGhpcy5jYiAhPSB1bmRlZmluZWQpIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRjb25zdCB2ID0gdGhpcy52YWx1ZTtcclxuXHRcdGlmICghTWF0cml4Mi5lcXVhbHModiwgdGhpcy5fdmFsdWUpKSB7XHJcblx0XHRcdE1hdHJpeDIuY2xvbmUodiwgdGhpcy5fdmFsdWUpO1xyXG5cdFx0XHR0aGlzLnNldEJ1ZmZlcih0aGlzLl92YWx1ZS50b0FycmF5KCkpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1NYXQzIGV4dGVuZHMgVW5pZm9ybTxNYXRyaXgzPiB7XHJcblx0c3RhdGljIGFsaWduID0gMTY7XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxyXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXHJcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXHJcblx0XHRjYjogRnVuY3Rpb24gfCBudW1iZXIgfCBPYmplY3QsXHJcblx0XHRvZmZzZXQ/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgb2Zmc2V0KTtcclxuXHRcdHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLl92YWx1ZSA9IG5ldyBNYXRyaXgzKCk7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgOSk7XHJcblx0XHR0aGlzLmJ5dGVTaXplID0gNDg7XHJcblx0XHR0aGlzLnR5cGUgPSBcIm1hdDNcIjtcclxuXHR9XHJcblx0c2V0KCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKHRoaXMuY2IgIT0gdW5kZWZpbmVkKSB0aGlzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgdiA9IHRoaXMudmFsdWU7XHJcblx0XHRpZiAoIU1hdHJpeDMuZXF1YWxzKHYsIHRoaXMuX3ZhbHVlKSkge1xyXG5cdFx0XHRNYXRyaXgzLmNsb25lKHYsIHRoaXMuX3ZhbHVlKTtcclxuXHRcdFx0dGhpcy5zZXRCdWZmZXIodGhpcy5fdmFsdWUudG9BcnJheSgpKTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBVbmlmb3JtTWF0NCBleHRlbmRzIFVuaWZvcm08TWF0cml4ND4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XHJcblx0XHR0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5fdmFsdWUgPSBuZXcgTWF0cml4NCgpO1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIDE2KTtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSA2NDtcclxuXHRcdHRoaXMudHlwZSA9IFwibWF0NFwiO1xyXG5cdH1cclxuXHRzZXQoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAodGhpcy5jYiAhPSB1bmRlZmluZWQpIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRjb25zdCB2ID0gdGhpcy52YWx1ZTtcclxuXHRcdGlmICghTWF0cml4NC5lcXVhbHModiwgdGhpcy5fdmFsdWUpKSB7XHJcblx0XHRcdE1hdHJpeDQuY2xvbmUodiwgdGhpcy5fdmFsdWUpO1xyXG5cdFx0XHR0aGlzLnNldEJ1ZmZlcih0aGlzLl92YWx1ZS50b0FycmF5KCkpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1NYXRyaXg0QXJyYXkgZXh0ZW5kcyBVbmlmb3JtPEFycmF5PE1hdHJpeDQ+PiB7XHJcblx0c3RhdGljIGFsaWduID0gMTY7XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxyXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXHJcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXHJcblx0XHRjYjogRnVuY3Rpb24gfCBudW1iZXIgfCBPYmplY3QsXHJcblx0XHRvZmZzZXQ/OiBudW1iZXIsXHJcblx0XHRjb3VudD86IG51bWJlcixcclxuXHRcdHNpemUgPSA2NFxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0gU2hhZGVyU3RhZ2UuVmVydGV4IHwgU2hhZGVyU3RhZ2UuRnJhZ21lbnQ7XHJcblx0XHR0aGlzLmJ5dGVTaXplID0gY291bnQgKiBzaXplO1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIHRoaXMuYnl0ZVNpemUgLyA0KTtcclxuXHRcdHRoaXMudHlwZSA9IFwibWF0NC1hcnJheVwiO1xyXG5cdH1cclxuXHRzZXQoKTogYm9vbGVhbiB7XHJcblx0XHR0aGlzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xyXG5cdFx0aWYgKCF0aGlzLnZhbHVlKSByZXR1cm4gZmFsc2U7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dGhpcy5zZXRCdWZmZXIodGhpcy52YWx1ZVtpXS50b0FycmF5KCksIGkgKiAxNik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1GbG9hdEFycmF5IGV4dGVuZHMgVW5pZm9ybTxBcnJheTxudW1iZXI+PiB7XHJcblx0c3RhdGljIGFsaWduID0gNDtcclxuXHQvLyBjYjogRnVuY3Rpb247XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxyXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXHJcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXHJcblx0XHRjYjogRnVuY3Rpb24gfCBudW1iZXIgfCBPYmplY3QsXHJcblx0XHRvZmZzZXQ/OiBudW1iZXIsXHJcblx0XHRjb3VudD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0gU2hhZGVyU3RhZ2UuVmVydGV4IHwgU2hhZGVyU3RhZ2UuRnJhZ21lbnQ7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgY291bnQpO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IDQgKiBjb3VudDtcclxuXHRcdHRoaXMudHlwZSA9IFwiZmxvYXQtYXJyYXlcIjtcclxuXHR9XHJcblx0c2V0KCk6IGJvb2xlYW4ge1xyXG5cdFx0dGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHR0aGlzLmJ1ZmZlcltpXSA9IHRoaXMudmFsdWVbaV07XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1WZWMyQXJyYXkgZXh0ZW5kcyBVbmlmb3JtPEFycmF5PFZlY3RvcjI+PiB7XHJcblx0c3RhdGljIGFsaWduID0gODtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBGdW5jdGlvbiB8IG51bWJlciB8IE9iamVjdCxcclxuXHRcdG9mZnNldD86IG51bWJlcixcclxuXHRcdGNvdW50PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XHJcblx0XHR0aGlzLnZpc2liaWxpdHkgPSBTaGFkZXJTdGFnZS5WZXJ0ZXggfCBTaGFkZXJTdGFnZS5GcmFnbWVudDtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSBjb3VudCAqIDg7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgdGhpcy5ieXRlU2l6ZSAvIDQpO1xyXG5cdFx0dGhpcy50eXBlID0gXCJ2ZWMyLWFycmF5XCI7XHJcblx0fVxyXG5cdHNldCgpOiBib29sZWFuIHtcclxuXHRcdC8vIHRoaXMudmFsdWUgPSB0aGlzLmNiKCk7XHJcblx0XHR0aGlzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xyXG5cdFx0bGV0IGogPSAwO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHRoaXMuYnVmZmVyW2pdID0gdGhpcy52YWx1ZVtpXS54O1xyXG5cdFx0XHR0aGlzLmJ1ZmZlcltqICsgMV0gPSB0aGlzLnZhbHVlW2ldLnk7XHJcblx0XHRcdGogKz0gMjtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybVZlYzNBcnJheSBleHRlbmRzIFVuaWZvcm08QXJyYXk8VmVjdG9yMz4+IHtcclxuXHRzdGF0aWMgYWxpZ24gPSAxNjtcclxuXHQvLyBjYjogRnVuY3Rpb247XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxyXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXHJcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXHJcblx0XHRjYjogRnVuY3Rpb24gfCBudW1iZXIgfCBPYmplY3QsXHJcblx0XHRvZmZzZXQ/OiBudW1iZXIsXHJcblx0XHRjb3VudD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0gU2hhZGVyU3RhZ2UuVmVydGV4IHwgU2hhZGVyU3RhZ2UuRnJhZ21lbnQ7XHJcblx0XHR0aGlzLmJ5dGVTaXplID0gY291bnQgKiAxNjtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCB0aGlzLmJ5dGVTaXplIC8gNCk7XHJcblx0XHR0aGlzLnR5cGUgPSBcInZlYzMtYXJyYXlcIjtcclxuXHR9XHJcblx0c2V0KCk6IGJvb2xlYW4ge1xyXG5cdFx0Ly8gdGhpcy52YWx1ZSA9IHRoaXMuY2IoKTtcclxuXHRcdHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRsZXQgaiA9IDA7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dGhpcy5idWZmZXJbal0gPSB0aGlzLnZhbHVlW2ldLng7XHJcblx0XHRcdHRoaXMuYnVmZmVyW2ogKyAxXSA9IHRoaXMudmFsdWVbaV0ueTtcclxuXHRcdFx0dGhpcy5idWZmZXJbaiArIDJdID0gdGhpcy52YWx1ZVtpXS56O1xyXG5cdFx0XHR0aGlzLmJ1ZmZlcltqICsgM10gPSAwO1xyXG5cdFx0XHRqICs9IDQ7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1WZWM0QXJyYXkgZXh0ZW5kcyBVbmlmb3JtPEFycmF5PFZlY3RvcjQ+PiB7XHJcblx0c3RhdGljIGFsaWduID0gMTY7XHJcblx0Ly8gY2I6IEZ1bmN0aW9uO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyLFxyXG5cdFx0Y291bnQ/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgb2Zmc2V0KTtcclxuXHRcdHRoaXMudmlzaWJpbGl0eSA9IFNoYWRlclN0YWdlLlZlcnRleCB8IFNoYWRlclN0YWdlLkZyYWdtZW50O1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IGNvdW50ICogMTY7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgdGhpcy5ieXRlU2l6ZSAvIDQpO1xyXG5cdFx0dGhpcy50eXBlID0gXCJ2ZWM0LWFycmF5XCI7XHJcblx0fVxyXG5cdHNldCgpOiBib29sZWFuIHtcclxuXHRcdHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRsZXQgaiA9IDA7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dGhpcy5idWZmZXJbal0gPSB0aGlzLnZhbHVlW2ldLng7XHJcblx0XHRcdHRoaXMuYnVmZmVyW2ogKyAxXSA9IHRoaXMudmFsdWVbaV0ueTtcclxuXHRcdFx0dGhpcy5idWZmZXJbaiArIDJdID0gdGhpcy52YWx1ZVtpXS56O1xyXG5cdFx0XHR0aGlzLmJ1ZmZlcltqICsgM10gPSB0aGlzLnZhbHVlW2ldLnc7XHJcblx0XHRcdGogKz0gNDtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybVRleHR1cmUgZXh0ZW5kcyBVbmlmb3JtPFRleHR1cmU+IHtcclxuXHRwdWJsaWMgYmluZGluZzogbnVtYmVyO1xyXG5cdHB1YmxpYyB0eXBlOiBzdHJpbmc7XHJcblx0cHVibGljIHZpc2liaWxpdHk6IFNoYWRlclN0YWdlO1xyXG5cdHB1YmxpYyBuYW1lOiBzdHJpbmc7XHJcblx0cHVibGljIHRleHR1cmU6IFRleHR1cmU7XHJcblx0cHVibGljIGlzVGV4dHVyZTogYm9vbGVhbjtcclxuXHRwcml2YXRlIF90ZXh0dXJlOiBGdW5jdGlvbiB8IFRleHR1cmU7XHJcblx0Y29uc3RydWN0b3IodW5pZm9ybU5hbWU6IHN0cmluZywgYmluZGluZzogbnVtYmVyLCB0ZXh0dXJlOiBGdW5jdGlvbiB8IFRleHR1cmUpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lKTtcclxuXHRcdHRoaXMuYmluZGluZyA9IGJpbmRpbmc7XHJcblx0XHR0aGlzLnR5cGUgPSBcInRleHR1cmVcIjtcclxuXHRcdHRoaXMuaXNUZXh0dXJlID0gdHJ1ZTtcclxuXHRcdHRoaXMudmlzaWJpbGl0eSA9IFNoYWRlclN0YWdlLkZyYWdtZW50O1xyXG5cdFx0dGhpcy5fdGV4dHVyZSA9IHRleHR1cmU7XHJcblx0fVxyXG5cdGdldCBsYXlvdXRUeXBlKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMudGV4dHVyZT8ubGF5b3V0VHlwZSB8fCBcIm5vdCB5ZXQgYmluZFwiO1xyXG5cdH1cclxuXHRiaW5kKGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdHRoaXMudGV4dHVyZSA9IHRoaXMuX3RleHR1cmUgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IHRoaXMuX3RleHR1cmUoKSA6IHRoaXMuX3RleHR1cmU7XHJcblx0XHR0aGlzLnRleHR1cmUudXBkYXRlKGNvbnRleHQpO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybVNhbXBsZXIgZXh0ZW5kcyBVbmlmb3JtPFNhbXBsZXI+IHtcclxuXHRwdWJsaWMgYmluZGluZzogbnVtYmVyO1xyXG5cdHB1YmxpYyB0eXBlOiBzdHJpbmc7XHJcblx0cHVibGljIHZpc2liaWxpdHk6IFNoYWRlclN0YWdlO1xyXG5cdHB1YmxpYyBuYW1lOiBzdHJpbmc7XHJcblx0cHVibGljIHNhbXBsZXI6IFNhbXBsZXI7XHJcblx0cHVibGljIGlzU2FtcGxlcjogYm9vbGVhbjtcclxuXHRwcml2YXRlIF9zYW1wbGVyOiBGdW5jdGlvbiB8IFNhbXBsZXI7XHJcblx0Y29uc3RydWN0b3IodW5pZm9ybU5hbWU6IHN0cmluZywgYmluZGluZzogbnVtYmVyLCBzYW1wbGVyOiBGdW5jdGlvbiB8IFNhbXBsZXIpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lKTtcclxuXHRcdHRoaXMubmFtZSA9IHVuaWZvcm1OYW1lO1xyXG5cdFx0dGhpcy5iaW5kaW5nID0gYmluZGluZztcclxuXHRcdHRoaXMudHlwZSA9IFwic2FtcGxlclwiO1xyXG5cdFx0dGhpcy5pc1NhbXBsZXIgPSB0cnVlO1xyXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0gU2hhZGVyU3RhZ2UuRnJhZ21lbnQ7XHJcblx0XHR0aGlzLl9zYW1wbGVyID0gc2FtcGxlcjtcclxuXHR9XHJcblx0Z2V0IGxheW91dFR5cGUoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5zYW1wbGVyPy5sYXlvdXRUeXBlIHx8IFwibm90IHlldCBiaW5kXCI7XHJcblx0fVxyXG5cdGJpbmQoY29udGV4dDogQ29udGV4dCkge1xyXG5cdFx0dGhpcy5zYW1wbGVyID0gdGhpcy5fc2FtcGxlciBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gdGhpcy5fc2FtcGxlcigpIDogdGhpcy5fc2FtcGxlcjtcclxuXHRcdHRoaXMuc2FtcGxlci51cGRhdGUoY29udGV4dCk7XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBVbmlmb3JtU3BvdExpZ2h0cyBleHRlbmRzIFVuaWZvcm08U3BvdExpZ2h0PiB7XHJcblx0c3RhdGljIGFsaWduID0gMTY7XHJcblx0bGlnaHRzOiBBcnJheTxTcG90TGlnaHQ+O1xyXG5cdC8vIGNiOiBGdW5jdGlvbjtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBGdW5jdGlvbiB8IG51bWJlciB8IE9iamVjdCxcclxuXHRcdG9mZnNldD86IG51bWJlcixcclxuXHRcdGNvdW50PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XHJcblx0XHR0aGlzLmNiID0gY2I7XHJcblx0XHR0aGlzLmJ5dGVTaXplID0gY291bnQgKiA2NDtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCB0aGlzLmJ5dGVTaXplIC8gNCk7XHJcblx0XHR0aGlzLnR5cGUgPSBcInNwb3RzTGlnaHRcIjtcclxuXHRcdHRoaXMudmlzaWJpbGl0eSA9IFNoYWRlclN0YWdlLkZyYWdtZW50O1xyXG5cdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG5cdH1cclxuXHRzZXQoKSB7XHJcblx0XHR0aGlzLmxpZ2h0cyA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdHRoaXMubGlnaHRzLmZvckVhY2goKHNwb3RMaWdodCwgaW5kZXgpID0+IHtcclxuXHRcdFx0dGhpcy5zZXRTdWJEYXRhKHNwb3RMaWdodCwgaW5kZXgpO1xyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gdGhpcy5kaXJ0eTtcclxuXHR9XHJcblx0cHJpdmF0ZSBzZXRTdWJEYXRhKHNwb3RMaWdodDogU3BvdExpZ2h0LCBpbmRleDogbnVtYmVyKSB7XHJcblx0XHRjb25zdCBvZmZzZXQgPSBpbmRleCAqIDE2O1xyXG5cdFx0aWYgKHNwb3RMaWdodC5wb3NpdGlvbkRpcnR5KSB7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHNwb3RMaWdodC5wb3NpdGlvbi50b0FycmF5KCksIG9mZnNldCArIDApOyAvLyBieXRlT2Zmc2V0PTA7XHJcblx0XHR9XHJcblx0XHRpZiAoc3BvdExpZ2h0LmRpc3RhbmNlRGlydHkpIHtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgc3BvdExpZ2h0LmRpc3RhbmNlLCBvZmZzZXQgKyAzKTsgLy8gYnl0ZU9mZnNldD0xMjtcclxuXHRcdH1cclxuXHRcdGlmIChzcG90TGlnaHQuZGlydGVjdERpcnR5KSB7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHNwb3RMaWdodC5kaXJlY3Rpb25hbC50b0FycmF5KCksIG9mZnNldCArIDQpOyAvLyBieXRlT2Zmc2V0PTE2O1xyXG5cdFx0fVxyXG5cdFx0aWYgKHNwb3RMaWdodC5jb25lQ29zRGlydHkpIHtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgc3BvdExpZ2h0LmNvbmVDb3MsIG9mZnNldCArIDcpOyAvLyBieXRlT2Zmc2V0PTI4O1xyXG5cdFx0fVxyXG5cdFx0aWYgKHNwb3RMaWdodC5jb2xvckRpcnR5KSB7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHNwb3RMaWdodC5jb2xvci50b0FycmF5KCksIG9mZnNldCArIDgpOyAvLyBieXRlT2Zmc2V0PTMyO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHNwb3RMaWdodC5wZW51bWJyYUNvc0RpcnR5KSB7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHNwb3RMaWdodC5wZW51bWJyYUNvcywgb2Zmc2V0ICsgMTEpOyAvLyBieXRlT2Zmc2V0PTQ0O1xyXG5cdFx0fVxyXG5cdFx0aWYgKHNwb3RMaWdodC5kZWNheURpcnR5KSB7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHNwb3RMaWdodC5kZWNheSwgb2Zmc2V0ICsgMTIpOyAvLyBieXRlT2Zmc2V0PTQ4O1xyXG5cdFx0fVxyXG5cclxuXHRcdHNwb3RMaWdodC5wb3NpdGlvbkRpcnR5ID0gZmFsc2U7XHJcblx0XHRzcG90TGlnaHQuZGlzdGFuY2VEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0c3BvdExpZ2h0LmRpcnRlY3REaXJ0eSA9IGZhbHNlO1xyXG5cdFx0c3BvdExpZ2h0LmNvbmVDb3NEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0c3BvdExpZ2h0LmNvbG9yRGlydHkgPSBmYWxzZTtcclxuXHRcdHNwb3RMaWdodC5wZW51bWJyYUNvc0RpcnR5ID0gZmFsc2U7XHJcblx0XHRzcG90TGlnaHQuZGVjYXlEaXJ0eSA9IGZhbHNlO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1TcG90TGlnaHRTaGFkb3dzIGV4dGVuZHMgVW5pZm9ybTxTcG90TGlnaHQ+IHtcclxuXHRzdGF0aWMgYWxpZ24gPSAxNjtcclxuXHRzdGF0aWMgdW5pZm9ybVNpemUgPSAxODtcclxuXHRsaWdodHM6IEFycmF5PFNwb3RMaWdodD47XHJcblx0Ly8gY2I6IEZ1bmN0aW9uO1xyXG5cdHByaXZhdGUgX25lYXJWYWx1ZTogbnVtYmVyO1xyXG5cdHByaXZhdGUgX2ZhclZhbHVlOiBudW1iZXI7XHJcblx0cHJpdmF0ZSBfc3ViRGF0YVNpemU6IG51bWJlcjtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxyXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXHJcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXHJcblx0XHRjYjogRnVuY3Rpb24gfCBudW1iZXIgfCBPYmplY3QsXHJcblx0XHRvZmZzZXQ/OiBudW1iZXIsXHJcblx0XHRjb3VudD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0Y29uc3QgYnl0ZXNQZXJFbGVtZW50ID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO1xyXG5cdFx0dGhpcy5fc3ViRGF0YVNpemUgPSBVbmlmb3JtU3BvdExpZ2h0U2hhZG93cy51bmlmb3JtU2l6ZTtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSBjb3VudCAqIHRoaXMuX3N1YkRhdGFTaXplICogYnl0ZXNQZXJFbGVtZW50O1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIHRoaXMuYnl0ZVNpemUgLyA0KTtcclxuXHRcdHRoaXMudHlwZSA9IFwic3BvdExpZ2h0U2hhZG93c1wiO1xyXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0gU2hhZGVyU3RhZ2UuRnJhZ21lbnQ7XHJcblx0XHR0aGlzLl9uZWFyVmFsdWUgPSBudWxsO1xyXG5cdFx0dGhpcy5fZmFyVmFsdWUgPSBudWxsO1xyXG5cdH1cclxuXHRzZXQoKSB7XHJcblx0XHR0aGlzLmxpZ2h0cyA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdHRoaXMubGlnaHRzLmZvckVhY2goKHNwb3RMaWdodCwgaW5kZXgpID0+IHtcclxuXHRcdFx0dGhpcy5zZXRTdWJEYXRhKHNwb3RMaWdodCwgaW5kZXgpO1xyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gdGhpcy5kaXJ0eTtcclxuXHR9XHJcblx0cHJpdmF0ZSBzZXRTdWJEYXRhKHNwb3RMaWdodDogU3BvdExpZ2h0LCBpbmRleDogbnVtYmVyKSB7XHJcblx0XHRjb25zdCBvZmZzZXQgPSBpbmRleCAqIHRoaXMuX3N1YkRhdGFTaXplO1xyXG5cdFx0aWYgKHNwb3RMaWdodC5zaGFkb3cudnBNYXRyaXhEaXJ0eSkge1xyXG5cdFx0XHRzcG90TGlnaHQuc2hhZG93LnZwTWF0cml4RGlydHkgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgc3BvdExpZ2h0LnNoYWRvdy5jYW1lcmEudnBNYXRyaXgudG9BcnJheSgpLCBvZmZzZXQgKyAwKTsgLy8gYnl0ZU9mZnNldD0wO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgbmVhclZhbHVlID0gc3BvdExpZ2h0LnNoYWRvdy5jYW1lcmEubmVhcjtcclxuXHRcdGlmIChuZWFyVmFsdWUgIT0gdGhpcy5fbmVhclZhbHVlKSB7XHJcblx0XHRcdHRoaXMuX25lYXJWYWx1ZSA9IG5lYXJWYWx1ZTtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgdGhpcy5fbmVhclZhbHVlLCBvZmZzZXQgKyAxNik7IC8vIGJ5dGVPZmZzZXQ9MDtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZhclZhbHVlID0gc3BvdExpZ2h0LnNoYWRvdy5jYW1lcmEuZmFyO1xyXG5cdFx0aWYgKGZhclZhbHVlICE9IHRoaXMuX2ZhclZhbHVlKSB7XHJcblx0XHRcdHRoaXMuX2ZhclZhbHVlID0gZmFyVmFsdWU7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHRoaXMuX2ZhclZhbHVlLCBvZmZzZXQgKyAxNyk7IC8vIGJ5dGVPZmZzZXQ9MDtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1Qb2ludExpZ2h0cyBleHRlbmRzIFVuaWZvcm08UG9pbnRMaWdodD4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xyXG5cdGxpZ2h0czogQXJyYXk8UG9pbnRMaWdodD47XHJcblx0Ly8gY2I6IEZ1bmN0aW9uO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyLFxyXG5cdFx0Y291bnQ/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgb2Zmc2V0KTtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSBjb3VudCAqIDMyO1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIHRoaXMuYnl0ZVNpemUgLyA0KTtcclxuXHRcdHRoaXMudHlwZSA9IFwicG9pbnRzTGlnaHRcIjtcclxuXHRcdHRoaXMudmlzaWJpbGl0eSA9IFNoYWRlclN0YWdlLkZyYWdtZW50O1xyXG5cdH1cclxuXHRzZXQoKSB7XHJcblx0XHR0aGlzLmxpZ2h0cyA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdHRoaXMubGlnaHRzLmZvckVhY2goKHBvaW50TGlnaHQsIGluZGV4KSA9PiB7XHJcblx0XHRcdHRoaXMuc2V0U3ViRGF0YShwb2ludExpZ2h0LCBpbmRleCk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiB0aGlzLmRpcnR5O1xyXG5cdH1cclxuXHRwcml2YXRlIHNldFN1YkRhdGEocG9pbnRMaWdodDogUG9pbnRMaWdodCwgaW5kZXg6IG51bWJlcikge1xyXG5cdFx0Y29uc3Qgb2Zmc2V0ID0gaW5kZXggKiA4O1xyXG5cdFx0aWYgKHBvaW50TGlnaHQucG9zaXRpb25EaXJ0eSkge1xyXG5cdFx0XHRwb2ludExpZ2h0LnBvc2l0aW9uRGlydHkgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgcG9pbnRMaWdodC5wb3NpdGlvbi50b0FycmF5KCksIG9mZnNldCArIDApOyAvLyBieXRlT2Zmc2V0PTA7XHJcblx0XHR9XHJcblx0XHRpZiAocG9pbnRMaWdodC5kaXN0YW5jZURpcnR5KSB7XHJcblx0XHRcdHBvaW50TGlnaHQuZGlzdGFuY2VEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCBwb2ludExpZ2h0LmRpc3RhbmNlLCBvZmZzZXQgKyAzKTsgLy8gYnl0ZU9mZnNldD0xMjtcclxuXHRcdH1cclxuXHRcdGlmIChwb2ludExpZ2h0LmNvbG9yRGlydHkpIHtcclxuXHRcdFx0cG9pbnRMaWdodC5jb2xvckRpcnR5ID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHBvaW50TGlnaHQuY29sb3IudG9BcnJheSgpLCBvZmZzZXQgKyA0KTsgLy8gYnl0ZU9mZnNldD0zMjtcclxuXHRcdH1cclxuXHRcdGlmIChwb2ludExpZ2h0LmRlY2F5RGlydHkpIHtcclxuXHRcdFx0cG9pbnRMaWdodC5kZWNheURpcnR5ID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHBvaW50TGlnaHQuZGVjYXksIG9mZnNldCArIDcpOyAvLyBieXRlT2Zmc2V0PTEyO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1Qb2ludExpZ2h0U2hhZG93cyBleHRlbmRzIFVuaWZvcm08UG9pbnRMaWdodD4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xyXG5cdHN0YXRpYyB1bmlmb3JtU2l6ZSA9IDEyMjtcclxuXHRsaWdodHM6IEFycmF5PFBvaW50TGlnaHQ+O1xyXG5cdC8vIGNiOiBGdW5jdGlvbjtcclxuXHRwcml2YXRlIF9uZWFyVmFsdWU6IG51bWJlcjtcclxuXHRwcml2YXRlIF9mYXJWYWx1ZTogbnVtYmVyO1xyXG5cdHByaXZhdGUgX3N1YkRhdGFTaXplOiBudW1iZXI7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyLFxyXG5cdFx0Y291bnQ/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgb2Zmc2V0KTtcclxuXHRcdGNvbnN0IGJ5dGVzUGVyRWxlbWVudCA9IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtcclxuXHRcdHRoaXMuX3N1YkRhdGFTaXplID0gVW5pZm9ybVBvaW50TGlnaHRTaGFkb3dzLnVuaWZvcm1TaXplO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IGNvdW50ICogYnl0ZXNQZXJFbGVtZW50ICogdGhpcy5fc3ViRGF0YVNpemU7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgdGhpcy5ieXRlU2l6ZSAvIDQpO1xyXG5cdFx0dGhpcy50eXBlID0gXCJwb2ludExpZ2h0U2hhZG93c1wiO1xyXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0gU2hhZGVyU3RhZ2UuRnJhZ21lbnQ7XHJcblx0XHR0aGlzLl9uZWFyVmFsdWUgPSBudWxsO1xyXG5cdFx0dGhpcy5fZmFyVmFsdWUgPSBudWxsO1xyXG5cdH1cclxuXHRzZXQoKSB7XHJcblx0XHR0aGlzLmxpZ2h0cyA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdHRoaXMubGlnaHRzLmZvckVhY2goKHBvaW50TGlnaHQsIGluZGV4KSA9PiB7XHJcblx0XHRcdHRoaXMuc2V0U3ViRGF0YShwb2ludExpZ2h0LCBpbmRleCk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiB0aGlzLmRpcnR5O1xyXG5cdH1cclxuXHRwcml2YXRlIHNldFN1YkRhdGEocG9pbnRMaWdodDogUG9pbnRMaWdodCwgaW5kZXg6IG51bWJlcikge1xyXG5cdFx0Y29uc3Qgb2Zmc2V0ID0gaW5kZXggKiB0aGlzLl9zdWJEYXRhU2l6ZTtcclxuXHJcblx0XHRpZiAocG9pbnRMaWdodC5zaGFkb3cudnBNYXRyaXhBcnJheURpcnR5KSB7XHJcblx0XHRcdHBvaW50TGlnaHQuc2hhZG93LnZwTWF0cml4QXJyYXlEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHRjb25zdCB2cE1hdHJpeEFycmF5ID0gcG9pbnRMaWdodC5zaGFkb3cuY2FtZXJhLnZwTWF0cml4QXJyYXk7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdnBNYXRyaXhBcnJheS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGNvbnN0IHZwTWF0cml4ID0gdnBNYXRyaXhBcnJheVtpXTtcclxuXHRcdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCB2cE1hdHJpeC50b0FycmF5KCksIG9mZnNldCArIDAgKyAxNiAqIGkpOyAvLyBieXRlT2Zmc2V0PTk4ICogNDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChwb2ludExpZ2h0LnNoYWRvdy52aWV3UG9ydERpcnR5KSB7XHJcblx0XHRcdHBvaW50TGlnaHQuc2hhZG93LnZpZXdQb3J0RGlydHkgPSBmYWxzZTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuXHRcdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KFxyXG5cdFx0XHRcdFx0dGhpcy5idWZmZXIsXHJcblx0XHRcdFx0XHRwb2ludExpZ2h0LnNoYWRvdy52aWV3cG9ydHNbaV0udG9BcnJheSgpLFxyXG5cdFx0XHRcdFx0b2Zmc2V0ICsgOTYgKyA0ICogaVxyXG5cdFx0XHRcdCk7IC8vIGJ5dGVPZmZzZXQ9MDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IG5lYXJWYWx1ZSA9IHBvaW50TGlnaHQuc2hhZG93LmNhbWVyYS5uZWFyO1xyXG5cdFx0aWYgKG5lYXJWYWx1ZSAhPSB0aGlzLl9uZWFyVmFsdWUpIHtcclxuXHRcdFx0dGhpcy5fbmVhclZhbHVlID0gbmVhclZhbHVlO1xyXG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCB0aGlzLl9uZWFyVmFsdWUsIG9mZnNldCArIDEyMCk7IC8vIGJ5dGVPZmZzZXQ9MDtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZhclZhbHVlID0gcG9pbnRMaWdodC5zaGFkb3cuY2FtZXJhLmZhcjtcclxuXHRcdGlmIChmYXJWYWx1ZSAhPSB0aGlzLl9mYXJWYWx1ZSkge1xyXG5cdFx0XHR0aGlzLl9mYXJWYWx1ZSA9IGZhclZhbHVlO1xyXG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCB0aGlzLl9mYXJWYWx1ZSwgb2Zmc2V0ICsgMTIxKTsgLy8gYnl0ZU9mZnNldD0xO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybURpcnRlY3RMaWdodHMgZXh0ZW5kcyBVbmlmb3JtPERpcmVjdGlvbmFsTGlnaHQ+IHtcclxuXHRzdGF0aWMgYWxpZ24gPSAxNjtcclxuXHRsaWdodHM6IEFycmF5PERpcmVjdGlvbmFsTGlnaHQ+O1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyLFxyXG5cdFx0Y291bnQ/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgb2Zmc2V0KTtcclxuXHRcdHRoaXMuY2IgPSBjYjtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSBjb3VudCAqIDMyO1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIHRoaXMuYnl0ZVNpemUgLyA0KTtcclxuXHRcdHRoaXMudHlwZSA9IFwiZGlydGVjdExpZ2h0c1wiO1xyXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0gU2hhZGVyU3RhZ2UuRnJhZ21lbnQ7XHJcblx0fVxyXG5cdHNldCgpIHtcclxuXHRcdHRoaXMubGlnaHRzID0gdGhpcy5nZXRWYWx1ZSgpO1xyXG5cdFx0dGhpcy5saWdodHMuZm9yRWFjaCgoZGlyZWN0aW9uYWxMaWdodCwgaW5kZXgpID0+IHtcclxuXHRcdFx0dGhpcy5zZXRTdWJEYXRhKGRpcmVjdGlvbmFsTGlnaHQsIGluZGV4KTtcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHRoaXMuZGlydHk7XHJcblx0fVxyXG5cdHByaXZhdGUgc2V0U3ViRGF0YShkaXJlY3Rpb25hbExpZ2h0OiBEaXJlY3Rpb25hbExpZ2h0LCBpbmRleDogbnVtYmVyKSB7XHJcblx0XHRjb25zdCBvZmZzZXQgPSBpbmRleCAqIDg7XHJcblx0XHRpZiAoZGlyZWN0aW9uYWxMaWdodC5kaXJ0ZWN0RGlydHkpIHtcclxuXHRcdFx0ZGlyZWN0aW9uYWxMaWdodC5kaXJ0ZWN0RGlydHkgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb25hbC50b0FycmF5KCksIG9mZnNldCArIDApOyAvLyBieXRlT2Zmc2V0PTE2O1xyXG5cdFx0fVxyXG5cdFx0aWYgKGRpcmVjdGlvbmFsTGlnaHQuY29sb3JEaXJ0eSkge1xyXG5cdFx0XHRkaXJlY3Rpb25hbExpZ2h0LmNvbG9yRGlydHkgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgZGlyZWN0aW9uYWxMaWdodC5jb2xvci50b0FycmF5KCksIG9mZnNldCArIDQpOyAvLyBieXRlT2Zmc2V0PTMyO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1EaXJ0ZWN0TGlnaHRTaGFkb3dzIGV4dGVuZHMgVW5pZm9ybTxEaXJlY3Rpb25hbExpZ2h0PiB7XHJcblx0c3RhdGljIGFsaWduID0gMTY7XHJcblx0c3RhdGljIHVuaWZvcm1TaXplID0gMTY7XHJcblx0bGlnaHRzOiBBcnJheTxEaXJlY3Rpb25hbExpZ2h0PjtcclxuXHRwcml2YXRlIF9zdWJEYXRhU2l6ZTogbnVtYmVyO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBGdW5jdGlvbiB8IG51bWJlciB8IE9iamVjdCxcclxuXHRcdG9mZnNldD86IG51bWJlcixcclxuXHRcdGNvdW50PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XHJcblx0XHRjb25zdCBieXRlc1BlckVsZW1lbnQgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7XHJcblx0XHR0aGlzLl9zdWJEYXRhU2l6ZSA9IFVuaWZvcm1EaXJ0ZWN0TGlnaHRTaGFkb3dzLnVuaWZvcm1TaXplO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IGNvdW50ICogYnl0ZXNQZXJFbGVtZW50ICogdGhpcy5fc3ViRGF0YVNpemU7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgdGhpcy5ieXRlU2l6ZSAvIDQpO1xyXG5cdFx0dGhpcy50eXBlID0gXCJkaXJ0ZWN0TGlnaHRTaGFkb3dzXCI7XHJcblx0XHR0aGlzLnZpc2liaWxpdHkgPSBTaGFkZXJTdGFnZS5GcmFnbWVudDtcclxuXHR9XHJcblx0c2V0KCkge1xyXG5cdFx0dGhpcy5saWdodHMgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHR0aGlzLmxpZ2h0cy5mb3JFYWNoKChkaXJlY3Rpb25hbExpZ2h0LCBpbmRleCkgPT4ge1xyXG5cdFx0XHR0aGlzLnNldFN1YkRhdGEoZGlyZWN0aW9uYWxMaWdodCwgaW5kZXgpO1xyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gdGhpcy5kaXJ0eTtcclxuXHR9XHJcblx0cHJpdmF0ZSBzZXRTdWJEYXRhKGRpcmVjdGlvbmFsTGlnaHQ6IERpcmVjdGlvbmFsTGlnaHQsIGluZGV4OiBudW1iZXIpIHtcclxuXHRcdGNvbnN0IG9mZnNldCA9IGluZGV4ICogdGhpcy5fc3ViRGF0YVNpemU7XHJcblx0XHRpZiAoZGlyZWN0aW9uYWxMaWdodC5zaGFkb3cudnBNYXRyaXhEaXJ0eSkge1xyXG5cdFx0XHRkaXJlY3Rpb25hbExpZ2h0LnNoYWRvdy52cE1hdHJpeERpcnR5ID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93LmNhbWVyYS52cE1hdHJpeC50b0FycmF5KCksIG9mZnNldCArIDApOyAvLyBieXRlT2Zmc2V0PTE2O1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5leHBvcnQgZW51bSBVbmlmb3JtRW51bSB7XHJcblx0RmxvYXQgPSAwLFxyXG5cdEZsb2F0VmVjMiA9IDEsXHJcblx0RmxvYXRWZWMzID0gMixcclxuXHRGbG9hdFZlYzQgPSAzLFxyXG5cdEZsb2F0QXJyYXkgPSA0LFxyXG5cdE1hdDIgPSA1LFxyXG5cdE1hdDMgPSA2LFxyXG5cdE1hdDQgPSA3LFxyXG5cdENvbG9yID0gOCxcclxuXHRNYXQ0QXJyYXkgPSA5LFxyXG5cdFBvaW50TGlnaHRzID0gMTAsXHJcblx0UG9pbnRMaWdodFNoYWRvd3MgPSAxMSxcclxuXHRTcG90TGlnaHRzID0gMTIsXHJcblx0U3BvdExpZ2h0U2hhZG93cyA9IDEzLFxyXG5cdERpcnRlY3RMaWdodHMgPSAxNCxcclxuXHREaXJ0ZWN0TGlnaHRTaGFkb3dzID0gMTUsXHJcblx0VmVjMkFycmF5ID0gMTYsXHJcblx0VmVjM0FycmF5ID0gMTcsXHJcblx0VmVjNEFycmF5ID0gMTgsXHJcblx0VW5pZm9ybVVpbnQgPSAxOVxyXG59XHJcbmZ1bmN0aW9uIHNldERhdGFUb1R5cGVBcnJheShidWZmZXIsIGRhdGEsIG9mZnNldCkge1xyXG5cdGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcblx0XHRkYXRhLmZvckVhY2goKHZhbHVlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRidWZmZXJbaW5kZXggKyBvZmZzZXRdID0gdmFsdWU7XHJcblx0XHR9KTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0YnVmZmVyW29mZnNldF0gPSBkYXRhO1xyXG5cdH1cclxuXHRyZXR1cm4gdHJ1ZTtcclxufVxyXG4iLCJpbXBvcnQgeyBCdWZmZXJVc2FnZSwgU2hhZGVyU3RhZ2UgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xyXG5pbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IEJ1ZmZlciBmcm9tIFwiLi9CdWZmZXJcIjtcclxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4vQ29udGV4dFwiO1xyXG5cclxuaW1wb3J0IHtcclxuXHRVbmlmb3JtLFxyXG5cdFVuaWZvcm1Db2xvcixcclxuXHRVbmlmb3JtRGlydGVjdExpZ2h0cyxcclxuXHRVbmlmb3JtRGlydGVjdExpZ2h0U2hhZG93cyxcclxuXHRVbmlmb3JtRmxvYXQsXHJcblx0VW5pZm9ybUZsb2F0QXJyYXksXHJcblx0VW5pZm9ybUZsb2F0VmVjMixcclxuXHRVbmlmb3JtRmxvYXRWZWMzLFxyXG5cdFVuaWZvcm1GbG9hdFZlYzQsXHJcblx0VW5pZm9ybU1hdDIsXHJcblx0VW5pZm9ybU1hdDMsXHJcblx0VW5pZm9ybU1hdDQsXHJcblx0VW5pZm9ybU1hdHJpeDRBcnJheSxcclxuXHRVbmlmb3JtUG9pbnRMaWdodHMsXHJcblx0VW5pZm9ybVBvaW50TGlnaHRTaGFkb3dzLFxyXG5cdFVuaWZvcm1TcG90TGlnaHRzLFxyXG5cdFVuaWZvcm1TcG90TGlnaHRTaGFkb3dzLFxyXG5cdFVuaWZvcm1VaW50LFxyXG5cdFVuaWZvcm1WZWMyQXJyYXksXHJcblx0VW5pZm9ybVZlYzNBcnJheSxcclxuXHRVbmlmb3JtVmVjNEFycmF5LFxyXG5cdFVuaWZvcm1FbnVtXHJcbn0gZnJvbSBcIi4vVW5pZm9ybXNcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVW5pZm9ybUJ1ZmZlciB7XHJcblx0cHVibGljIHR5cGU6IHN0cmluZztcclxuXHRwdWJsaWMgaGFzRHluYW1pY09mZnNldDogYm9vbGVhbjtcclxuXHRwdWJsaWMgbWluQmluZGluZ1NpemU6IG51bWJlcjtcclxuXHRwcml2YXRlIF91bmlmb3JtU3RydWN0OiBNYXA8c3RyaW5nLCBVbmlmb3JtPGFueT4+O1xyXG5cdHByaXZhdGUgX2J1ZmZlclNpemU6IG51bWJlcjtcclxuXHRwcml2YXRlIGxhYmVsOiBzdHJpbmc7XHJcblx0Ynl0ZU9mZnNldDogbnVtYmVyO1xyXG5cdHVuaWZvcm1EaXJ0eTogYm9vbGVhbjtcclxuXHRiaW5kaW5nOiBudW1iZXI7XHJcblx0dmlzaWJpbGl0eTogU2hhZGVyU3RhZ2U7XHJcblx0dXNhZ2U6IEJ1ZmZlclVzYWdlO1xyXG5cdGJ1ZmZlcjogQnVmZmVyO1xyXG5cdGRhdGFCdWZmZXI6IEZsb2F0MzJBcnJheTtcclxuXHRvZmZzZXQ6IG51bWJlcjtcclxuXHRtYXhPZmZzZXQ6IG51bWJlcjtcclxuXHRpc1VuaWZvcm1CdWZmZXI6IGJvb2xlYW47XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdHByaXZhdGUgc3RhdGljIFVuaWZvcm1UeXBlID0ge1xyXG5cdFx0W1VuaWZvcm1FbnVtLlVuaWZvcm1VaW50XTogVW5pZm9ybVVpbnQsXHJcblx0XHRbVW5pZm9ybUVudW0uRmxvYXRdOiBVbmlmb3JtRmxvYXQsXHJcblx0XHRbVW5pZm9ybUVudW0uRmxvYXRWZWMyXTogVW5pZm9ybUZsb2F0VmVjMixcclxuXHRcdFtVbmlmb3JtRW51bS5GbG9hdFZlYzNdOiBVbmlmb3JtRmxvYXRWZWMzLFxyXG5cdFx0W1VuaWZvcm1FbnVtLkZsb2F0VmVjNF06IFVuaWZvcm1GbG9hdFZlYzQsXHJcblx0XHRbVW5pZm9ybUVudW0uTWF0Ml06IFVuaWZvcm1NYXQyLFxyXG5cdFx0W1VuaWZvcm1FbnVtLk1hdDNdOiBVbmlmb3JtTWF0MyxcclxuXHRcdFtVbmlmb3JtRW51bS5NYXQ0XTogVW5pZm9ybU1hdDQsXHJcblx0XHRbVW5pZm9ybUVudW0uQ29sb3JdOiBVbmlmb3JtQ29sb3IsXHJcblx0XHRbVW5pZm9ybUVudW0uRmxvYXRBcnJheV06IFVuaWZvcm1GbG9hdEFycmF5LFxyXG5cdFx0W1VuaWZvcm1FbnVtLlZlYzJBcnJheV06IFVuaWZvcm1WZWMyQXJyYXksXHJcblx0XHRbVW5pZm9ybUVudW0uVmVjM0FycmF5XTogVW5pZm9ybVZlYzNBcnJheSxcclxuXHRcdFtVbmlmb3JtRW51bS5WZWM0QXJyYXldOiBVbmlmb3JtVmVjNEFycmF5LFxyXG5cdFx0W1VuaWZvcm1FbnVtLk1hdDRBcnJheV06IFVuaWZvcm1NYXRyaXg0QXJyYXksXHJcblx0XHRbVW5pZm9ybUVudW0uUG9pbnRMaWdodHNdOiBVbmlmb3JtUG9pbnRMaWdodHMsXHJcblx0XHRbVW5pZm9ybUVudW0uU3BvdExpZ2h0c106IFVuaWZvcm1TcG90TGlnaHRzLFxyXG5cdFx0W1VuaWZvcm1FbnVtLkRpcnRlY3RMaWdodHNdOiBVbmlmb3JtRGlydGVjdExpZ2h0cyxcclxuXHRcdFtVbmlmb3JtRW51bS5Qb2ludExpZ2h0U2hhZG93c106IFVuaWZvcm1Qb2ludExpZ2h0U2hhZG93cyxcclxuXHRcdFtVbmlmb3JtRW51bS5TcG90TGlnaHRTaGFkb3dzXTogVW5pZm9ybVNwb3RMaWdodFNoYWRvd3MsXHJcblx0XHRbVW5pZm9ybUVudW0uRGlydGVjdExpZ2h0U2hhZG93c106IFVuaWZvcm1EaXJ0ZWN0TGlnaHRTaGFkb3dzXHJcblx0fTtcclxuXHRjb25zdHJ1Y3RvcihvcHRpb25zOiBVbmlmb3JtQnVmZmVyVHlwZSkge1xyXG5cdFx0dGhpcy50eXBlID0gZGVmYXVsdFZhbHVlKG9wdGlvbnMudHlwZSwgXCJ1bmlmb3JtXCIpO1xyXG5cdFx0dGhpcy5sYWJlbCA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLmxhYmVsLCBcIlwiKTtcclxuXHRcdHRoaXMubmFtZSA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLmxhYmVsLCBcIlwiKTtcclxuXHRcdHRoaXMuaGFzRHluYW1pY09mZnNldCA9IG9wdGlvbnMuaGFzRHluYW1pY09mZnNldCA/PyBmYWxzZTtcclxuXHRcdHRoaXMubWluQmluZGluZ1NpemUgPSBvcHRpb25zLm1pbkJpbmRpbmdTaXplID8/IDA7XHJcblx0XHR0aGlzLmJpbmRpbmcgPSBvcHRpb25zLmJpbmRpbmcgPz8gMDtcclxuXHRcdHRoaXMudmlzaWJpbGl0eSA9IFNoYWRlclN0YWdlLkZyYWdtZW50IHwgU2hhZGVyU3RhZ2UuVmVydGV4O1xyXG5cdFx0dGhpcy51c2FnZSA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLnVzYWdlLCBCdWZmZXJVc2FnZS5Vbmlmb3JtIHwgQnVmZmVyVXNhZ2UuQ29weURzdCk7XHJcblx0XHR0aGlzLl91bmlmb3JtU3RydWN0ID0gbmV3IE1hcCgpO1xyXG5cdFx0dGhpcy51bmlmb3JtRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fYnVmZmVyU2l6ZSA9IG9wdGlvbnMuc2l6ZTtcclxuXHRcdHRoaXMub2Zmc2V0ID0gMDtcclxuXHRcdHRoaXMuZGF0YUJ1ZmZlciA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLmRhdGFCdWZmZXIsIG5ldyBGbG9hdDMyQXJyYXkoZGVmYXVsdFZhbHVlKHRoaXMuX2J1ZmZlclNpemUsIDQwMCkpKTtcclxuXHRcdHRoaXMuYnl0ZU9mZnNldCA9IDA7XHJcblx0XHR0aGlzLmlzVW5pZm9ybUJ1ZmZlciA9IHRydWU7XHJcblx0XHR0aGlzLm1heE9mZnNldCA9IG9wdGlvbnMubWF4T2Zmc2V0ID8/IDA7XHJcblx0fVxyXG5cdGdldCBsYXlvdXRUeXBlKCkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0dHlwZTogdGhpcy50eXBlLFxyXG5cdFx0XHRoYXNEeW5hbWljT2Zmc2V0OiB0aGlzLmhhc0R5bmFtaWNPZmZzZXQsXHJcblx0XHRcdG1pbkJpbmRpbmdTaXplOiB0aGlzLm1pbkJpbmRpbmdTaXplXHJcblx0XHR9O1xyXG5cdH1cclxuXHRnZXQgYnVmZmVyU2l6ZSgpIHtcclxuXHRcdHJldHVybiB0aGlzLnVuaWZvcm1zU2l6ZSAqIDQ7XHJcblx0fVxyXG5cdGdldCB1bmlmb3Jtc1NpemUoKSB7XHJcblx0XHQvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViL3dnc2wvI2FkZHJlc3Mtc3BhY2UtbGF5b3V0LWNvbnN0cmFpbnRzXHJcblx0XHRyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYnl0ZU9mZnNldCAvIDE2KSAqIDE2O1xyXG5cdH1cclxuXHRiaW5kKGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdHRoaXMuX3VuaWZvcm1TdHJ1Y3QuZm9yRWFjaCgodW5pZm9ybSkgPT4ge1xyXG5cdFx0XHRjb25zdCByZXN1bHQgPSB1bmlmb3JtLnNldCgpO1xyXG5cdFx0XHRpZiAodW5pZm9ybT8uZGlydHkgIT0gdW5kZWZpbmVkKSB1bmlmb3JtLmRpcnR5ID0gZmFsc2U7XHJcblx0XHRcdGlmIChyZXN1bHQgIT0gdW5kZWZpbmVkICYmIHRoaXMudW5pZm9ybURpcnR5ID09IGZhbHNlKSB0aGlzLnVuaWZvcm1EaXJ0eSA9IHJlc3VsdDtcclxuXHRcdH0pO1xyXG5cdFx0aWYgKHRoaXMudW5pZm9ybURpcnR5KSB7XHJcblx0XHRcdHRoaXMudW5pZm9ybURpcnR5ID0gZmFsc2U7XHJcblx0XHRcdGlmICghdGhpcy5idWZmZXIpXHJcblx0XHRcdFx0dGhpcy5idWZmZXIgPSBCdWZmZXIuY3JlYXRlVW5pZm9ybUJ1ZmZlcih0aGlzLmxhYmVsLCBjb250ZXh0LmRldmljZSwgdGhpcy5idWZmZXJTaXplLCB0aGlzLnVzYWdlKTtcclxuXHRcdFx0dGhpcy5idWZmZXIuc2V0U3ViRGF0YSgwLCB0aGlzLmRhdGFCdWZmZXIuc2xpY2UoMCwgZGVmYXVsdFZhbHVlKHRoaXM/LmJ1ZmZlclNpemUgLyA0LCB0aGlzLnVuaWZvcm1zU2l6ZSkpKTtcclxuXHRcdH1cclxuXHR9XHJcblx0cHVibGljIGdldFVuaWZvcm1CdWZmZXJTdHJ1Y3QoKSB7XHJcblx0XHRsZXQgdW5pZm9ybVN0cnVjdCA9IGBzdHJ1Y3QgTWF0ZXJpYWxVbmlmb3JtIHtcXG4gYDtcclxuXHRcdHRoaXMuX3VuaWZvcm1TdHJ1Y3QuZm9yRWFjaCgodW5pZm9ybSkgPT4ge1xyXG5cdFx0XHR1bmlmb3JtU3RydWN0ICs9IHRoaXMuY3JlYXRlVW5pZm9ybVN0cmluZyh1bmlmb3JtKTtcclxuXHRcdH0pO1xyXG5cdFx0dW5pZm9ybVN0cnVjdCArPSBgfVxcbmA7XHJcblx0XHRyZXR1cm4gdW5pZm9ybVN0cnVjdDtcclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVhdGVVbmlmb3JtU3RyaW5nKHVuaWZvcm0pIHtcclxuXHRcdGxldCByZXN1bHQgPSBgYDtcclxuXHRcdHN3aXRjaCAodW5pZm9ybS50eXBlKSB7XHJcblx0XHRcdGNhc2UgXCJ2ZWMxXCI6XHJcblx0XHRcdFx0cmVzdWx0ID0gYCR7dW5pZm9ybS5uYW1lfSA6ZjMyLFxcbmA7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgXCJ2ZWMyXCI6XHJcblx0XHRcdFx0cmVzdWx0ID0gYCR7dW5pZm9ybS5uYW1lfSA6dmVjMjxmMzI+LFxcbmA7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgXCJ2ZWMzXCI6XHJcblx0XHRcdFx0cmVzdWx0ID0gYCR7dW5pZm9ybS5uYW1lfSA6dmVjMzxmMzI+LFxcbmA7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgXCJ2ZWM0XCI6XHJcblx0XHRcdFx0cmVzdWx0ID0gYCR7dW5pZm9ybS5uYW1lfSA6dmVjNDxmMzI+LFxcbmA7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgXCJtYXQyXCI6XHJcblx0XHRcdFx0cmVzdWx0ID0gYCR7dW5pZm9ybS5uYW1lfSA6bWF0MngyPGYzMj4sXFxuYDtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSBcIm1hdDNcIjpcclxuXHRcdFx0XHRyZXN1bHQgPSBgJHt1bmlmb3JtLm5hbWV9IDptYXQzeDM8ZjMyPixcXG5gO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIFwibWF0NFwiOlxyXG5cdFx0XHRcdHJlc3VsdCA9IGAke3VuaWZvcm0ubmFtZX0gOm1hdDR4NDxmMzI+LFxcbmA7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHRjb250YWlucyhuYW1lOiBzdHJpbmcpOiBVbmlmb3JtPGFueT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuX3VuaWZvcm1TdHJ1Y3QuZ2V0KG5hbWUpO1xyXG5cdH1cclxuXHRyZXBsYWNlVW5pZm9ybVZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0KSB7XHJcblx0XHRjb25zdCB1bmlmb3JtID0gdGhpcy5fdW5pZm9ybVN0cnVjdC5nZXQobmFtZSk7XHJcblx0XHRpZiAoIXVuaWZvcm0pIHJldHVybjtcclxuXHRcdHVuaWZvcm0uY2IgPSB2YWx1ZTtcclxuXHR9XHJcblx0Ly8gdW5pZm9ybUJ1ZmZlci5zZXRWZWMzQXJyYXkoJ3Rlc3QnLCgpPT57cmV0dXJuIFtuZXcgVmVjdG9yMygxLDAsMCksbmV3IFZlY3RvcjMoMSwwLjgsMC41KV19LDIpO1xyXG5cdC8vIHVuaWZvcm1CdWZmZXIuc2V0RmxvYXRBcnJheSgndGVzdDEnLCgpPT57cmV0dXJuIFswLjUsMC41LDEuMF19LDMpO1xyXG5cdC8vIHVuaWZvcm1CdWZmZXIuc2V0VmVjNEFycmF5KCd0ZXN0NCcsKCk9PntyZXR1cm4gW25ldyBWZWN0b3I0KDAuNSwwLjYsMC4yLDEuMCksbmV3IFZlY3RvcjQoMC41LDAuOCwwLjgsMS4wKV19LDIpO1xyXG5cdC8vIHVuaWZvcm1CdWZmZXIuc2V0VmVjMkFycmF5KCd0ZXN0MicsKCk9PntyZXR1cm4gW25ldyBWZWN0b3IyKDAuNSwwLjYpLG5ldyBWZWN0b3IyKDAuNSwwLjgsKV19LDIpO1xyXG5cdHNldFVuaWZvcm0obmFtZTogc3RyaW5nLCB2YWx1ZTogRnVuY3Rpb24gfCBudW1iZXIgfCBPYmplY3QsIHVuaWZvcm1UeXBlOiBVbmlmb3JtRW51bSwgY291bnQ/OiBudW1iZXIpIHtcclxuXHRcdGlmICh0aGlzLl91bmlmb3JtU3RydWN0LmdldChuYW1lKSkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgVHlwZVVuaWZvcm0gPSBVbmlmb3JtQnVmZmVyLlVuaWZvcm1UeXBlW3VuaWZvcm1UeXBlXTtcclxuXHRcdHRoaXMuYnl0ZU9mZnNldCArPSB0aGlzLmNoZWNrVW5pZm9ybU9mZnNldCh0aGlzLmJ5dGVPZmZzZXQsIFR5cGVVbmlmb3JtLmFsaWduKTtcclxuXHRcdGNvbnN0IHVuaWZvcm0gPVxyXG5cdFx0XHRjb3VudCAhPSB1bmRlZmluZWRcclxuXHRcdFx0XHQ/IG5ldyBUeXBlVW5pZm9ybShuYW1lLCB0aGlzLmRhdGFCdWZmZXIsIHRoaXMuYnl0ZU9mZnNldCwgdmFsdWUsIDAsIGNvdW50KVxyXG5cdFx0XHRcdDogbmV3IFR5cGVVbmlmb3JtKG5hbWUsIHRoaXMuZGF0YUJ1ZmZlciwgdGhpcy5ieXRlT2Zmc2V0LCB2YWx1ZSk7XHJcblx0XHR0aGlzLl91bmlmb3JtU3RydWN0LnNldChuYW1lLCB1bmlmb3JtKTtcclxuXHRcdHRoaXMuYnl0ZU9mZnNldCArPSB1bmlmb3JtLmJ5dGVTaXplO1xyXG5cdH1cclxuXHRwcml2YXRlIGNoZWNrVW5pZm9ybU9mZnNldChieXRlU2l6ZTogbnVtYmVyLCBBbGlnbjogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdC8vIGZyb20gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi93Z3NsLyNhZGRyZXNzLXNwYWNlLWxheW91dC1jb25zdHJhaW50c1xyXG5cdFx0Ly8gcmV0dXJuIHRoaXMuaGFzRHluYW1pY09mZnNldFxyXG5cdFx0Ly8gXHQ/IE1hdGguY2VpbChieXRlU2l6ZSAvIDI1NikgKiAyNTYgLSBieXRlU2l6ZVxyXG5cdFx0Ly8gXHQ6IE1hdGguY2VpbChieXRlU2l6ZSAvIEFsaWduKSAqIEFsaWduIC0gYnl0ZVNpemU7XHJcblx0XHRyZXR1cm4gTWF0aC5jZWlsKGJ5dGVTaXplIC8gQWxpZ24pICogQWxpZ24gLSBieXRlU2l6ZTtcclxuXHR9XHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXM/LmJ1ZmZlcj8uZGVzdHJveSgpO1xyXG5cdH1cclxufVxyXG50eXBlIFVuaWZvcm1CdWZmZXJUeXBlID0ge1xyXG5cdGxhYmVsOiBzdHJpbmc7XHJcblx0dHlwZT86IHN0cmluZztcclxuXHR1c2FnZT86IEJ1ZmZlclVzYWdlO1xyXG5cdHNpemU/OiBudW1iZXI7XHJcblx0ZGF0YUJ1ZmZlcj86IEZsb2F0MzJBcnJheTtcclxuXHRiaW5kaW5nPzogbnVtYmVyO1xyXG5cdGhhc0R5bmFtaWNPZmZzZXQ/OiBib29sZWFuO1xyXG5cdG1pbkJpbmRpbmdTaXplPzogbnVtYmVyO1xyXG5cdG1heE9mZnNldD86IG51bWJlcjtcclxufTtcclxuIiwiY29uc3QgcHJlcHJvY2Vzc29yU3ltYm9scyA9IC8jKFteXFxzXSopKFxccyopL2dtO1xuLy8gVGVtcGxhdGUgbGl0ZXJhbCB0YWcgdGhhdCBoYW5kbGVzIHNpbXBsZSBwcmVwcm9jZXNzb3Igc3ltYm9scyBmb3IgV0dTTFxuLy8gc2hhZGVycy4gU3VwcG9ydHMgI2lmL2VsaWYvZWxzZS9lbmRpZiBzdGF0ZW1lbnRzLlxuZXhwb3J0IGZ1bmN0aW9uIHdnc2xQYXJzZURlZmluZXMoc3RyaW5ncywgLi4udmFsdWVzKSB7XG5cdGNvbnN0IHN0YXRlU3RhY2sgPSBbXTtcblx0bGV0IHN0YXRlID0geyBmcmFnOiBcIlwiLCBlbHNlSXNWYWxpZDogZmFsc2UsIGV4cHJlc3Npb246IHRydWUgfTtcblx0bGV0IGRlcHRoID0gMTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ3MubGVuZ3RoOyArK2kpIHtcblx0XHRjb25zdCBmcmFnID0gc3RyaW5nc1tpXTtcblx0XHRjb25zdCBtYXRjaGVkU3ltYm9scyA9IGZyYWcubWF0Y2hBbGwocHJlcHJvY2Vzc29yU3ltYm9scyk7XG5cblx0XHRsZXQgbGFzdEluZGV4ID0gMDtcblx0XHRsZXQgdmFsdWVDb25zdW1lZCA9IGZhbHNlO1xuXG5cdFx0Zm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVkU3ltYm9scykge1xuXHRcdFx0c3RhdGUuZnJhZyArPSBmcmFnLnN1YnN0cmluZyhsYXN0SW5kZXgsIG1hdGNoLmluZGV4KTtcblxuXHRcdFx0c3dpdGNoIChtYXRjaFsxXSkge1xuXHRcdFx0XHRjYXNlIFwiaWZcIjpcblx0XHRcdFx0XHRpZiAobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggIT0gZnJhZy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIiNpZiBtdXN0IGJlIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgdGVtcGxhdGUgZXhwcmVzc2lvbiAoaWU6ICR7dmFsdWV9KVwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dmFsdWVDb25zdW1lZCA9IHRydWU7XG5cdFx0XHRcdFx0c3RhdGVTdGFjay5wdXNoKHN0YXRlKTtcblx0XHRcdFx0XHRkZXB0aCsrO1xuXHRcdFx0XHRcdHN0YXRlID0geyBmcmFnOiBcIlwiLCBlbHNlSXNWYWxpZDogdHJ1ZSwgZXhwcmVzc2lvbjogISF2YWx1ZXNbaV0gfTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImVsaWZcIjpcblx0XHRcdFx0XHRpZiAobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggIT0gZnJhZy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIiNlbGlmIG11c3QgYmUgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSB0ZW1wbGF0ZSBleHByZXNzaW9uIChpZTogJHt2YWx1ZX0pXCIpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIXN0YXRlLmVsc2VJc1ZhbGlkKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCIjZWxpZiBub3QgcHJlY2VlZGVkIGJ5IGFuICNpZiBvciAjZWxpZlwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dmFsdWVDb25zdW1lZCA9IHRydWU7XG5cdFx0XHRcdFx0aWYgKHN0YXRlLmV4cHJlc3Npb24gJiYgc3RhdGVTdGFjay5sZW5ndGggIT0gZGVwdGgpIHtcblx0XHRcdFx0XHRcdHN0YXRlU3RhY2sucHVzaChzdGF0ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHN0YXRlID0geyBmcmFnOiBcIlwiLCBlbHNlSXNWYWxpZDogdHJ1ZSwgZXhwcmVzc2lvbjogISF2YWx1ZXNbaV0gfTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImVsc2VcIjpcblx0XHRcdFx0XHRpZiAoIXN0YXRlLmVsc2VJc1ZhbGlkKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCIjZWxzZSBub3QgcHJlY2VlZGVkIGJ5IGFuICNpZiBvciAjZWxpZlwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHN0YXRlLmV4cHJlc3Npb24gJiYgc3RhdGVTdGFjay5sZW5ndGggIT0gZGVwdGgpIHtcblx0XHRcdFx0XHRcdHN0YXRlU3RhY2sucHVzaChzdGF0ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHN0YXRlID0geyBmcmFnOiBtYXRjaFsyXSwgZWxzZUlzVmFsaWQ6IGZhbHNlLCBleHByZXNzaW9uOiB0cnVlIH07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJlbmRpZlwiOlxuXHRcdFx0XHRcdGlmICghc3RhdGVTdGFjay5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIiNlbmRpZiBub3QgcHJlY2VlZGVkIGJ5IGFuICNpZlwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgYnJhbmNoU3RhdGUgPSBzdGF0ZVN0YWNrLmxlbmd0aCA9PSBkZXB0aCA/IHN0YXRlU3RhY2sucG9wKCkgOiBzdGF0ZTtcblx0XHRcdFx0XHRzdGF0ZSA9IHN0YXRlU3RhY2sucG9wKCk7XG5cdFx0XHRcdFx0ZGVwdGgtLTtcblx0XHRcdFx0XHRpZiAoYnJhbmNoU3RhdGUuZXhwcmVzc2lvbikge1xuXHRcdFx0XHRcdFx0c3RhdGUuZnJhZyArPSBicmFuY2hTdGF0ZS5mcmFnO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzdGF0ZS5mcmFnICs9IG1hdGNoWzJdO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdC8vIFVua25vd24gcHJlcHJvY2Vzc29yIHN5bWJvbC4gRW1pdCBpdCBiYWNrIGludG8gdGhlIG91dHB1dCBmcmFnIHVuY2hhbmdlZC5cblx0XHRcdFx0XHRzdGF0ZS5mcmFnICs9IG1hdGNoWzBdO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRsYXN0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgZnJhZyBkaWRuJ3QgZW5kIG9uIG9uZSBvZiB0aGUgcHJlcHJvY2Vzc29yIHN5bWJvbHMgYXBwZW5kIHRoZSByZXN0IG9mIGl0IGhlcmUuXG5cdFx0aWYgKGxhc3RJbmRleCAhPSBmcmFnLmxlbmd0aCkge1xuXHRcdFx0c3RhdGUuZnJhZyArPSBmcmFnLnN1YnN0cmluZyhsYXN0SW5kZXgsIGZyYWcubGVuZ3RoKTtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgbmV4dCB2YWx1ZSB3YXNuJ3QgY29uc3VtZWQgYnkgdGhlIHByZXByb2Nlc3NvciBzeW1ib2wsIGFwcGVuZCBpdCBoZXJlLlxuXHRcdGlmICghdmFsdWVDb25zdW1lZCAmJiB2YWx1ZXMubGVuZ3RoID4gaSkge1xuXHRcdFx0c3RhdGUuZnJhZyArPSB2YWx1ZXNbaV07XG5cdFx0fVxuXHR9XG5cblx0aWYgKHN0YXRlU3RhY2subGVuZ3RoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiTWlzbWF0Y2hlZCAjaWYvI2VuZGlmIGNvdW50XCIpO1xuXHR9XG5cblx0cmV0dXJuIHN0YXRlLmZyYWc7XG59XG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIEZyYWdJbnB1dChkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgIHN0cnVjdCBGcmFnSW5wdXQge1xuICAgICAgQGJ1aWx0aW4oZnJvbnRfZmFjaW5nKSBmcm9udEZhY2luZzogYm9vbCxcbiAgICAgIEBsb2NhdGlvbigwKSB3b3JsZFBvczp2ZWMzPGYzMj4sXG4gICAgICBAbG9jYXRpb24oMSkgbm9ybWFsOnZlYzM8ZjMyPixcbiAgICAgICNpZiAke2RlZmluZXMuSEFTX1VWfVxuICAgICAgICAgIEBsb2NhdGlvbigyKSB1djp2ZWMyPGYzMj5cbiAgICAgICNlbmRpZlxuICB9IFxuICBgO1xufVxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBWZXJ0ZXhJbnB1dChkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgICAgICBzdHJ1Y3QgVmVydGV4SW5wdXQge1xuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5wb3NpdGlvbkxvY2F0aW9ufSkgcG9zaXRpb246IHZlYzM8ZjMyPiwgICAgICAgXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLm5vcm1hbExvY2F0aW9ufSkgbm9ybWFsOiB2ZWMzPGYzMj4sXG4gICAgICAgICAgICAjaWYke2RlZmluZXMuSEFTX0NPTE9SfSBcbiAgICAgICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLmNvbG9yTG9jYXRpb259KSBjb2xvcjogdmVjMzxmMzI+LFxuICAgICAgICAgICAgI2VuZGlmXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLkhBU19VVn1cbiAgICAgICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnV2TG9jYXRpb259KSB1djogdmVjMjxmMzI+LFxuICAgICAgICAgICAgI2VuZGlmXG4gICAgICAgICAgICAjaWYke2RlZmluZXMuSEFTX1NLSU59IFxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMuam9pbnQwTG9jYXRpb259KSBqb2ludDA6dmVjNDxmMzI+LFxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMud2VpZ2h0MExvY2F0aW9ufSkgd2VpZ2h0MDp2ZWM0PGYzMj4sXG4gICAgICAgICAgICAjZW5kaWZcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lOU1RBTkNFfVxuICAgICAgICAgICAgICAgIEBidWlsdGluKGluc3RhbmNlX2luZGV4KSBpbnN0YW5jZUlkeCA6IHUzMlxuICAgICAgICAgICAgI2VuZGlmXG4gICAgICAgIH1cbiAgIGA7XG59XG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIFZlcnRleE91dHB1dChkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgIHN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xuICAgICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb246dmVjNDxmMzI+LFxuICAgICAgICBAbG9jYXRpb24oMCkgd29ybGRQb3M6dmVjMzxmMzI+LFxuICAgICAgICBAbG9jYXRpb24oMSkgbm9ybWFsOnZlYzM8ZjMyPixcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5IQVNfVVZ9XG4gICAgICAgICAgICBAbG9jYXRpb24oMikgdXY6dmVjMjxmMzI+XG4gICAgICAgICNlbmRpZlxuICAgIH0gXG4gICAgYDtcbn1cbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gU3lzdGVtVW5pZm9ybShkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgICAgc3RydWN0IFN5c3RlbVVuaWZvcm0ge1xuICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgICAgIHZpZXdNYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgICAgIGludmVyc2VWaWV3TWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgICAgICAgICBjYW1lcmFQb3NpdGlvbjogdmVjMzxmMzI+LFxuICAgICAgfTsgXG4gIGA7XG59XG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZW52aXJvbm1lbnQoZGVmaW5lcykge1xyXG4gIHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAjaWYgJHtkZWZpbmVzLkVOVlRFWFRVUkVfVFlQRV9DVUJFX1VWfVxyXG4gICAgICAgIGNvbnN0IGN1YmVVVl9taW5NaXBMZXZlbDpmMzI9IDQuMDtcclxuICAgICAgICBjb25zdCBjdWJlVVZfbWluVGlsZVNpemU6ZjMyPSAxNi4wO1xyXG4gICAgICAgIGNvbnN0IENVQkVVVl9NQVhfTUlQOmYzMj02LjA7XHJcbiAgICAgICAgY29uc3QgQ1VCRVVWX1RFWEVMX1dJRFRIOmYzMj0xLjAvMjU2LjA7XHJcbiAgICAgICAgY29uc3QgQ1VCRVVWX1RFWEVMX0hFSUdIVDpmMzI9MS4wLzI1Ni4wO1xyXG4gICAgICAgIGZuIGdldEZhY2UoZGlyZWN0aW9uOnZlYzM8ZjMyPiApLT5mMzIge1xyXG4gICAgICAgICAgICBsZXQgYWJzRGlyZWN0aW9uOnZlYzM8ZjMyPiA9IGFicyggZGlyZWN0aW9uICk7XHJcbiAgICAgICAgICAgIHZhciBmYWNlOmYzMiA9IC0gMS4wO1xyXG4gICAgICAgICAgICBpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnogKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKXtcclxuICAgICAgICAgICAgICAgICAgICBmYWNlID1zZWxlY3QoMy4wLDAuMCxkaXJlY3Rpb24ueCA+IDAuMCk7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBmYWNlID1zZWxlY3QoNC4wLDEuMCxkaXJlY3Rpb24ueSA+IDAuMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApe1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2UgPXNlbGVjdCg1LjAsMi4wLGRpcmVjdGlvbi56ID4gMC4wKTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2UgPXNlbGVjdCg0LjAsMS4wLGRpcmVjdGlvbi55ID4gMC4wKTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIGdldFVWKCBkaXJlY3Rpb246dmVjMzxmMzI+LCBmYWNlOmYzMiApLT52ZWMyPGYzMj4ge1xyXG4gICAgICAgICAgICB2YXIgdXY6dmVjMjxmMzI+O1xyXG4gICAgICAgICAgICBpZiAoIGZhY2UgPT0gMC4wICkge1xyXG4gICAgICAgICAgICAgICAgdXYgPSB2ZWMyPGYzMj4oIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcclxuICAgICAgICAgICAgICAgIHV2ID0gdmVjMjxmMzI+KCAtIGRpcmVjdGlvbi54LCAtIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xyXG4gICAgICAgICAgICAgICAgdXYgPSB2ZWMyPGYzMj4oIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xyXG4gICAgICAgICAgICAgICAgdXYgPSB2ZWMyPGYzMj4oIC0gZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xyXG4gICAgICAgICAgICAgICAgdXYgPSB2ZWMyPGYzMj4oIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB1diA9IHZlYzI8ZjMyPiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gYmlsaW5lYXJDdWJlVVYoZW52VGV4dHVyZTp0ZXh0dXJlX2N1YmU8ZjMyPixiYXNlU2FtcGxlcjpzYW1wbGVyLGRpcmVjdGlvbjp2ZWMzPGYzMj4sIG1pcEludDpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgdmFyIGZhY2U6ZjMyID0gZ2V0RmFjZSggZGlyZWN0aW9uICk7XHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXJJbnQ6ZjMyID0gbWF4KCBjdWJlVVZfbWluTWlwTGV2ZWwgLSBtaXBJbnQsIDAuMCApO1xyXG4gICAgICAgICAgICBsZXQgdGVtcE1pcEludCA9IG1heCggbWlwSW50LCBjdWJlVVZfbWluTWlwTGV2ZWwgKTtcclxuICAgICAgICAgICAgbGV0IGZhY2VTaXplOmYzMiA9IGV4cDIoIHRlbXBNaXBJbnQgKTtcclxuICAgICAgICAgICAgdmFyIHV2OnZlYzI8ZjMyPiA9IGdldFVWKCBkaXJlY3Rpb24sIGZhY2UgKSAqICggZmFjZVNpemUgLSAyLjAgKSArIDEuMDtcclxuICAgICAgICAgICAgaWYgKCBmYWNlID4gMi4wICkge1xyXG4gICAgICAgICAgICAgICAgdXYueSArPSBmYWNlU2l6ZTtcclxuICAgICAgICAgICAgICAgIGZhY2UgLT0gMy4wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHV2LnggKz0gZmFjZSAqIGZhY2VTaXplO1xyXG4gICAgICAgICAgICB1di54ICs9IGZpbHRlckludCAqIDMuMCAqIGN1YmVVVl9taW5UaWxlU2l6ZTtcclxuICAgICAgICAgICAgdXYueSArPSA0LjAgKiAoIGV4cDIoIENVQkVVVl9NQVhfTUlQICkgLSBmYWNlU2l6ZSApO1xyXG4gICAgICAgICAgICB1di54ICo9IENVQkVVVl9URVhFTF9XSURUSDtcclxuICAgICAgICAgICAgdXYueSAqPSBDVUJFVVZfVEVYRUxfSEVJR0hUO1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZVNhbXBsZShlbnZUZXh0dXJlLGJhc2VTYW1wbGVyLGRpcmVjdGlvbikucmdiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjdWJlVVZfcjA6ZjMyPSAxLjA7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX3YwOmYzMj0gMC4zMzk7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX20wOmYzMj0gLSAyLjA7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX3IxOmYzMj0gMC44O1xyXG4gICAgICAgIGNvbnN0IGN1YmVVVl92MTpmMzI9IDAuMjc2O1xyXG4gICAgICAgIGNvbnN0IGN1YmVVVl9tMTpmMzI9IC0gMS4wO1xyXG4gICAgICAgIGNvbnN0IGN1YmVVVl9yNDpmMzI9IDAuNDtcclxuICAgICAgICBjb25zdCBjdWJlVVZfdjQ6ZjMyPSAwLjA0NjtcclxuICAgICAgICBjb25zdCBjdWJlVVZfbTQ6ZjMyPSAyLjA7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX3I1OmYzMj0gMC4zMDU7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX3Y1OmYzMj0gMC4wMTY7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX201OmYzMj0gMy4wO1xyXG4gICAgICAgIGNvbnN0IGN1YmVVVl9yNjpmMzI9IDAuMjE7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX3Y2OmYzMj0gMC4wMDM4O1xyXG4gICAgICAgIGNvbnN0IGN1YmVVVl9tNjpmMzI9IDQuMDtcclxuICAgICAgICBmbiByb3VnaG5lc3NUb01pcCggcm91Z2huZXNzOmYzMiktPmYzMiB7XHJcbiAgICAgICAgICAgIHZhciBtaXA6ZjMyID0gMC4wO1xyXG4gICAgICAgICAgICBpZiAoIHJvdWdobmVzcyA+PSBjdWJlVVZfcjEgKSB7XHJcbiAgICAgICAgICAgICAgICBtaXAgPSAoIGN1YmVVVl9yMCAtIHJvdWdobmVzcyApICogKCBjdWJlVVZfbTEgLSBjdWJlVVZfbTAgKSAvICggY3ViZVVWX3IwIC0gY3ViZVVWX3IxICkgKyBjdWJlVVZfbTA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIHJvdWdobmVzcyA+PSBjdWJlVVZfcjQgKSB7XHJcbiAgICAgICAgICAgICAgICBtaXAgPSAoIGN1YmVVVl9yMSAtIHJvdWdobmVzcyApICogKCBjdWJlVVZfbTQgLSBjdWJlVVZfbTEgKSAvICggY3ViZVVWX3IxIC0gY3ViZVVWX3I0ICkgKyBjdWJlVVZfbTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIHJvdWdobmVzcyA+PSBjdWJlVVZfcjUgKSB7XHJcbiAgICAgICAgICAgICAgICBtaXAgPSAoIGN1YmVVVl9yNCAtIHJvdWdobmVzcyApICogKCBjdWJlVVZfbTUgLSBjdWJlVVZfbTQgKSAvICggY3ViZVVWX3I0IC0gY3ViZVVWX3I1ICkgKyBjdWJlVVZfbTQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIHJvdWdobmVzcyA+PSBjdWJlVVZfcjYgKSB7XHJcbiAgICAgICAgICAgICAgICBtaXAgPSAoIGN1YmVVVl9yNSAtIHJvdWdobmVzcyApICogKCBjdWJlVVZfbTYgLSBjdWJlVVZfbTUgKSAvICggY3ViZVVWX3I1IC0gY3ViZVVWX3I2ICkgKyBjdWJlVVZfbTU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtaXAgPSAtIDIuMCAqIGxvZzIoIDEuMTYgKiByb3VnaG5lc3MgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbWlwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmbiB0ZXh0dXJlQ3ViZVVWKGVudlRleHR1cmU6dGV4dHVyZV9jdWJlPGYzMj4sIGJhc2VTYW1wbGVyOnNhbXBsZXIsc2FtcGxlRGlyOnZlYzM8ZjMyPixyb3VnaG5lc3M6ZjMyICktPnZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBjdWJlVVZfbTAsIENVQkVVVl9NQVhfTUlQICk7XHJcbiAgICAgICAgICAgIGxldCBtaXBGID0gZnJhY3QoIG1pcCApO1xyXG4gICAgICAgICAgICBsZXQgbWlwSW50ID0gZmxvb3IoIG1pcCApO1xyXG4gICAgICAgICAgICBsZXQgY29sb3IwOnZlYzM8ZjMyPiA9IGJpbGluZWFyQ3ViZVVWKCBlbnZUZXh0dXJlLGJhc2VTYW1wbGVyLHNhbXBsZURpciwgbWlwSW50ICk7XHJcbiAgICAgICAgICAgIGlmICggbWlwRiA9PSAwLjAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmVjNDxmMzI+KGNvbG9yMCwgMS4wICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29sb3IxOnZlYzM8ZjMyPiA9IGJpbGluZWFyQ3ViZVVWKCBlbnZUZXh0dXJlLGJhc2VTYW1wbGVyLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQ8ZjMyPihtaXgoIGNvbG9yMCwgY29sb3IxLCBtaXBGICksIDEuMCApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAjZW5kaWZcclxuICAgI2lmICR7ZGVmaW5lcy5VU0VfRU5WVEVYVFVSRX1cclxuICAgICAgICBmbiBnZXRJQkxJcnJhZGlhbmNlKCBub3JtYWw6dmVjMzxmMzI+LGJhc2VTYW1wbGVyOnNhbXBsZXIsdmlld01hdHJpeDptYXQ0eDQ8ZjMyPiktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuRU5WVEVYVFVSRV9UWVBFX0NVQkVfVVZ9XHJcbiAgICAgICAgICAgICAgICBsZXQgd29ybGROb3JtYWw6dmVjMzxmMzI+ID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZW52VGV4dHVyZUNvbG9yOnZlYzQ8ZjMyPiA9IHRleHR1cmVDdWJlVVYoIGVudlRleHR1cmUsYmFzZVNhbXBsZXIsIHdvcmxkTm9ybWFsLCAxLjAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQSSAqIGVudlRleHR1cmVDb2xvci5yZ2IgKiBtYXRlcmlhbFVuaWZvcm0uZW52VGV4dHVyZUludGVuc2l0eTtcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIHJldHVybiB2ZWMzPGYzMj4oIDAuMCApO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gZ2V0SUJMUmFkaWFuY2UoIHZpZXdEaXI6dmVjMzxmMzI+LGJhc2VTYW1wbGVyOnNhbXBsZXIsdmlld01hdHJpeDptYXQ0eDQ8ZjMyPixub3JtYWw6dmVjMzxmMzI+LCByb3VnaG5lc3M6ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuRU5WVEVYVFVSRV9UWVBFX0NVQkVfVVZ9XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVmbGVjdFZlYzp2ZWMzPGYzMj4gPSByZWZsZWN0KCAtIHZpZXdEaXIsIG5vcm1hbCApO1xyXG4gICAgICAgICAgICAgICAgcmVmbGVjdFZlYyA9IG5vcm1hbGl6ZSggbWl4KCByZWZsZWN0VmVjLCBub3JtYWwsIHJvdWdobmVzcyAqIHJvdWdobmVzcykgKTtcclxuICAgICAgICAgICAgICAgIHJlZmxlY3RWZWMgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCByZWZsZWN0VmVjLCB2aWV3TWF0cml4ICk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZW52VGV4dHVyZUNvbG9yOnZlYzQ8ZjMyPiA9IHRleHR1cmVDdWJlVVYoIGVudlRleHR1cmUsYmFzZVNhbXBsZXIsIHJlZmxlY3RWZWMsIHJvdWdobmVzcyApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudlRleHR1cmVDb2xvci5yZ2IgKiBtYXRlcmlhbFVuaWZvcm0uZW52VGV4dHVyZUludGVuc2l0eTtcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIHJldHVybiB2ZWMzPGYzMj4oIDAuMCApO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcbiAgIGA7XHJcbn1cclxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YW5jZVZlcnRIZWFkZXIoZGVmaW5lcykge1xuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcbiAgICNpZiAke2RlZmluZXMuVVNFX0lOU1RBTkNFfVxuICAgICAgc3RydWN0IEluc3RhbmNlc1VuaWZvcm0ge1xuICAgICAgICAgaW5zdGFuY2VNYXRyaXhzOiAgYXJyYXk8bWF0NHg0PGYzMj4sICR7ZGVmaW5lcy5pbnN0YW5jZUNvdW50fT4sXG4gICAgICB9O1xuICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5pbnN0YW5jZU1hdHJpeHNCdWZmZXJCaW5kaW5nfSkgdmFyPHN0b3JhZ2UsIHJlYWQ+IGluc3RhbmNlc1VuaWZvcm06IEluc3RhbmNlc1VuaWZvcm07XG4gICAgI2VuZGlmXG4gICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbmNlVmVydE1haW4oZGVmaW5lcykge1xuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcbiAgICAgICNpZiAke2RlZmluZXMuVVNFX0lOU1RBTkNFfVxuICAgICAgICAgbW9kZWxNYXRyaXg9aW5zdGFuY2VzVW5pZm9ybS5pbnN0YW5jZU1hdHJpeHNbaW5wdXQuaW5zdGFuY2VJZHhdO1xuICAgICAgI2VuZGlmXG4gICBgO1xufVxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpZ2h0KGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2AgXHJcbiAgICBzdHJ1Y3QgUmVmbGVjdGVkTGlnaHQge1xyXG4gICAgICAgIGFtYmllbnQ6IHZlYzM8ZjMyPixcclxuICAgICAgICBkaXJlY3REaWZmdXNlOnZlYzM8ZjMyPixcclxuICAgICAgICBkaXJlY3RTcGVjdWxhcjp2ZWMzPGYzMj4sXHJcbiAgICAgICAgaW5kaXJlY3REaWZmdXNlOnZlYzM8ZjMyPixcclxuICAgICAgICBpbmRpcmVjdFNwZWN1bGFyOnZlYzM8ZjMyPixcclxuICAgICAgICB0ZXN0Q29sb3I6IHZlYzM8ZjMyPixcclxuICAgIH07IFxyXG4gICAgc3RydWN0IEluY2lkZW50TGlnaHQge1xyXG4gICAgICAgIGNvbG9yOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgZGlyZWN0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgdmlzaWJsZTogYm9vbCxcclxuICAgIH07XHJcbiAgICBzdHJ1Y3QgR2VvbWV0cnkge1xyXG4gICAgICAgIHBvc2l0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgbm9ybWFsOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgdmlld0RpcjogdmVjMzxmMzI+LFxyXG4gICAgICAgIGRvdE5WOmYzMixcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVR9XHJcbiAgICAgICAgICAgIHZlYzMgY2xlYXJjb2F0Tm9ybWFsO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgfTtcclxuXHJcbiAgICAjaWYgJHtkZWZpbmVzLnNwb3RMaWdodHNDb3VudCA+IDB9XHJcbiAgICAgICAgc3RydWN0IFNwb3RMaWdodCB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgIGRpc3RhbmNlOiBmMzIsXHJcbiAgICAgICAgICAgIGRpcmVjdGlvbjogdmVjMzxmMzI+LFxyXG4gICAgICAgICAgICBjb25lQ29zOiBmMzIsXHJcbiAgICAgICAgICAgIGNvbG9yOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgIHBlbnVtYnJhQ29zOiBmMzIsXHJcbiAgICAgICAgICAgIGRlY2F5OiBmMzIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmbiBnZXRTcG90TGlnaHRJbmZvKHNwb3RMaWdodDpTcG90TGlnaHQsd29ybGRQb3M6dmVjMzxmMzI+LHNoaW5pbmVzczpmMzIsTjp2ZWMzPGYzMj4sVjp2ZWMzPGYzMj4pLT5SZWZsZWN0ZWRMaWdodHtcclxuICAgICAgICAgICAgICAgIHZhciBkaXJlY3Rpb246dmVjMzxmMzI+ID0gc3BvdExpZ2h0LnBvc2l0aW9uIC0gd29ybGRQb3M7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGlnaHRDb2xvcjpSZWZsZWN0ZWRMaWdodDtcclxuICAgICAgICAgICAgICAgIGxldCBsaWdodERpc3RhbmNlOmYzMiA9IGxlbmd0aChkaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gbm9ybWFsaXplKGRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBsZXQgYW5nbGVDb3M6ZjMyID0gZG90KCBkaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTtcclxuICAgICAgICAgICAgICAgIGxldCBkZWNheTpmMzIgPSBjbGFtcCgxLjAgLSBwb3cobGlnaHREaXN0YW5jZS9zcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSksIDAuMCwgMS4wKTtcclxuICAgICAgICAgICAgICAgIGxldCBzcG90RWZmZWN0OmYzMiA9IHNtb290aHN0ZXAoIHNwb3RMaWdodC5wZW51bWJyYUNvcywgc3BvdExpZ2h0LmNvbmVDb3MsIGFuZ2xlQ29zICk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGVjYXlUb3RhbDpmMzIgPSBkZWNheSAqIHNwb3RFZmZlY3Q7XHJcbiAgICAgICAgICAgICAgICBsZXQgZDpmMzIgPSBtYXgoIGRvdCggTiwgZGlyZWN0aW9uICksIDAuMCApICAqIGRlY2F5VG90YWw7XHJcbiAgICAgICAgICAgICAgICBsaWdodENvbG9yLmRpcmVjdERpZmZ1c2U9IHNwb3RMaWdodC5jb2xvciAqIGQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGFsZkRpcjp2ZWMzPGYzMj4gPSBub3JtYWxpemUoIFYgKyBkaXJlY3Rpb24gKTtcclxuICAgICAgICAgICAgICAgIGxldCBzOmYzMiA9IHBvdyggY2xhbXAoIGRvdCggTiwgaGFsZkRpciApLCAwLjAsIDEuMCApLCBzaGluaW5lc3MgKSAqIGRlY2F5VG90YWw7XHJcbiAgICAgICAgICAgICAgICBsaWdodENvbG9yLmRpcmVjdFNwZWN1bGFyPSBzcG90TGlnaHQuY29sb3IgKiBzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpZ2h0Q29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIGdldFNwb3RMaWdodEluY2lkZW50TGlnaHQoc3BvdExpZ2h0OlNwb3RMaWdodCwgZ2VvbWV0cnk6R2VvbWV0cnkpLT5JbmNpZGVudExpZ2h0IHtcclxuICAgICAgICAgICAgdmFyIGluY2lkZW50TGlnaHQ6SW5jaWRlbnRMaWdodDtcclxuICAgICAgICAgICAgbGV0IGxWZWN0b3I6dmVjMzxmMzI+ID0gc3BvdExpZ2h0LnBvc2l0aW9uIC0gZ2VvbWV0cnkucG9zaXRpb247XHJcbiAgICAgICAgICAgIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uID0gbm9ybWFsaXplKCBsVmVjdG9yICk7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IGxpZ2h0RGlzdGFuY2U6ZjMyID0gbGVuZ3RoKCBsVmVjdG9yICk7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZUNvczpmMzIgPSBkb3QoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHNwb3RFZmZlY3Q6ZjMyID0gc21vb3Roc3RlcCggc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBzcG90TGlnaHQuY29uZUNvcywgYW5nbGVDb3MgKTtcclxuICAgICAgICAgICAgbGV0IGRlY2F5RWZmZWN0OmYzMiA9IGNsYW1wKDEuMCAtIHBvdyhsaWdodERpc3RhbmNlL3Nwb3RMaWdodC5kaXN0YW5jZSwgNC4wKSwgMC4wLCAxLjApO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGluY2lkZW50TGlnaHQuY29sb3I9c3BvdExpZ2h0LmNvbG9yKnNwb3RFZmZlY3QgKiBkZWNheUVmZmVjdDsgXHJcbiAgICAgICAgICAgIHJldHVybiAgaW5jaWRlbnRMaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgI2VuZGlmIFxyXG5cclxuICAgICNpZiAke2RlZmluZXMucG9pbnRMaWdodHNDb3VudCA+IDB9XHJcbiAgICAgICAgc3RydWN0IFBvaW50TGlnaHQge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogdmVjMzxmMzI+LFxyXG4gICAgICAgICAgICBkaXN0YW5jZTogZjMyLFxyXG4gICAgICAgICAgICBjb2xvcjogdmVjMzxmMzI+LFxyXG4gICAgICAgICAgICBkZWNheTogZjMyLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZm4gZ2V0UG9pbnRMaWdodEluZm8ocG9pbnRMaWdodDpQb2ludExpZ2h0LHdvcmxkUG9zOnZlYzM8ZjMyPixzaGluaW5lc3M6ZjMyLE46dmVjMzxmMzI+LFY6dmVjMzxmMzI+KS0+UmVmbGVjdGVkTGlnaHR7XHJcbiAgICAgICAgICAgIHZhciBsaWdodENvbG9yOlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAgICAgICB2YXIgZGlyZWN0aW9uOnZlYzM8ZjMyPiA9IHdvcmxkUG9zIC0gcG9pbnRMaWdodC5wb3NpdGlvbjtcclxuICAgICAgICAgICAgbGV0IGRpc3Q6ZjMyID0gbGVuZ3RoKCBkaXJlY3Rpb24gKTtcclxuICAgICAgICAgICAgZGlyZWN0aW9uID0gbm9ybWFsaXplKGRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgIGxldCBkZWNheSA9IGNsYW1wKDEuMCAtIHBvdyhkaXN0IC8gcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSksIDAuMCwgMS4wKTtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgZCA9ICBtYXgoIGRvdCggTiwgLWRpcmVjdGlvbiApLCAwLjAgKSAqIGRlY2F5O1xyXG4gICAgICAgICAgICBsaWdodENvbG9yLmRpcmVjdERpZmZ1c2UgPSBwb2ludExpZ2h0LmNvbG9yICogZDtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgaGFsZkRpcjp2ZWMzPGYzMj4gPSBub3JtYWxpemUoIFYgLSBkaXJlY3Rpb24gKTtcclxuICAgICAgICAgICAgbGV0IHM6ZjMyID0gcG93KCBjbGFtcCggZG90KCBOLCBoYWxmRGlyICksIDAuMCwgMS4wICksIHNoaW5pbmVzcyApICAqIGRlY2F5O1xyXG4gICAgICAgICAgICBsaWdodENvbG9yLmRpcmVjdFNwZWN1bGFyID0gcG9pbnRMaWdodC5jb2xvciAqIHM7XHJcbiAgICAgICAgICAgIHJldHVybiBsaWdodENvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmbiBnZXRQb2ludExpZ2h0SW5jaWRlbnRMaWdodChwb2ludExpZ2h0OlBvaW50TGlnaHQsIGdlb21ldHJ5Okdlb21ldHJ5KS0+SW5jaWRlbnRMaWdodCB7XHJcbiAgICAgICAgICAgIHZhciBpbmNpZGVudExpZ2h0OkluY2lkZW50TGlnaHQ7XHJcbiAgICAgICAgICAgIGxldCBsVmVjdG9yOnZlYzM8ZjMyPiA9IHBvaW50TGlnaHQucG9zaXRpb24tZ2VvbWV0cnkucG9zaXRpb247XHJcbiAgICAgICAgICAgIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcclxuICAgICAgICAgICAgbGV0IGxpZ2h0RGlzdGFuY2U6ZjMyID0gbGVuZ3RoKCBsVmVjdG9yICk7XHJcbiAgICAgICAgICAgIC8vIGxldCB3ZWlnaHQ6ZjMyPTEuMCAtIHBvdyhsaWdodERpc3RhbmNlL3BvaW50TGlnaHQuZGlzdGFuY2UsIDQuMCk7XHJcbiAgICAgICAgICAgIGluY2lkZW50TGlnaHQuY29sb3I9cG9pbnRMaWdodC5jb2xvcipjbGFtcCgxLjAgLSBwb3cobGlnaHREaXN0YW5jZS9wb2ludExpZ2h0LmRpc3RhbmNlLCA0LjApLCAwLjAsIDEuMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBpbmNpZGVudExpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICNlbmRpZlxyXG4gICAgI2lmICR7ZGVmaW5lcy5kaXJ0ZWN0TGlnaHRzQ291bnQgPiAwfVxyXG4gICAgICAgIHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0IHtcclxuICAgICAgICAgICAgZGlyZWN0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgIGNvbG9yOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmbiBnZXREaXJlY3RMaWdodEluZm8oZGlyZWN0aW9uYWxMaWdodDpEaXJlY3Rpb25hbExpZ2h0LHNoaW5pbmVzczpmMzIsTjp2ZWMzPGYzMj4sVjp2ZWMzPGYzMj4pLT5SZWZsZWN0ZWRMaWdodHtcclxuICAgICAgICAgICAgdmFyIGxpZ2h0Q29sb3I6UmVmbGVjdGVkTGlnaHQ7XHJcbiAgICAgICAgICAgIGxldCBkOmYzMiA9IG1heChkb3QoTiwgLWRpcmVjdGlvbmFsTGlnaHQuZGlyZWN0aW9uKSwgMC4wKTtcclxuICAgICAgICAgICAgbGlnaHRDb2xvci5kaXJlY3REaWZmdXNlICs9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3IgKiBkO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCBoYWxmRGlyOnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggViAtIGRpcmVjdGlvbmFsTGlnaHQuZGlyZWN0aW9uICk7XHJcbiAgICAgICAgICAgIGxldCBzOmYzMiA9IHBvdyggY2xhbXAoIGRvdCggTiwgaGFsZkRpciApLCAwLjAsIDEuMCApLCBzaGluaW5lc3MgKTtcclxuICAgICAgICAgICAgbGlnaHRDb2xvci5kaXJlY3RTcGVjdWxhciArPSBkaXJlY3Rpb25hbExpZ2h0LmNvbG9yICogcztcclxuICAgICAgICAgICAgcmV0dXJuIGxpZ2h0Q29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJbmNpZGVudExpZ2h0KGRpcmVjdGlvbmFsTGlnaHQ6RGlyZWN0aW9uYWxMaWdodCxnZW9tZXRyeTpHZW9tZXRyeSktPkluY2lkZW50TGlnaHQge1xyXG4gICAgICAgICAgICB2YXIgaW5jaWRlbnRMaWdodDpJbmNpZGVudExpZ2h0O1xyXG4gICAgICAgICAgICBpbmNpZGVudExpZ2h0LmNvbG9yID0gZGlyZWN0aW9uYWxMaWdodC5jb2xvcjtcclxuICAgICAgICAgICAgaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICByZXR1cm4gaW5jaWRlbnRMaWdodDsgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWYgJHtkZWZpbmVzLm9wZW5TaGFkb3d9IFxyXG4gICAgICAgIHN0cnVjdCBMaWdodEluZm8ge1xyXG4gICAgICAgICAgICBkaXJlY3Rpb246IHZlYzM8ZjMyPixcclxuICAgICAgICAgICAgdmlld3BvcnQ6IHZlYzQ8ZjMyPixcclxuICAgICAgICB9O1xyXG4gICAgICAgIFxyXG4gICAgICAgIGZuIGxpbmVhcml6ZURlcHRoKGRlcHRoOiBmMzIsIG5lYXI6IGYzMiwgZmFyOiBmMzIpLT5mMzIge1xyXG4gICAgICAgICAgICByZXR1cm4gMiAqIChuZWFyICogZmFyKSAvIChmYXIgKyBuZWFyIC0gZGVwdGggKiAoZmFyIC0gbmVhcikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm4gZ2V0Q3ViZUZhY2UodiA6IHZlYzM8ZjMyPikgLT4gaTMye1xyXG4gICAgICAgICAgICBsZXQgdkFicyA9IGFicyh2KTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHZBYnMueiA+PSB2QWJzLnggJiYgdkFicy56ID49IHZBYnMueSkge1xyXG4gICAgICAgICAgICAgIGlmICh2LnogPCAwLjApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAzO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBpZiAodkFicy55ID49IHZBYnMueCkge1xyXG4gICAgICAgICAgICAgIGlmICh2LnkgPCAwLjApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiA1O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gNDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBpZiAodi54IDwgMC4wKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmbiBnZXRTaGFkb3dWYWx1ZShzaGFkb3dNYXBBcnJheTp0ZXh0dXJlX2RlcHRoXzJkX2FycmF5LCBzaGFkb3dTYW1wbGVyOnNhbXBsZXJfY29tcGFyaXNvbiwgbGlnaHRQb3M6dmVjNDxmMzI+LCBnZW9tZXRyeTpHZW9tZXRyeSwgbGlnaHRJbmZvOkxpZ2h0SW5mbywgaW5kZXg6dTMyLCBpc1BvaW50TGlnaHQ6IGJvb2wsIG5lYXI6IGYzMiwgZmFyOiBmMzIpLT5mMzIge1xyXG4gICAgICAgICAgICB2YXIgdmlzaWJpbGl0eSA9IDAuMDtcclxuICAgICAgICAgICAgdmFyIHByb2plY3RQb3M6IHZlYzM8ZjMyPiA9IGxpZ2h0UG9zLnh5eiAvIGxpZ2h0UG9zLnc7XHJcbiAgICAgICAgICAgIHZhciBzaGFkb3dQb3M6IHZlYzM8ZjMyPiA9IHZlYzMocHJvamVjdFBvcy54eSAqIHZlYzIoMC41LCAtMC41KSArIHZlYzIoMC41KSwgcHJvamVjdFBvcy56KTtcclxuICAgICAgICAgICAgdmFyIGQ6ZjMyID0gZG90KGdlb21ldHJ5Lm5vcm1hbCwgLWxpZ2h0SW5mby5kaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICB2YXIgYmlhcyA9IG1heCgwLjAxMiAqICgxLjAgLSBkKSwgMC4wMDEpIC8gbGlnaHRQb3MudztcclxuICAgICAgICAgICAgbGV0IG9uZU92ZXJTaGFkb3dEZXB0aFRleHR1cmVTaXplID0gMS4wIC8gMTAyNC4wO1xyXG4gICAgICAgICAgICAvLyB2YXIgZGVwdGggPSBzZWxlY3Qoc2hhZG93UG9zLnosIChsaW5lYXJpemVEZXB0aChzaGFkb3dQb3MueiwgbmVhciwgZmFyKSAtIG5lYXIpIC8gKGZhci0gbmVhciksIGlzUGVyc3BlY3RpdmVDYW1lcmEpO1xyXG4gICAgICAgICAgICB2YXIgZGVwdGggPSBzaGFkb3dQb3MuejtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1BvaW50TGlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHNoYWRvd1Bvcy54ID0gc2hhZG93UG9zLnggKiBsaWdodEluZm8udmlld3BvcnQuejtcclxuICAgICAgICAgICAgICAgIHNoYWRvd1Bvcy55ID0gc2hhZG93UG9zLnkgKiBsaWdodEluZm8udmlld3BvcnQudztcclxuICAgICAgICAgICAgICAgIHZhciB2aWV3cG9ydFggPSBsaWdodEluZm8udmlld3BvcnQueCAqIGxpZ2h0SW5mby52aWV3cG9ydC56O1xyXG4gICAgICAgICAgICAgICAgdmFyIHZpZXdwb3J0WSA9IGxpZ2h0SW5mby52aWV3cG9ydC55ICogbGlnaHRJbmZvLnZpZXdwb3J0Lnc7XHJcbiAgICAgICAgICAgICAgICB2YXIgdXZPZmZzZXQgPSAxLjUgLyAxMDI0LjA7XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dQb3MueCA9IGNsYW1wKHNoYWRvd1Bvcy54ICsgdmlld3BvcnRYLCB2aWV3cG9ydFggKyB1dk9mZnNldCwgdmlld3BvcnRYICsgbGlnaHRJbmZvLnZpZXdwb3J0LnogLSB1dk9mZnNldCk7XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dQb3MueSA9IGNsYW1wKHNoYWRvd1Bvcy55ICsgdmlld3BvcnRZLCB2aWV3cG9ydFkgKyB1dk9mZnNldCwgdmlld3BvcnRZICsgbGlnaHRJbmZvLnZpZXdwb3J0LncgLSB1dk9mZnNldCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIHkgPSAtMTsgeSA8PSAxOyB5KyspIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAtMTsgeCA8PSAxOyB4KyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2Zmc2V0ID0gdmVjMjxmMzI+KHZlYzIoeCwgeSkpICogb25lT3ZlclNoYWRvd0RlcHRoVGV4dHVyZVNpemU7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5ICs9IHRleHR1cmVTYW1wbGVDb21wYXJlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dNYXBBcnJheSwgc2hhZG93U2FtcGxlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93UG9zLnh5ICsgb2Zmc2V0LCBpbmRleCwgZGVwdGggLSBiaWFzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5IC89IDkuMDtcclxuICAgICAgICAgICAgdmFyIGluRnJ1c3R1bSA9IHNoYWRvd1Bvcy54ID49IDAuMCAmJiBzaGFkb3dQb3MueCA8PSAxLjAgJiYgc2hhZG93UG9zLnkgPj0gMC4wICYmIHNoYWRvd1Bvcy55IDw9IDEuMDtcclxuICAgICAgICAgICAgaWYgKCFpbkZydXN0dW0gfHwgZGVwdGggPiAxLjApIHtcclxuICAgICAgICAgICAgICAgIHZpc2liaWxpdHkgPSAxLjA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHZpc2liaWxpdHk7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2lmICR7XHJcblx0XHRkZWZpbmVzLmFtYmllbnRMaWdodENvdW50IHx8IGRlZmluZXMuc3BvdExpZ2h0c0NvdW50IHx8IGRlZmluZXMucG9pbnRMaWdodHNDb3VudCB8fCBkZWZpbmVzLmRpcnRlY3RMaWdodHNDb3VudFxyXG5cdH1cclxuICAgICAgICBzdHJ1Y3QgTGlnaHRVbmlmb3Jtc3tcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5hbWJpZW50TGlnaHRDb3VudH1cclxuICAgICAgICAgICAgICAgIGFtYmllbnQ6dmVjNDxmMzI+LFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5zcG90TGlnaHRzQ291bnR9XHJcbiAgICAgICAgICAgICAgICBzcG90TGlnaHRzOmFycmF5PFNwb3RMaWdodCwke2RlZmluZXMuc3BvdExpZ2h0c0NvdW50fT4sXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLnBvaW50TGlnaHRzQ291bnR9XHJcbiAgICAgICAgICAgICAgICBwb2ludExpZ2h0czphcnJheTxQb2ludExpZ2h0LCR7ZGVmaW5lcy5wb2ludExpZ2h0c0NvdW50fT4sXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLmRpcnRlY3RMaWdodHNDb3VudH1cclxuICAgICAgICAgICAgICAgIGRpcnRlY3RMaWdodHM6YXJyYXk8RGlyZWN0aW9uYWxMaWdodCwke2RlZmluZXMuZGlydGVjdExpZ2h0c0NvdW50fT4sXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgIH1cclxuICAgICAgICBAZ3JvdXAoMikgQGJpbmRpbmcoJHtkZWZpbmVzLmxpZ2h0QmluZGluZ30pIHZhcjxzdG9yYWdlLCByZWFkPiBsaWdodFVuaWZvcm1zOiBMaWdodFVuaWZvcm1zO1xyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLm9wZW5TaGFkb3d9XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuc3BvdExpZ2h0U2hhZG93TWFwc0NvdW50fVxyXG4gICAgICAgICAgICAgICAgc3RydWN0IFNwb3RMaWdodFNoYWRvdyB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZG93Q2FtZXJhVlBNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0NhbWVyYU5lYXI6IGYzMixcclxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dDYW1lcmFGYXI6IGYzMlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5wb2ludExpZ2h0U2hhZG93TWFwc0NvdW50fVxyXG4gICAgICAgICAgICAgICAgc3RydWN0IFBvaW50TGlnaHRTaGFkb3cge1xyXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0NhbWVyYVZQTWF0cml4QXJyYXk6IGFycmF5PG1hdDR4NDxmMzI+LCA2PixcclxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dDYW1lcmFWaWV3cG9ydEFycmF5OiBhcnJheTx2ZWM0PGYzMj4sIDY+LFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0NhbWVyYU5lYXI6IGYzMixcclxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dDYW1lcmFGYXI6IGYzMixcclxuICAgICAgICAgICAgICAgICAgICAvLyBzaGFkb3dDYW1lcmFWUE1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2hhZG93Q2FtZXJhVlBNYXRyaXhBcnJheTogYXJyYXk8bWF0NHg0PGYzMj4sIDY+LFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNoYWRvd0NhbWVyYVZpZXdwb3J0QXJyYXk6IGFycmF5PHZlYzQ8ZjMyPiwgNj4sXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLmRpcmVjdExpZ2h0U2hhZG93TWFwc0NvdW50fVxyXG4gICAgICAgICAgICAgICAgc3RydWN0IERpcmVjdExpZ2h0U2hhZG93IHtcclxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dDYW1lcmFWUE1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICBzdHJ1Y3QgU2hhZG93VW5pZm9ybXN7XHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLnNwb3RMaWdodFNoYWRvd01hcHNDb3VudH1cclxuICAgICAgICAgICAgICAgICAgICBzcG90TGlnaHRTaGFkb3dzOmFycmF5PFNwb3RMaWdodFNoYWRvdywke2RlZmluZXMuc3BvdExpZ2h0U2hhZG93TWFwc0NvdW50fT4sXHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMucG9pbnRMaWdodFNoYWRvd01hcHNDb3VudH1cclxuICAgICAgICAgICAgICAgICAgICBwb2ludExpZ2h0U2hhZG93czphcnJheTxQb2ludExpZ2h0U2hhZG93LCR7ZGVmaW5lcy5wb2ludExpZ2h0U2hhZG93TWFwc0NvdW50fT4sXHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuZGlyZWN0TGlnaHRTaGFkb3dNYXBzQ291bnR9XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0TGlnaHRTaGFkb3dzOmFycmF5PERpcmVjdExpZ2h0U2hhZG93LCR7ZGVmaW5lcy5kaXJlY3RMaWdodFNoYWRvd01hcHNDb3VudH0+LFxyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQGdyb3VwKDIpIEBiaW5kaW5nKCR7ZGVmaW5lcy5zaGFkb3dCaW5kaW5nfSkgdmFyPHN0b3JhZ2UsIHJlYWQ+IHNoYWRvd1VuaWZvcm1zOiBTaGFkb3dVbmlmb3JtcztcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5QmluZGluZ31cclxuICAgICAgICAgICAgICAgIEBncm91cCgyKSBAYmluZGluZygke1xyXG5cdFx0XHRcdFx0ZGVmaW5lcy5zcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXlCaW5kaW5nXHJcblx0XHRcdFx0fSkgdmFyIHNwb3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheTogdGV4dHVyZV9kZXB0aF8yZF9hcnJheTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMucG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheUJpbmRpbmd9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMikgQGJpbmRpbmcoJHtcclxuXHRcdFx0XHRcdGRlZmluZXMucG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheUJpbmRpbmdcclxuXHRcdFx0XHR9KSB2YXIgcG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheTogdGV4dHVyZV9kZXB0aF8yZF9hcnJheTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXlCaW5kaW5nfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDIpIEBiaW5kaW5nKCR7XHJcblx0XHRcdFx0XHRkZWZpbmVzLmRpcmVjdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5QmluZGluZ1xyXG5cdFx0XHRcdH0pIHZhciBkaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheTogdGV4dHVyZV9kZXB0aF8yZF9hcnJheTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIEBncm91cCgyKSBAYmluZGluZygke2RlZmluZXMuc2hhZG93U2FtcGxlckJpbmRpbmd9KSB2YXIgc2hhZG93U2FtcGxlcjogc2FtcGxlcl9jb21wYXJpc29uO1xyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICNlbmRpZlxyXG4gICAgI2lmICR7ZGVmaW5lcy5tYXRlcmlhbFBob25nfVxyXG4gICAgICAgIGZuIHBhcnNlTGlnaHRzKGdlb21ldHJ5Okdlb21ldHJ5LHNoaW5pbmVzczpmMzIpLT5SZWZsZWN0ZWRMaWdodCB7XHJcbiAgICAjZWxpZiAke2RlZmluZXMubWF0ZXJpYWxQYnJ9XHJcbiAgICAgICAgZm4gcGFyc2VMaWdodHMoZ2VvbWV0cnk6R2VvbWV0cnksbWF0ZXJpYWw6UGh5c2ljYWxNYXRlcmlhbCktPlJlZmxlY3RlZExpZ2h0e1xyXG4gICAgI2VuZGlmXHJcbiAgICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAgIHZhciBzaGFkb3dWYWx1ZTpmMzIgPSAxLjA7XHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5hbWJpZW50TGlnaHRDb3VudCA+IDB9XHJcbiAgICAgICAgICAgIC8v5aSE55CG546v5aKD5YWJXHJcbiAgICAgICAgICAgIHZhciBhbWJpZW50Q29sb3I6dmVjMzxmMzI+ID0gbGlnaHRVbmlmb3Jtcy5hbWJpZW50Lnh5eiAqIGxpZ2h0VW5pZm9ybXMuYW1iaWVudC53O1xyXG4gICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5hbWJpZW50ICs9IGFtYmllbnRDb2xvcjtcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5zcG90TGlnaHRzQ291bnQgPiAwfVxyXG4gICAgICAgICAgICAvL+WkhOeQhuiBmuWFieeBr1xyXG4gICAgICAgICAgICB2YXIgc3BvdExpZ2h0OlNwb3RMaWdodDtcclxuICAgICAgICAgICAgZm9yICh2YXIgayA9IDB1OyBrIDwgJHtkZWZpbmVzLnNwb3RMaWdodHNDb3VudH07IGsgPSBrICsgMXUpIHtcclxuICAgICAgICAgICAgICAgIHNwb3RMaWdodD0gbGlnaHRVbmlmb3Jtcy5zcG90TGlnaHRzW2tdO1xyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5tYXRlcmlhbFBob25nICYmIGRlZmluZXMub3BlblNoYWRvdyAmJiBkZWZpbmVzLnNwb3RMaWdodFNoYWRvd01hcHNDb3VudH1cclxuICAgICAgICAgICAgICAgICAgICBpZiBrIDwgdGV4dHVyZU51bUxheWVycyhzcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwb3RMaWdodFNoYWRvdzpTcG90TGlnaHRTaGFkb3cgPSBzaGFkb3dVbmlmb3Jtcy5zcG90TGlnaHRTaGFkb3dzW2tdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlnaHRQb3M6IHZlYzQ8ZjMyPiA9IHNwb3RMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFWUE1hdHJpeCAqIHZlYzQ8ZjMyPihnZW9tZXRyeS5wb3NpdGlvbiwxLjApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlnaHRJbmZvOkxpZ2h0SW5mbztcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHRJbmZvLmRpcmVjdGlvbiA9IG5vcm1hbGl6ZShnZW9tZXRyeS5wb3NpdGlvbiAtIHNwb3RMaWdodC5wb3NpdGlvbik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dWYWx1ZSA9IGdldFNoYWRvd1ZhbHVlKHNwb3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSwgc2hhZG93U2FtcGxlciwgbGlnaHRQb3MsIGdlb21ldHJ5LCBsaWdodEluZm8sIGssIGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFGYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzcG90TGlnaHQuY29sb3IgKj0gc2hhZG93VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMubWF0ZXJpYWxQaG9uZ31cclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3BSZWZsZWN0ZWRMaWdodD1nZXRTcG90TGlnaHRJbmZvKHNwb3RMaWdodCxnZW9tZXRyeS5wb3NpdGlvbixzaGluaW5lc3MsZ2VvbWV0cnkubm9ybWFsLGdlb21ldHJ5LnZpZXdEaXIpO1xyXG4gICAgICAgICAgICAgICAgI2VsaWYgJHtkZWZpbmVzLm1hdGVyaWFsUGJyfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmNpZGVudExpZ2h0PWdldFNwb3RMaWdodEluY2lkZW50TGlnaHQoc3BvdExpZ2h0LGdlb21ldHJ5KTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3BSZWZsZWN0ZWRMaWdodD1kaXJlY3RfUGh5c2ljYWwoaW5jaWRlbnRMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsKTtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UrPXNwUmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZTtcclxuICAgICAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyKz1zcFJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5wb2ludExpZ2h0c0NvdW50ID4gMH1cclxuICAgICAgICAgICAgLy/lpITnkIbngrnlhYnmupBcclxuICAgICAgICAgICAgdmFyIHBvaW50TGlnaHQ6UG9pbnRMaWdodDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDB1OyBqIDwgJHtkZWZpbmVzLnBvaW50TGlnaHRzQ291bnR9O2ogPSBqICsgMXUpIHtcclxuICAgICAgICAgICAgICAgIHBvaW50TGlnaHQgPSBsaWdodFVuaWZvcm1zLnBvaW50TGlnaHRzW2pdO1xyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5tYXRlcmlhbFBob25nICYmIGRlZmluZXMub3BlblNoYWRvdyAmJiBkZWZpbmVzLnBvaW50TGlnaHRTaGFkb3dNYXBzQ291bnR9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgaiA8IHRleHR1cmVOdW1MYXllcnMocG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9pbnRMaWdodFNoYWRvdzpQb2ludExpZ2h0U2hhZG93ID0gc2hhZG93VW5pZm9ybXMucG9pbnRMaWdodFNoYWRvd3Nbal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaWdodEluZm86TGlnaHRJbmZvO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaWdodEluZm8uZGlyZWN0aW9uID0gbm9ybWFsaXplKGdlb21ldHJ5LnBvc2l0aW9uIC0gcG9pbnRMaWdodC5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdWJlRmFjZSA9IGdldEN1YmVGYWNlKGxpZ2h0SW5mby5kaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlnaHRQb3M6IHZlYzQ8ZjMyPiA9IHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhVlBNYXRyaXhBcnJheVtjdWJlRmFjZV0gKiB2ZWM0PGYzMj4oZ2VvbWV0cnkucG9zaXRpb24sMS4wKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHRJbmZvLnZpZXdwb3J0ID0gcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFWaWV3cG9ydEFycmF5W2N1YmVGYWNlXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhciBsaWdodFBvczogdmVjNDxmMzI+ID0gcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFWUE1hdHJpeCAqIHZlYzQ8ZjMyPihnZW9tZXRyeS5wb3NpdGlvbiwxLjApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93VmFsdWUgPSBnZXRTaGFkb3dWYWx1ZShwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5LCBzaGFkb3dTYW1wbGVyLCBsaWdodFBvcywgZ2VvbWV0cnksIGxpZ2h0SW5mbywgaiwgdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFGYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmbGVjdGVkTGlnaHQudGVzdENvbG9yID0gdmVjMyhwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYUZhciAvIDEwMDAsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFWUE1hdHJpeEFycmF5WzVdWzNdWzJdIC8gMjU1LCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYVZQTWF0cml4QXJyYXlbNV1bM11bM10gLyAyNTUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWZsZWN0ZWRMaWdodC50ZXN0Q29sb3IgPSB2ZWMzKHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwb2ludExpZ2h0LmNvbG9yICo9IHNoYWRvd1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLm1hdGVyaWFsUGhvbmd9XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvaVJlZmxlY3RlZExpZ2h0PWdldFBvaW50TGlnaHRJbmZvKHBvaW50TGlnaHQsZ2VvbWV0cnkucG9zaXRpb24sc2hpbmluZXNzLGdlb21ldHJ5Lm5vcm1hbCxnZW9tZXRyeS52aWV3RGlyKTtcclxuICAgICAgICAgICAgICAgICNlbGlmICR7ZGVmaW5lcy5tYXRlcmlhbFBicn1cclxuICAgICAgICAgICAgICAgICAgIGxldCBpbmNpZGVudExpZ2h0PWdldFBvaW50TGlnaHRJbmNpZGVudExpZ2h0KHBvaW50TGlnaHQsZ2VvbWV0cnkpO1xyXG4gICAgICAgICAgICAgICAgICAgbGV0IHBvaVJlZmxlY3RlZExpZ2h0PWRpcmVjdF9QaHlzaWNhbChpbmNpZGVudExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSs9cG9pUmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZTtcclxuICAgICAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyKz1wb2lSZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuZGlydGVjdExpZ2h0c0NvdW50ID4gMH1cclxuICAgICAgICAgICAgLy/lpITnkIbmlrnlkJHlhYlcclxuICAgICAgICAgICAgdmFyIGRpcmVjdGlvbmFsTGlnaHQ6RGlyZWN0aW9uYWxMaWdodDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaT0gMHU7IGkgPCR7ZGVmaW5lcy5kaXJ0ZWN0TGlnaHRzQ291bnR9OyBpID0gaSArIDF1KSB7XHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0ID0gbGlnaHRVbmlmb3Jtcy5kaXJ0ZWN0TGlnaHRzW2ldO1xyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5tYXRlcmlhbFBob25nICYmIGRlZmluZXMub3BlblNoYWRvdyAmJiBkZWZpbmVzLmRpcmVjdExpZ2h0U2hhZG93TWFwc0NvdW50fVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIGkgPCB0ZXh0dXJlTnVtTGF5ZXJzKGRpcmVjdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaXJlY3RMaWdodFNoYWRvdzpEaXJlY3RMaWdodFNoYWRvdyA9IHNoYWRvd1VuaWZvcm1zLmRpcmVjdExpZ2h0U2hhZG93c1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpZ2h0UG9zOiB2ZWM0PGYzMj4gPSBkaXJlY3RMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFWUE1hdHJpeCAqIHZlYzQ8ZjMyPihnZW9tZXRyeS5wb3NpdGlvbiwxLjApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlnaHRJbmZvOkxpZ2h0SW5mbztcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHRJbmZvLmRpcmVjdGlvbiA9IGRpcmVjdGlvbmFsTGlnaHQuZGlyZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1ZhbHVlID0gZ2V0U2hhZG93VmFsdWUoZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXksIHNoYWRvd1NhbXBsZXIsIGxpZ2h0UG9zLCBnZW9tZXRyeSwgbGlnaHRJbmZvLCBpLCBmYWxzZSwgMCwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbmFsTGlnaHQuY29sb3IgKj0gc2hhZG93VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLm1hdGVyaWFsUGhvbmd9XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRpclJlZmxlY3RlZExpZ2h0PWdldERpcmVjdExpZ2h0SW5mbyhkaXJlY3Rpb25hbExpZ2h0LHNoaW5pbmVzcyxnZW9tZXRyeS5ub3JtYWwsZ2VvbWV0cnkudmlld0Rpcik7XHJcbiAgICAgICAgICAgICAgICAjZWxpZiAke2RlZmluZXMubWF0ZXJpYWxQYnJ9XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluY2lkZW50TGlnaHQ9Z2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodEluY2lkZW50TGlnaHQoZGlyZWN0aW9uYWxMaWdodCxnZW9tZXRyeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRpclJlZmxlY3RlZExpZ2h0PWRpcmVjdF9QaHlzaWNhbChpbmNpZGVudExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSs9ZGlyUmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZTtcclxuICAgICAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyKz1kaXJSZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHJldHVybiByZWZsZWN0ZWRMaWdodDtcclxuICAgIH1gO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaWdodENvbW1vbihkZWZpbmVzKSB7XHJcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXHJcbiAgICBzdHJ1Y3QgUmVmbGVjdGVkTGlnaHQge1xyXG4gICAgICAgIGRpcmVjdERpZmZ1c2U6dmVjMzxmMzI+LFxyXG4gICAgICAgIGRpcmVjdFNwZWN1bGFyOnZlYzM8ZjMyPixcclxuICAgICAgICBpbmRpcmVjdERpZmZ1c2U6dmVjMzxmMzI+LFxyXG4gICAgICAgIGluZGlyZWN0U3BlY3VsYXI6dmVjMzxmMzI+LFxyXG4gICAgfTtcclxuICAgIHN0cnVjdCBHZW9tZXRyeSB7XHJcbiAgICAgICAgcG9zaXRpb246IHZlYzM8ZjMyPixcclxuICAgICAgICBub3JtYWw6IHZlYzM8ZjMyPixcclxuICAgICAgICB2aWV3RGlyOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUfVxyXG4gICAgICAgICAgICB2ZWMzIGNsZWFyY29hdE5vcm1hbDtcclxuICAgICAgICAjZW5kaWZcclxuICAgIH07XHJcbiAgICBmbiBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKGFtYmllbnRMaWdodENvbG9yOiB2ZWMzPGYzMj4pIC0+IHZlYzM8ZjMyPiB7XHJcbiAgICAgICAgbGV0IGlycmFkaWFuY2UgPSBhbWJpZW50TGlnaHRDb2xvcjtcclxuICAgICAgICByZXR1cm4gaXJyYWRpYW5jZTtcclxuICAgIH1cclxuICAgIGZuIGdldERpc3RhbmNlQXR0ZW51YXRpb24obGlnaHREaXN0YW5jZTogZjMyLCBjdXRvZmZEaXN0YW5jZTogZjMyLCBkZWNheUV4cG9uZW50OiBmMzIpIC0+IGYzMiB7XHJcbiAgICAgICAgaWYgKGN1dG9mZkRpc3RhbmNlID4gMC4wICYmIGRlY2F5RXhwb25lbnQgPiAwLjApIHtcclxuICAgICAgICAgICAgbGV0IHg6ZjMyID0gc2F0dXJhdGUoLSBsaWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjApO1xyXG4gICAgICAgICAgICByZXR1cm4gcG93KHgsIGRlY2F5RXhwb25lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMS4wO1xyXG4gICAgfVxyXG4gICAgZm4gZ2V0U3BvdEF0dGVudWF0aW9uKGNvbmVDb3NpbmU6IGYzMiwgcGVudW1icmFDb3NpbmU6IGYzMiwgYW5nbGVDb3NpbmU6IGYzMikgLT4gZjMyIHtcclxuICAgICAgICByZXR1cm4gc21vb3Roc3RlcChjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUpO1xyXG4gICAgfVxyXG4gICAgZm4gc2hHZXRJcnJhZGlhbmNlQXQoIG5vcm1hbDp2ZWMzPGYzMj4sIHNoQ29lZmZpY2llbnRzOmFycmF5PHZlYzM8ZjMyPiw5PiktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgbGV0IHg6ZjMyID0gbm9ybWFsLng7IFxyXG4gICAgICAgIGxldCB5OmYzMiA9IG5vcm1hbC55OyBcclxuICAgICAgICBsZXQgejpmMzIgPSBub3JtYWwuejtcclxuICAgICAgICB2YXIgcmVzdWx0OnZlYzM8ZjMyPiA9IHNoQ29lZmZpY2llbnRzWyAwIF0gKiAwLjg4NjIyNztcclxuICAgICAgICByZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDEgXSAqIDIuMCAqIDAuNTExNjY0ICogeTtcclxuICAgICAgICByZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejtcclxuICAgICAgICByZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDMgXSAqIDIuMCAqIDAuNTExNjY0ICogeDtcclxuICAgICAgICByZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDQgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHk7XHJcbiAgICAgICAgcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6O1xyXG4gICAgICAgIHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNiBdICogKCAwLjc0MzEyNSAqIHogKiB6IC0gMC4yNDc3MDggKTtcclxuICAgICAgICByZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDcgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHo7XHJcbiAgICAgICAgcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBmbiBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBkaXI6dmVjMzxmMzI+LCBtYXRyaXg6bWF0NHg0PGYzMj4gKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICByZXR1cm4gbm9ybWFsaXplKCAoIHZlYzQ8ZjMyPiggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xyXG4gICAgfVxyXG4gYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcbmV4cG9ydCBmdW5jdGlvbiBnZXROb3JtYWwoZGVmaW5lcykge1xuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcbiAgICAgIGZuIGdldE5vcm1hbChpbnB1dDpGcmFnSW5wdXQpLT52ZWMzPGYzMj57XG4gICAgICAgIHZhciBub3JtYWw6dmVjMzxmMzI+O1xuICAgICAgICAjaWYgJHtkZWZpbmVzLkhBU19OT1JNQUx9XG4gICAgICAgICAgICBub3JtYWw9IGlucHV0Lm5vcm1hbDtcbiAgICAgICAgI2Vsc2VcbiAgICAgICAgICBsZXQgcG9zX2R4ID0gZHBkeChpbnB1dC53b3JsZFBvcyk7XG4gICAgICAgICAgbGV0IHBvc19keSA9IGRwZHkoaW5wdXQud29ybGRQb3MpO1xuICAgICAgICAgIG5vcm1hbCA9IG5vcm1hbGl6ZSggY3Jvc3MocG9zX2R5LCBwb3NfZHgpICk7XG4gICAgICAgICNlbmRpZlxuICAgICAgICByZXR1cm4gbm9ybWFsKihmMzIoaW5wdXQuZnJvbnRGYWNpbmcpICogMi4wIC0gMS4wKTtcbiAgICAgIH1cbiAgICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE5vcm1hbEJ5Tm9ybWFsVGV4dHVyZShkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgICAgZm4gZ2V0Tm9ybWFsQnlOb3JtYWxUZXh0dXJlKGlucHV0OlZlcnRJbnB1dCktPnZlYzM8ZjMyPntcbiAgICAgICAgdmFyIG46dmVjMzxmMzI+ID0gdGV4dHVyZVNhbXBsZShub3JtYWxUZXh0dXJlLG5vcm1hbFNhbXBsZXIsIGlucHV0LnV2KS5yZ2I7XG4gICAgICAgIGxldCB0Ym46bWF0M3gzPGYzMj4gPWdldFRCTihpbnB1dCk7XG4gICAgICAgIG4gPSBub3JtYWxpemUodGJuICogKDIuMCAqIG4gLSB2ZWMzKDEuMCkpKTtcbiAgICAgICAgbj1uKihmMzIoaW5wdXQuZnJvbnRGYWNpbmcpICogMi4wIC0gMS4wKTtcbiAgICAgICAgcmV0dXJuIG47XG4gICAgICB9XG4gICAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRUQk4oZGVmaW5lcykge1xuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcbiAgICAgICAgZm4gZ2V0VEJOKGlucHV0OlZlcnRJbnB1dCktPm1hdDN4MzxmMzI+e1xuICAgICAgICAjaWYgJHtkZWZpbmVzLkhBU19UQU5HRU5UfVxuICAgICAgICAgICAgbGV0IHRibjptYXQzeDM8ZjMyPiA9IGlucHV0LnRibjtcbiAgICAgICAgI2Vsc2VcbiAgICAgICAgICAgIGxldCBub3JtYWw6dmVjMzxmMzI+ID1ub3JtYWxpemUoaW5wdXQubm9ybWFsKTtcbiAgICAgICAgICAgIGxldCB1djp2ZWMyPGYzMj4gPSBzZWxlY3QoLWlucHV0LnV2LGlucHV0LnV2LGlucHV0LmZyb250RmFjaW5nKTtcbiAgICAgICAgICAgICAgLy8gcmVmOiBodHRwOi8vd3d3LnRoZXRlbnRocGxhbmV0LmRlL2FyY2hpdmVzLzExODBcbiAgICAgICAgICAgICAgLy8gZ2V0IGVkZ2UgdmVjdG9ycyBvZiB0aGUgcGl4ZWwgdHJpYW5nbGVcbiAgICAgICAgICAgICAgbGV0IGRwMTp2ZWMzPGYzMj4gPSAgdmVjMzxmMzI+KGRwZHgoaW5wdXQud29ybGRQb3MueCksIGRwZHgoaW5wdXQud29ybGRQb3MueSksIGRwZHgoaW5wdXQud29ybGRQb3MueikpO1xuICAgICAgICAgICAgICBsZXQgZHAyOnZlYzM8ZjMyPiA9ICB2ZWMzPGYzMj4oZHBkeShpbnB1dC53b3JsZFBvcy54KSwgZHBkeShpbnB1dC53b3JsZFBvcy55KSwgZHBkeShpbnB1dC53b3JsZFBvcy56KSk7XG4gICAgICAgICAgICAgIGxldCBkdXYxOnZlYzI8ZjMyPiA9IGRwZHgodXYpO1xuICAgICAgICAgICAgICBsZXQgZHV2Mjp2ZWMyPGYzMj4gPSBkcGR5KHV2KTtcblxuICAgICAgICAgICAgICAvLyBzb2x2ZSB0aGUgbGluZWFyIHN5c3RlbVxuICAgICAgICAgICAgICBsZXQgZHAycGVycDp2ZWMzPGYzMj4gPSBjcm9zcyhkcDIsIG5vcm1hbCk7XG4gICAgICAgICAgICAgIGxldCBkcDFwZXJwOnZlYzM8ZjMyPiA9IGNyb3NzKG5vcm1hbCwgZHAxKTtcbiAgICAgICAgICAgICAgbGV0IHRhbmdlbnQ6dmVjMzxmMzI+ID0gZHAycGVycCAqIGR1djEueCArIGRwMXBlcnAgKiBkdXYyLng7XG4gICAgICAgICAgICAgIGxldCBiaW5vcm1hbDp2ZWMzPGYzMj4gPSBkcDJwZXJwICogZHV2MS55ICsgZHAxcGVycCAqIGR1djIueTtcbiAgICAgICAgICAgICAgLy8gY29uc3RydWN0IGEgc2NhbGUtaW52YXJpYW50IGZyYW1lIFxuICAgICAgICAgICAgICBsZXQgcmVzdWx0OmYzMj1tYXgoZG90KHRhbmdlbnQsIHRhbmdlbnQpLCBkb3QoYmlub3JtYWwsIGJpbm9ybWFsKSk7XG4gICAgICAgICAgICAgIGxldCBpbnZtYXg6ZjMyID0gMS4wL3NxcnQocmVzdWx0KTtcbiAgICAgICAgICAgICAgbGV0IHRibjptYXQzeDM8ZjMyPiA9IG1hdDN4MzxmMzI+KHRhbmdlbnQgKiBpbnZtYXgsIGJpbm9ybWFsICogaW52bWF4LCBub3JtYWwpO1xuICAgICAgICAjZW5kaWZcbiAgICAgICAgcmV0dXJuIHRibjtcbiAgICAgIH1cbiAgYDtcbn1cbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBicmRmKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTn1cclxuICAgICAgICAgICAgICAgIGZuIERfQ2hhcmxpZSggcm91Z2huZXNzOmYzMixkb3ROSDpmMzIgKS0+ZjMyIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYWxwaGE6ZjMyID0gcG93Miggcm91Z2huZXNzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGludkFscGhhOmYzMiA9IDEuMCAvIGFscGhhO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb3MyaDpmMzIgPSBkb3ROSCAqIGRvdE5IO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzaW4yaDpmMzIgPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCAyLjAgKyBpbnZBbHBoYSApICogcG93KCBzaW4yaCwgaW52QWxwaGEgKiAwLjUgKSAvICggMi4wICogUEkgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZuIFZfTmV1YmVsdCggZG90TlY6ZjMyLCBkb3ROTDpmMzIgKS0+ZjMyIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2F0dXJhdGUoIDEuMCAvICggNC4wICogKCBkb3ROTCArIGRvdE5WIC0gZG90TkwgKiBkb3ROViApICkgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZuIEJSREZfU2hlZW4obGlnaHREaXI6dmVjMzxmMzI+LCB2aWV3RGlyOnZlYzM8ZjMyPiwgbm9ybWFsOnZlYzM8ZjMyPixzaGVlbkNvbG9yOnZlYzM8ZjMyPixzaGVlblJvdWdobmVzczpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaGFsZkRpcjp2ZWMzPGYzMj4gPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkb3ROTDpmMzIgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZG90TlY6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZG90Tkg6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgRDpmMzIgPSBEX0NoYXJsaWUoIHNoZWVuUm91Z2huZXNzLCBkb3ROSCApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBWOmYzMiA9IFZfTmV1YmVsdCggZG90TlYsIGRvdE5MICk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgZm4gQlJERl9MYW1iZXJ0KGRpZmZ1c2VDb2xvcjp2ZWMzPGYzMj4pLT52ZWMzPGYzMj4ge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBkaWZmdXNlQ29sb3I7XHJcblxyXG4gICAgICAgIH0gLy8gdmFsaWRhdGVkXHJcblxyXG4gICAgICAgIGZuIEZfU2NobGljayggZjA6dmVjMzxmMzI+LCBkb3RWSDpmMzIgKS0+dmVjMzxmMzI+IHtcclxuXHJcbiAgICAgICAgICAgIC8vIE9yaWdpbmFsIGFwcHJveGltYXRpb24gYnkgQ2hyaXN0b3BoZSBTY2hsaWNrICc5NFxyXG4gICAgICAgICAgICAvLyBmbG9hdCBmcmVzbmVsID0gcG93KCAxLjAgLSBkb3RWSCwgNS4wICk7XHJcblxyXG4gICAgICAgICAgICAvLyBPcHRpbWl6ZWQgdmFyaWFudCAocHJlc2VudGVkIGJ5IEVwaWMgYXQgU0lHR1JBUEggJzEzKVxyXG4gICAgICAgICAgICAvLyBodHRwczovL2NkbjIudW5yZWFsZW5naW5lLmNvbS9SZXNvdXJjZXMvZmlsZXMvMjAxM1NpZ2dyYXBoUHJlc2VudGF0aW9uc05vdGVzLTI2OTE1NzM4LnBkZlxyXG4gICAgICAgICAgIGxldCBmcmVzbmVsID0gZXhwMiggKCAtIDUuNTU0NzMgKiBkb3RWSCAtIDYuOTgzMTYgKSAqIGRvdFZIICk7XHJcbiAgICAgICAgICAgcmV0dXJuICggMS4wIC0gZjAgKSAqIGZyZXNuZWwgKyBmMDtcclxuXHJcbiAgICAgICAgfSAvLyB2YWxpZGF0ZWRcclxuXHJcbiAgICAgICAgZm4gU2NobGlja190b19GMChmOnZlYzM8ZjMyPiwgZjkwOmYzMiwgZG90Vkg6ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCB4OmYzMiA9IGNsYW1wKCAxLjAgLSBkb3RWSCwgMC4wLCAxLjAgKTtcclxuICAgICAgICAgICAgbGV0IHgyOmYzMiA9IHggKiB4O1xyXG4gICAgICAgICAgICBsZXQgeDU6ZjMyID0gY2xhbXAoIHggKiB4MiAqIHgyLCAwLjAsIDAuOTk5OSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuICggZiAtIHZlYzMoIGY5MCApICogeDUgKSAvICggMS4wIC0geDUgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYTpmMzIsIGRvdE5MOmYzMixkb3ROVjpmMzIgKS0+ZjMyIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBhMiA6ZjMyPSBwb3cyKCBhbHBoYSApO1xyXG5cclxuICAgICAgICAgICAgbGV0IGd2OmYzMiA9IGRvdE5MICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROViApICk7XHJcbiAgICAgICAgICAgIGxldCBnbDpmMzIgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIDAuNSAvIG1heCgoZ3YgKyBnbCksIDAuMDAwMDAwMDAxICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBmbiBEX0dHWCggYWxwaGE6ZjMyLCBkb3ROSDpmMzIgKS0+ZjMyIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBhMjpmMzIgPSBwb3cyKCBhbHBoYSApO1xyXG5cclxuICAgICAgICAgICAgbGV0IGRlbm9tOmYzMiA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7IC8vIGF2b2lkIGFscGhhID0gMCB3aXRoIGRvdE5IID0gMVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9tICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBmbiBCUkRGX0dHWCggbGlnaHREaXI6dmVjMzxmMzI+LCB2aWV3RGlyOnZlYzM8ZjMyPiwgbm9ybWFsOnZlYzM8ZjMyPiwgZjA6dmVjMzxmMzI+LCAgcm91Z2huZXNzOmYzMiApLT52ZWMzPGYzMj4ge1xyXG5cclxuICAgICAgICAgICAgbGV0IGFscGhhOmYzMiA9IHBvdzIoIHJvdWdobmVzcyApOyAvLyBVRTQncyByb3VnaG5lc3NcclxuXHJcbiAgICAgICAgICAgIGxldCBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBkb3ROTDpmMzIgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTtcclxuICAgICAgICAgICAgbGV0IGRvdE5WOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XHJcbiAgICAgICAgICAgIGxldCBkb3ROSDpmMzIgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xyXG4gICAgICAgICAgICBsZXQgZG90Vkg6ZjMyID0gc2F0dXJhdGUoIGRvdCggbGlnaHREaXIsIGhhbGZEaXIgKSApO1xyXG5cclxuICAgICAgICAgICAgbGV0IEYgPSBGX1NjaGxpY2soIGYwLCAgZG90VkggKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgRCA9IERfR0dYKCBhbHBoYSwgZG90TkggKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBGICogKCBWICogRCApO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gZGlyZWN0X1BoeXNpY2FsKCBkaXJlY3RMaWdodDpJbmNpZGVudExpZ2h0LCBnZW9tZXRyeTpHZW9tZXRyeSxtYXRlcmlhbDpQaHlzaWNhbE1hdGVyaWFsKS0+UmVmbGVjdGVkTGlnaHQge1xyXG4gICAgICAgICAgICB2YXIgcmVmbGVjdGVkTGlnaHQ6UmVmbGVjdGVkTGlnaHQ7XHJcbiAgICAgICAgICAgIGxldCBkb3ROTDpmMzIgPSBzYXR1cmF0ZShkb3QoIGdlb21ldHJ5Lm5vcm1hbCxnZW9tZXRyeS52aWV3RGlyKSk7XHJcbiAgICAgICAgICAgIGxldCBpcnJhZGlhbmNlOnZlYzM8ZjMyPiA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3IqMy4xNDE1OTI2O1xyXG4gICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciA9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xyXG4gICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XHJcbiAgICAgICAgICAgIHJldHVybiByZWZsZWN0ZWRMaWdodDtcclxuICAgICAgICB9XHJcbiAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaWJsKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICBmbiBnZXRMaWdodFByb2JlUmFkaWFuY2UoIHZpZXdEaXI6dmVjMzxmMzI+LG5vcm1hbDp2ZWMzPGYzMj4sIHJvdWdobmVzczpmMzIgKS0+dmVjMzxmMzI+e1xyXG4gICAgdmFyIHJlZmxlY3RWZWM6dmVjMzxmMzI+ID0gcmVmbGVjdCggLXZpZXdEaXIsIG5vcm1hbCApO1xyXG4gICAgcmVmbGVjdFZlYy54ID0gLXJlZmxlY3RWZWMueDsgLy8gVGV4dHVyZUN1YmUgaXMgbGVmdC1oYW5kLHNvIHggbmVlZCBpbnZlcnNlXHJcbiAgICBsZXQgbWlwQ291bnQ6ZjMyID0gMTAuMDsgLy8gcmVzb2x1dGlvbiBvZiAyNTZ4MjU2XHJcbiAgICBsZXQgbG9kOmYzMiA9IHJvdWdobmVzcyAqIG1pcENvdW50O1xyXG4gICAgbGV0IHNwZWN1bGFyTGlnaHQ6dmVjMzxmMzI+ID0gdGV4dHVyZVNhbXBsZUxldmVsKHNwZWN1bGFyRW52VGV4dHVyZSxzcGVjdWxhckVudlNhbXBsZXIsIHJlZmxlY3RWZWMsIGxvZCkucmdiO1xyXG4gICAgcmV0dXJuIHNwZWN1bGFyTGlnaHQ7XHJcbiAgfVxyXG4gIGZuIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlOmFycmF5PHZlYzM8ZjMyPiw5Piwgbm9ybWFsOnZlYzM8ZjMyPiktPnZlYzM8ZjMyPiB7XHJcbiAgICB2YXIgd29ybGROb3JtYWw6dmVjMzxmMzI+ID0gbm9ybWFsO1xyXG4gICAgd29ybGROb3JtYWwueCA9IC1ub3JtYWwueDtcclxuICAgIHZhciBpcnJhZGlhbmNlOnZlYzM8ZjMyPiA9IGxpZ2h0UHJvYmVbMF07XHJcbiAgICBpcnJhZGlhbmNlKz1saWdodFByb2JlWzFdICogKG5vcm1hbC55KTtcclxuICAgIGlycmFkaWFuY2UrPWxpZ2h0UHJvYmVbMl0gKiAobm9ybWFsLnopIDtcclxuICAgIGlycmFkaWFuY2UrPWxpZ2h0UHJvYmVbM10gKiAobm9ybWFsLngpIDtcclxuXHJcbiAgICBpcnJhZGlhbmNlKz1saWdodFByb2JlWzRdICogKG5vcm1hbC55ICogbm9ybWFsLngpIDtcclxuICAgIGlycmFkaWFuY2UrPWxpZ2h0UHJvYmVbNV0gKiAobm9ybWFsLnkgKiBub3JtYWwueikgO1xyXG4gICAgaXJyYWRpYW5jZSs9bGlnaHRQcm9iZVs2XSAqICgzLjAgKiBub3JtYWwueiAqIG5vcm1hbC56IC0gMS4wKTtcclxuICAgIGlycmFkaWFuY2UrPWxpZ2h0UHJvYmVbN10gKiAobm9ybWFsLnogKiBub3JtYWwueCkgO1xyXG4gICAgaXJyYWRpYW5jZSs9bGlnaHRQcm9iZVs4XSAqIChub3JtYWwueCAqIG5vcm1hbC54IC0gbm9ybWFsLnkgKiBub3JtYWwueSk7XHJcblxyXG4gICAgcmV0dXJuIG1heChpcnJhZGlhbmNlLCB2ZWMzPGYzMj4oMC4wLDAuMCwwLjApKTtcclxuICB9XHJcbiAgZm4gREZHQXBwcm94KCBzcGVjdWxhckNvbG9yOnZlYzM8ZjMyPiwgcm91Z2huZXNzOmYzMixkb3ROVjpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgIGNvbnN0IGMwOnZlYzQ8ZjMyPiA9IHZlYzQ8ZjMyPiggLSAxLCAtIDAuMDI3NSwgLSAwLjU3MiwgMC4wMjIgKTtcclxuICAgIGxldCBjMTp2ZWM0PGYzMj4gPSB2ZWM0PGYzMj4oIDEsIDAuMDQyNSwgMS4wNCwgLSAwLjA0ICk7XHJcbiAgICBsZXQgcjp2ZWM0PGYzMj4gPSByb3VnaG5lc3MgKiBjMCArIGMxO1xyXG4gICAgbGV0IGEwMDQ6ZjMyID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcclxuICAgIGxldCBmYWI6dmVjMjxmMzI+ID0gdmVjMjxmMzI+KCAtIDEuMDQsIDEuMDQgKSAqIGEwMDQgKyByLnp3O1xyXG4gICAgcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIGZhYi55O1xyXG4gIH1cclxuICAvL+mXtOaOpeWFieeFp1xyXG4gIGZuIGluZGlyZWN0RGlmZnVzZV9QaHlzaWNhbChnZW9tZXRyeTpHZW9tZXRyeSwgbWF0ZXJpYWw6UGh5c2ljYWxNYXRlcmlhbCApLT5SZWZsZWN0ZWRMaWdodCB7XHJcbiAgICAgIHZhciByZWZsZWN0ZWRMaWdodDpSZWZsZWN0ZWRMaWdodDtcclxuICAgICAgdmFyIGlycmFkaWFuY2U6dmVjMzxmMzI+ID0gbGlnaHRVbmlmb3Jtcy5hbWJpZW50Lnh5eipsaWdodFVuaWZvcm1zLmFtYmllbnQudztcclxuICAgICAgaXJyYWRpYW5jZSAqPSBQSTtcclxuICAgICAgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xyXG4gICAgICByZXR1cm4gcmVmbGVjdGVkTGlnaHQ7XHJcbiAgfVxyXG4gIC8v6Ze05o6l6auY5YWJXHJcbiAgZm4gaW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbChnZW9tZXRyeTpHZW9tZXRyeSwgbWF0ZXJpYWw6UGh5c2ljYWxNYXRlcmlhbCktPlJlZmxlY3RlZExpZ2h0IHtcclxuICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAvLyBJQkwgc3BlY3VsYXJcclxuICAgICAgbGV0IHJhZGlhbmNlOnZlYzM8ZjMyPiA9IGdldExpZ2h0UHJvYmVSYWRpYW5jZShnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyk7XHJcbiAgICAgIGxldCByYWRpYW5jZUF0dGVudWF0aW9uOmYzMiA9IDEuMDtcclxuICAgICAgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSByYWRpYW5jZUF0dGVudWF0aW9uICogcmFkaWFuY2UgKiBERkdBcHByb3gobWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwucm91Z2huZXNzLCBnZW9tZXRyeS5kb3ROViApO1xyXG4gICAgICByZXR1cm4gcmVmbGVjdGVkTGlnaHQ7XHJcbiAgICB9XHJcbiAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBickZ1bmN0aW9uKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuXHJcbiAgICAjaWYgJHtkZWZpbmVzLkRJVEhFUklOR31cclxuICAgICAgICBmbiBkaXRoZXJpbmcoY29sb3I6dmVjMzxmMzI+ICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCBncmlkX3Bvc2l0aW9uOmYzMiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApO1xyXG4gICAgICAgICAgICBsZXQgZGl0aGVyX3NoaWZ0X1JHQjp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7XHJcbiAgICAgICAgICAgIGRpdGhlcl9zaGlmdF9SR0IgPSBtaXgoIDIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIC0yLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCBncmlkX3Bvc2l0aW9uICk7XHJcbiAgICAgICAgICAgIHJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0V9XHJcbiAgICAgICAgZm4gQlJERl9HR1hfSXJpZGVzY2VuY2UoIGxpZ2h0RGlyOnZlYzM8ZjMyPiwgdmlld0Rpcjp2ZWMzPGYzMj4sbm9ybWFsOnZlYzM8ZjMyPiwgZjA6dmVjMzxmMzI+LCBmOTA6ZjMyLGlyaWRlc2NlbmNlOmYzMiwgaXJpZGVzY2VuY2VGcmVzbmVsOnZlYzM8ZjMyPixyb3VnaG5lc3M6ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCBhbHBoYTpmMzIgPSBwb3cyKCByb3VnaG5lc3MgKTtcclxuICAgICAgICAgICAgbGV0IGhhbGZEaXI6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcclxuICAgICAgICAgICAgbGV0IGRvdE5MOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xyXG4gICAgICAgICAgICBsZXQgZG90TlY6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcclxuICAgICAgICAgICAgbGV0IGRvdE5IOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7XHJcbiAgICAgICAgICAgIGxldCBkb3RWSDpmMzIgPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTtcclxuICAgICAgICAgICAgbGV0IEY6dmVjMzxmMzI+ID0gbWl4KCBGX1NjaGxpY2soIGYwLCBmOTAsIGRvdFZIICksIGlyaWRlc2NlbmNlRnJlc25lbCwgaXJpZGVzY2VuY2UgKTtcclxuICAgICAgICAgICAgbGV0IFY6ZjMyID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XHJcbiAgICAgICAgICAgIGxldCBEOmYzMiA9IERfR0dYKCBhbHBoYSwgZG90TkggKTtcclxuICAgICAgICAgICAgcmV0dXJuIEYgKiAoIFYgKiBEICk7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfU0hFRU59XHJcbiAgICAgICAgZm4gRF9DaGFybGllKCByb3VnaG5lc3M6ZjMyLGRvdE5IOmYzMiApLT5mMzIge1xyXG4gICAgICAgICAgICBsZXQgYWxwaGE6ZjMyID0gcG93Miggcm91Z2huZXNzICk7XHJcbiAgICAgICAgICAgIGxldCBpbnZBbHBoYTpmMzIgPSAxLjAgLyBhbHBoYTtcclxuICAgICAgICAgICAgbGV0IGNvczJoOmYzMiA9IGRvdE5IICogZG90Tkg7XHJcbiAgICAgICAgICAgIGxldCBzaW4yaDpmMzIgPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTtcclxuICAgICAgICAgICAgcmV0dXJuICggMi4wICsgaW52QWxwaGEgKSAqIHBvdyggc2luMmgsIGludkFscGhhICogMC41ICkgLyAoIDIuMCAqIFBJICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIFZfTmV1YmVsdCggZG90TlY6ZjMyLCBkb3ROTDpmMzIgKS0+ZjMyIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNhdHVyYXRlKCAxLjAgLyAoIDQuMCAqICggZG90TkwgKyBkb3ROViAtIGRvdE5MICogZG90TlYgKSApICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIEJSREZfU2hlZW4obGlnaHREaXI6dmVjMzxmMzI+LCB2aWV3RGlyOnZlYzM8ZjMyPiwgbm9ybWFsOnZlYzM8ZjMyPixzaGVlbkNvbG9yOnZlYzM8ZjMyPixzaGVlblJvdWdobmVzczpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgbGV0IGhhbGZEaXI6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcclxuICAgICAgICAgICAgbGV0IGRvdE5MOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xyXG4gICAgICAgICAgICBsZXQgZG90TlY6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcclxuICAgICAgICAgICAgbGV0IGRvdE5IOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7XHJcbiAgICAgICAgICAgIGxldCBEOmYzMiA9IERfQ2hhcmxpZSggc2hlZW5Sb3VnaG5lc3MsIGRvdE5IICk7XHJcbiAgICAgICAgICAgIGxldCBWOmYzMiA9IFZfTmV1YmVsdCggZG90TlYsIGRvdE5MICk7XHJcbiAgICAgICAgICAgIHJldHVybiBzaGVlbkNvbG9yICogKCBEICogViApO1xyXG4gICAgICAgIH1cclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAgICAgIGxldCBYWVpfVE9fUkVDNzA5OiBtYXQzeDM8ZjMyPiA9IG1hdDN4MzxmMzI+KFxyXG4gICAgICAgIDMuMjQwNDU0MiwgLTAuOTY5MjY2MCwgMC4wNTU2NDM0LCAtMS41MzcxMzg1LCAxLjg3NjAxMDgsIC0wLjIwNDAyNTksIC0wLjQ5ODUzMTQsIDAuMDQxNTU2MCwgMS4wNTcyMjUyXHJcbiAgICAgICAgKTtcclxuICAgICAgICBmbiBGcmVzbmVsMFRvSW9yKCBmcmVzbmVsMDp2ZWMzPGYzMj4gKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgbGV0IHNxcnRGMDp2ZWMzPGYzMj4gPSBzcXJ0KCBmcmVzbmVsMCApO1xyXG4gICAgICAgICAgICByZXR1cm4gKCB2ZWMzPGYzMj4oIDEuMCApICsgc3FydEYwICkgLyAoIHZlYzM8ZjMyPiggMS4wICkgLSBzcXJ0RjAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gSW9yVG9GcmVzbmVsMCh0cmFuc21pdHRlZElvcjp2ZWMzPGYzMj4saW5jaWRlbnRJb3I6ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgIHJldHVybiBwb3cyVmVjdG9yKCAoIHRyYW5zbWl0dGVkSW9yIC0gdmVjMzxmMzI+KCBpbmNpZGVudElvciApICkgLyAoIHRyYW5zbWl0dGVkSW9yICsgdmVjMzxmMzI+KCBpbmNpZGVudElvciApICkgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gSW9yVG9GcmVzbmVsMCh0cmFuc21pdHRlZElvcjpmMzIsIGluY2lkZW50SW9yOmYzMiApLT5mMzIge1xyXG4gICAgICAgICAgICByZXR1cm4gcG93MlZlY3RvciggKCB0cmFuc21pdHRlZElvciAtIGluY2lkZW50SW9yICkgLyAoIHRyYW5zbWl0dGVkSW9yICsgaW5jaWRlbnRJb3IgKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIGV2YWxTZW5zaXRpdml0eShPUEQ6ZjMyLHNoaWZ0OnZlYzM8ZjMyPiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgICAgICBsZXQgcGhhc2U6ZjMyID0gMi4wICogUEkgKiBPUEQgKiAxLjBlLTk7XHJcbiAgICAgICAgICAgIGxldCB2YWw6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KCA1LjQ4NTZlLTEzLCA0LjQyMDFlLTEzLCA1LjI0ODFlLTEzICk7XHJcbiAgICAgICAgICAgIGxldCBwb3M6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KCAxLjY4MTBlKzA2LCAxLjc5NTNlKzA2LCAyLjIwODRlKzA2ICk7XHJcbiAgICAgICAgICAgIGxldCB2YXJ0OnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggNC4zMjc4ZSswOSwgOS4zMDQ2ZSswOSwgNi42MTIxZSswOSApO1xyXG4gICAgICAgICAgICBsZXQgeHl6OnZlYzM8ZjMyPiA9IHZhbCAqIHNxcnQoIDIuMCAqIFBJICogdmFydCApICogY29zKCBwb3MgKiBwaGFzZSArIHNoaWZ0ICkgKiBleHAoIC0gcG93MiggcGhhc2UgKSAqIHZhcnQgKTtcclxuICAgICAgICAgICAgeHl6LnggKz0gOS43NDcwZS0xNCAqIHNxcnQoIDIuMCAqIFBJICogNC41MjgyZSswOSApICogY29zKCAyLjIzOTllKzA2ICogcGhhc2UgKyBzaGlmdFsgMCBdICkgKiBleHAoIC0gNC41MjgyZSswOSAqIHBvdzIoIHBoYXNlICkgKTtcclxuICAgICAgICAgICAgeHl6IC89IDEuMDY4NWUtNztcclxuICAgICAgICAgICAgbGV0IHJnYjp2ZWMzPGYzMj4gPSBYWVpfVE9fUkVDNzA5ICogeHl6O1xyXG4gICAgICAgICAgICByZXR1cm4gcmdiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmbiBldmFsSXJpZGVzY2VuY2Uob3V0c2lkZUlPUjpmMzIsIGV0YTI6ZjMyLGNvc1RoZXRhMTpmMzIsdGhpbkZpbG1UaGlja25lc3M6ZjMyLGJhc2VGMDp2ZWMzPGYzMj4gKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgdmFyIEk6dmVjMzxmMzI+O1xyXG4gICAgICAgICAgICBsZXQgaXJpZGVzY2VuY2VJT1I6ZjMyID0gbWl4KCBvdXRzaWRlSU9SLCBldGEyLCBzbW9vdGhzdGVwKCAwLjAsIDAuMDMsIHRoaW5GaWxtVGhpY2tuZXNzICkgKTtcclxuICAgICAgICAgICAgbGV0IHNpblRoZXRhMlNxOmYzMiA9IHBvdzIoIG91dHNpZGVJT1IgLyBpcmlkZXNjZW5jZUlPUiApICogKCAxLjAgLSBwb3cyKCBjb3NUaGV0YTEgKSApO1xyXG4gICAgICAgICAgICBsZXQgY29zVGhldGEyU3E6ZjMyID0gMS4wIC0gc2luVGhldGEyU3E7XHJcbiAgICAgICAgICAgIGlmICggY29zVGhldGEyU3EgPCAwLjAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmVjMzxmMzI+KCAxLjAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgY29zVGhldGEyOmYzMiA9IHNxcnQoIGNvc1RoZXRhMlNxICk7XHJcbiAgICAgICAgICAgIGxldCBSMDpmMzIgPSBJb3JUb0ZyZXNuZWwwKCBpcmlkZXNjZW5jZUlPUiwgb3V0c2lkZUlPUiApO1xyXG4gICAgICAgICAgICBsZXQgUjEyOmYzMiA9IEZfU2NobGljayggUjAsIDEuMCwgY29zVGhldGExICk7XHJcbiAgICAgICAgICAgIGxldCBSMjE6ZjMyID0gUjEyO1xyXG4gICAgICAgICAgICBsZXQgVDEyMTpmMzIgPSAxLjAgLSBSMTI7XHJcbiAgICAgICAgICAgIGxldCBwaGkxMjpmMzIgPSAwLjA7XHJcbiAgICAgICAgICAgIGlmICggaXJpZGVzY2VuY2VJT1IgPCBvdXRzaWRlSU9SICkgcGhpMTIgPSBQSTtcclxuICAgICAgICAgICAgbGV0IHBoaTIxOmYzMiA9IFBJIC0gcGhpMTI7XHJcbiAgICAgICAgICAgIGxldCBiYXNlSU9SOnZlYzM8ZjMyPiA9IEZyZXNuZWwwVG9Jb3IoIGNsYW1wKCBiYXNlRjAsIDAuMCwgMC45OTk5ICkgKTtcclxuICAgICAgICAgICAgbGV0IFIxOnZlYzM8ZjMyPiA9IElvclRvRnJlc25lbDAoIGJhc2VJT1IsIGlyaWRlc2NlbmNlSU9SICk7XHJcbiAgICAgICAgICAgIGxldCBSMjM6dmVjMzxmMzI+ID0gRl9TY2hsaWNrKCBSMSwgMS4wLCBjb3NUaGV0YTIgKTtcclxuICAgICAgICAgICAgbGV0IHBoaTIzOnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggMC4wICk7XHJcbiAgICAgICAgICAgIGlmICggYmFzZUlPUlsgMCBdIDwgaXJpZGVzY2VuY2VJT1IgKSBwaGkyM1sgMCBdID0gUEk7XHJcbiAgICAgICAgICAgIGlmICggYmFzZUlPUlsgMSBdIDwgaXJpZGVzY2VuY2VJT1IgKSBwaGkyM1sgMSBdID0gUEk7XHJcbiAgICAgICAgICAgIGlmICggYmFzZUlPUlsgMiBdIDwgaXJpZGVzY2VuY2VJT1IgKSBwaGkyM1sgMiBdID0gUEk7XHJcbiAgICAgICAgICAgIGxldCBPUEQ6ZjMyID0gMi4wICogaXJpZGVzY2VuY2VJT1IgKiB0aGluRmlsbVRoaWNrbmVzcyAqIGNvc1RoZXRhMjtcclxuICAgICAgICAgICAgbGV0IHBoaTp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIHBoaTIxICkgKyBwaGkyMztcclxuICAgICAgICAgICAgbGV0IFIxMjM6dmVjMzxmMzI+ID0gY2xhbXAoIFIxMiAqIFIyMywgMWUtNSwgMC45OTk5ICk7XHJcbiAgICAgICAgICAgIGxldCByMTIzOnZlYzM8ZjMyPiA9IHNxcnQoIFIxMjMgKTtcclxuICAgICAgICAgICAgbGV0IFJzOnZlYzM8ZjMyPiA9IHBvdzIoIFQxMjEgKSAqIFIyMyAvICggdmVjMzxmMzI+KCAxLjAgKSAtIFIxMjMgKTtcclxuICAgICAgICAgICAgbGV0IEMwOnZlYzM8ZjMyPiA9IFIxMiArIFJzO1xyXG4gICAgICAgICAgICBJID0gQzA7XHJcbiAgICAgICAgICAgIGxldCBDbTp2ZWMzPGYzMj4gPSBScyAtIFQxMjE7XHJcbiAgICAgICAgICAgIGZvciAoIGxldCBtIDogdTMyID0gMTttIDw9IDI7ICsrIG0gKSB7XHJcbiAgICAgICAgICAgICAgICBDbSAqPSByMTIzO1xyXG4gICAgICAgICAgICAgICAgU206dmVjMzxmMzI+ID0gMi4wICogZXZhbFNlbnNpdGl2aXR5KCBmMzIoIG0gKSAqIE9QRCwgZjMyKCBtICkgKiBwaGkgKTtcclxuICAgICAgICAgICAgICAgIEkgKz0gQ20gKiBTbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbWF4KCBJLCB2ZWMzPGYzMj4oIDAuMCApICk7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcbiAgICBjb25zdCBjbGVhcmNvYXRTcGVjdWxhcjp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIDAuMCApO1xyXG4gICAgY29uc3Qgc2hlZW5TcGVjdWxhcjp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIDAuMCApO1xyXG5cclxuICAgIGZuIElCTFNoZWVuQlJERiggbm9ybWFsOnZlYzM8ZjMyPiwgdmlld0Rpcjp2ZWMzPGYzMj4sIHJvdWdobmVzczpmMzIgKS0+ZjMyIHtcclxuICAgICAgICBsZXQgZG90TlY6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcclxuICAgICAgICBsZXQgcjI6ZjMyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xyXG4gICAgICAgIGxldCBhOmYzMiA9c2VsZWN0KC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NSwtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSxyb3VnaG5lc3MgPCAwLjI1KTtcclxuICAgICAgICAvL2xldCBhOmYzMiA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTtcclxuICAgICAgICBsZXQgYjpmMzI9c2VsZWN0KDEuOTcgKiByMiAtIDMuMjcgKiByb3VnaG5lc3MgKyAwLjcyLDQ0LjAgKiByMiAtIDIzLjcgKiByb3VnaG5lc3MgKyAzLjI2LCByb3VnaG5lc3MgPCAwLjI1KTtcclxuICAgICAgICAvL2xldCBiOmYzMiA9IHJvdWdobmVzcyA8IDAuMjUgPyA0NC4wICogcjIgLSAyMy43ICogcm91Z2huZXNzICsgMy4yNiA6IDEuOTcgKiByMiAtIDMuMjcgKiByb3VnaG5lc3MgKyAwLjcyO1xyXG4gICAgICAgIC8vbGV0IERHOmYzMiA9IGV4cCggYSAqIGRvdE5WICsgYiApICsgKCByb3VnaG5lc3MgPCAwLjI1ID8gMC4wIDogMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICkgKTtcclxuICAgICAgICBsZXQgREc6ZjMyID0gZXhwKCBhICogZG90TlYgKyBiICkgKyBzZWxlY3QoMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICksMC4wLHJvdWdobmVzcyA8IDAuMjUpO1xyXG4gICAgICAgIHJldHVybiBzYXR1cmF0ZSggREcgKiBSRUNJUFJPQ0FMX1BJICk7XHJcbiAgICB9XHJcbiAgICBmbiBERkdBcHByb3goIHNwZWN1bGFyQ29sb3I6dmVjMzxmMzI+LCByb3VnaG5lc3M6ZjMyLGRvdE5WOmYzMiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIGNvbnN0IGMwOnZlYzQ8ZjMyPiA9IHZlYzQ8ZjMyPiggLSAxLCAtIDAuMDI3NSwgLSAwLjU3MiwgMC4wMjIgKTtcclxuICAgICAgICBsZXQgYzE6dmVjNDxmMzI+ID0gdmVjNDxmMzI+KCAxLCAwLjA0MjUsIDEuMDQsIC0gMC4wNCApO1xyXG4gICAgICAgIGxldCByOnZlYzQ8ZjMyPiA9IHJvdWdobmVzcyAqIGMwICsgYzE7XHJcbiAgICAgICAgbGV0IGEwMDQ6ZjMyID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcclxuICAgICAgICBsZXQgZmFiOnZlYzI8ZjMyPiA9IHZlYzI8ZjMyPiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dztcclxuICAgICAgICByZXR1cm4gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgZmFiLnk7XHJcbiAgICB9XHJcbiAgICBmbiBFbnZpcm9ubWVudEJSREYoIG5vcm1hbDp2ZWMzPGYzMj4sdmlld0Rpcjp2ZWMzPGYzMj4sc3BlY3VsYXJDb2xvcjp2ZWMzPGYzMj4sIHNwZWN1bGFyRjkwOmYzMixyb3VnaG5lc3M6ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgbGV0IGZhYjp2ZWMyPGYzMj4gPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XHJcbiAgICAgICAgcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZuIGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlY6ZjMyLCBhbWJpZW50T2NjbHVzaW9uOmYzMiwgcm91Z2huZXNzOmYzMiApLT5mMzIge1xyXG4gICAgICAgIHJldHVybiBzYXR1cmF0ZSggcG93KCBkb3ROViArIGFtYmllbnRPY2NsdXNpb24sIGV4cDIoIC0gMTYuMCAqIHJvdWdobmVzcyAtIDEuMCApICkgLSAxLjAgKyBhbWJpZW50T2NjbHVzaW9uICk7XHJcbiAgICB9XHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9UUkFOU01JU1NJT059XHJcblxyXG4gICAgZm4gZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBuOnZlYzM8ZjMyPiwgdjp2ZWMzPGYzMj4sIHRoaWNrbmVzczpmMzIsIGlvcjpmMzIsIG1vZGVsTWF0cml4Om1hdDR4NDpmMzIpLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIHZhciByZWZyYWN0aW9uVmVjdG9yOnZlYzM8ZjMyPiA9IHJlZnJhY3QoIC0gdiwgbm9ybWFsaXplKCBuICksIDEuMCAvIGlvciApO1xyXG4gICAgICAgIHZhciBtb2RlbFNjYWxlOnZlYzM8ZjMyPjtcclxuICAgICAgICBtb2RlbFNjYWxlLnggPSBsZW5ndGgoIHZlYzM8ZjMyPiggbW9kZWxNYXRyaXhbMF0ueHl6ICkgKTtcclxuICAgICAgICBtb2RlbFNjYWxlLnkgPSBsZW5ndGgoIHZlYzM8ZjMyPiggbW9kZWxNYXRyaXhbMV0ueHl6ICkgKTtcclxuICAgICAgICBtb2RlbFNjYWxlLnogPSBsZW5ndGgoIHZlYzM8ZjMyPiggbW9kZWxNYXRyaXhbMl0ueHl6ICkgKTtcclxuICAgICAgICByZXR1cm4gbm9ybWFsaXplKCByZWZyYWN0aW9uVmVjdG9yICkgKiB0aGlja25lc3MgKiBtb2RlbFNjYWxlO1xyXG4gICAgfVxyXG4gICAgZm4gYXBwbHlJb3JUb1JvdWdobmVzcyhyb3VnaG5lc3M6ZjMyLCBpb3I6ZjMyICktPmYzMiB7XHJcbiAgICAgICAgcmV0dXJuIHJvdWdobmVzcyAqIGNsYW1wKCBpb3IgKiAyLjAgLSAyLjAsIDAuMCwgMS4wICk7XHJcbiAgICB9XHJcbiAgICBmbiBnZXRUcmFuc21pc3Npb25TYW1wbGUoIGZyYWdDb29yZDp2ZWMyPGYzMj4sIHJvdWdobmVzczpmMzIsaW9yOmYzMiApLT52ZWM0PGYzMj4ge1xyXG4gICAgICAgIGxldCBmcmFtZWJ1ZmZlckxvZDpmMzIgPSBsb2cyKCBtYXRlcmlhbFVuaWZvcm0udHJhbnNtaXNzaW9uU2FtcGxlclNpemUueCApICogYXBwbHlJb3JUb1JvdWdobmVzcyggcm91Z2huZXNzLCBpb3IgKTtcclxuICAgICAgICByZXR1cm4gdGV4dHVyZVNhbXBsZUxldmVsKHRyYW5zbWlzc2lvblNhbXBsZXJUZXh0dXJlLGJhc2VTYW1wbGVyLGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QpO1xyXG5cclxuICAgIH1cclxuICAgIGZuIGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIHJhZGlhbmNlOnZlYzM8dmVjMz4sIHRyYW5zbWlzc2lvbkRpc3RhbmNlOmYzMixhdHRlbnVhdGlvbkNvbG9yOnZlYzM8ZjMyPixhdHRlbnVhdGlvbkRpc3RhbmNlOmYzMiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIGlmICggaXNpbmYoIGF0dGVudWF0aW9uRGlzdGFuY2UgKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJhZGlhbmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGF0dGVudWF0aW9uQ29lZmZpY2llbnQ6dmVjMzxmMzI+ID0gLWxvZyggYXR0ZW51YXRpb25Db2xvciApIC8gYXR0ZW51YXRpb25EaXN0YW5jZTtcclxuICAgICAgICAgICAgbGV0IHRyYW5zbWl0dGFuY2U6dmVjMzxmMzI+ID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNtaXR0YW5jZSAqIHJhZGlhbmNlO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgfVxyXG4gICAgZm4gZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbiggbjp2ZWMzPGYzMj4sdjp2ZWMzPGYzMj4sIHJvdWdobmVzczpmMzIsIGRpZmZ1c2VDb2xvcjp2ZWMzPGYzMj4sc3BlY3VsYXJDb2xvcjp2ZWMzPGYzMj4sIHNwZWN1bGFyRjkwOmYzMixwb3NpdGlvbjp2ZWMzPGYzMj4sIG1vZGVsTWF0cml4Om1hdDR4NDxmMzI+LCB2aWV3TWF0cml4Om1hdDR4NDxmMzI+LHByb2pNYXRyaXg6bWF0NHg0PGYzMj4saW9yOmYzMiwgdGhpY2tuZXNzOmYzMixhdHRlbnVhdGlvbkNvbG9yOnZlYzM8ZjMyPixhdHRlbnVhdGlvbkRpc3RhbmNlOmYzMiApLT52ZWM0PGYzMj4ge1xyXG4gICAgICAgIGxldCB0cmFuc21pc3Npb25SYXk6dmVjMzxmMzI+ID0gZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBuLCB2LCB0aGlja25lc3MsIGlvciwgbW9kZWxNYXRyaXggKTtcclxuICAgICAgICBsZXQgcmVmcmFjdGVkUmF5RXhpdDp2ZWMzPGYzMj4gPSBwb3NpdGlvbiArIHRyYW5zbWlzc2lvblJheTtcclxuICAgICAgICBsZXQgbmRjUG9zOnZlYzQ8ZjMyPiA9IHByb2pNYXRyaXggKiB2aWV3TWF0cml4ICogdmVjNCggcmVmcmFjdGVkUmF5RXhpdCwgMS4wICk7XHJcbiAgICAgICAgbGV0IHJlZnJhY3Rpb25Db29yZHM6dmVjMjxmMzI+ID0gbmRjUG9zLnh5IC8gbmRjUG9zLnc7XHJcbiAgICAgICAgcmVmcmFjdGlvbkNvb3JkcyArPSAxLjA7XHJcbiAgICAgICAgcmVmcmFjdGlvbkNvb3JkcyAvPSAyLjA7XHJcbiAgICAgICAgbGV0IHRyYW5zbWl0dGVkTGlnaHQ6dmVjNDxmMzI+ID0gZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCByZWZyYWN0aW9uQ29vcmRzLCByb3VnaG5lc3MsIGlvciApO1xyXG4gICAgICAgIGxldCBhdHRlbnVhdGVkQ29sb3I6dmVjMzxmMzI+ID0gYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggdHJhbnNtaXR0ZWRMaWdodC5yZ2IsIGxlbmd0aCggdHJhbnNtaXNzaW9uUmF5ICksIGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgRjp2ZWMzPGYzMj4gPSBFbnZpcm9ubWVudEJSREYoIG4sIHYsIHNwZWN1bGFyQ29sb3IsIHNwZWN1bGFyRjkwLCByb3VnaG5lc3MgKTtcclxuICAgICAgICByZXR1cm4gdmVjNDxmMzI+KCAoIDEuMCAtIEYgKSAqIGF0dGVudWF0ZWRDb2xvciAqIGRpZmZ1c2VDb2xvciwgdHJhbnNtaXR0ZWRMaWdodC5hICk7XHJcbiAgICB9XHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9CVU1QVEVYVFVSRX1cclxuICAgICAgICBmbiBkSGR4eV9md2QoKS0+dmVjMjxmMzI+IHtcclxuICAgICAgICAgICAgbGV0IGRTVGR4OnZlYzI8ZjMyPiA9IGRwZHgoIHZVdiApO1xyXG4gICAgICAgICAgICBsZXQgZFNUZHk6dmVjMjxmMzI+ID0gZHBkeSggdlV2ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgSGxsOmYzMiA9IG1hdGVyaWFsVW5pZm9ybS5idW1wU2NhbGUgKiB0ZXh0dXJlU2FtcGxlKGJ1bXBUZXh0dXJlLCBiYXNlU2FtcGxlciwgdlV2KS54O1xyXG4gICAgICAgICAgICBsZXQgZEJ4OmYzMiA9IG1hdGVyaWFsVW5pZm9ybS5idW1wU2NhbGUgKiB0ZXh0dXJlU2FtcGxlKGJ1bXBUZXh0dXJlLCBiYXNlU2FtcGxlciwgdlV2ICsgZFNUZHgpLnggLSBIbGw7XHJcbiAgICAgICAgICAgIGxldCBkQnk6ZjMyID0gbWF0ZXJpYWxVbmlmb3JtLmJ1bXBTY2FsZSAqIHRleHR1cmVTYW1wbGUoYnVtcFRleHR1cmUsIGJhc2VTYW1wbGVyLCB2VXYgKyBkU1RkeSkueCAtIEhsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHZlYzI8ZjMyPiggZEJ4LCBkQnkgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gcGVydHVyYk5vcm1hbEFyYiggc3VyZl9wb3M6dmVjMzxmMzI+LCBzdXJmX25vcm06dmVjMzxmMzI+LCBkSGR4eTp2ZWMyPGYzMj4sIGZhY2VEaXJlY3Rpb246ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCB2U2lnbWFYOnZlYzM8ZjMyPiA9IGRwZHgoIHN1cmZfcG9zLnh5eiApO1xyXG4gICAgICAgICAgICBsZXQgdlNpZ21hWTp2ZWMzPGYzMj4gPSBkcGR5KCBzdXJmX3Bvcy54eXogKTtcclxuICAgICAgICAgICAgbGV0IHZOOnZlYzM8ZjMyPiA9IHN1cmZfbm9ybTtcclxuICAgICAgICAgICAgbGV0IFIxOnZlYzM8ZjMyPiA9IGNyb3NzKCB2U2lnbWFZLCB2TiApO1xyXG4gICAgICAgICAgICBsZXQgUjI6dmVjMzxmMzI+ID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7XHJcbiAgICAgICAgICAgIGxldCBmRGV0OmYzMiA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247XHJcbiAgICAgICAgICAgIGxldCB2R3JhZDp2ZWMzPGYzMj4gPSBzaWduKCBmRGV0ICkgKiAoIGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApO1xyXG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKCBhYnMoIGZEZXQgKSAqIHN1cmZfbm9ybSAtIHZHcmFkICk7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgLy8hIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxURVhUVVJFICkgfHwgZGVmaW5lZCAoIFVTRV9DTEVBUkNPQVRfTk9STUFMVEVYVFVSRSApIClcclxuICAgICNpZiAkeyghZGVmaW5lcy5VU0VfVEFOR0VOVCAmJiBkZWZpbmVzLlRBTkdFTlRTUEFDRV9OT1JNQUxURVhUVVJFKSB8fCBkZWZpbmVzLlVTRV9DTEVBUkNPQVRfTk9STUFMVEVYVFVSRX1cclxuICAgIGZuIHBlcnR1cmJOb3JtYWwyQXJiKCBleWVfcG9zOnZlYzM8ZjMyPiwgc3VyZl9ub3JtOnZlYzM8ZjMyPiwgdGV4dHVyZU46dmVjMzxmMzI+LCBmYWNlRGlyZWN0aW9uOmYzMiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIGxldCBxMDp2ZWMzPGYzMj4gPSBkcGR4KCBleWVfcG9zLnh5eiApO1xyXG4gICAgICAgIGxldCBxMTp2ZWMzPGYzMj4gPSBkcGR5KCBleWVfcG9zLnh5eiApO1xyXG4gICAgICAgIGxldCBzdDA6dmVjMjxmMzI+ID0gZHBkeCggdlV2LnN0ICk7XHJcbiAgICAgICAgbGV0IHN0MTp2ZWMyPGYzMj4gPSBkcGR5KCB2VXYuc3QgKTtcclxuICAgICAgICBsZXQgTjp2ZWMzPGYzMj4gPSBzdXJmX25vcm07XHJcbiAgICAgICAgbGV0IHExcGVycDp2ZWMzPGYzMj4gPSBjcm9zcyggcTEsIE4gKTtcclxuICAgICAgICBsZXQgcTBwZXJwOnZlYzM8ZjMyPiA9IGNyb3NzKCBOLCBxMCApO1xyXG4gICAgICAgIGxldCBUOnZlYzM8ZjMyPiA9IHExcGVycCAqIHN0MC54ICsgcTBwZXJwICogc3QxLng7XHJcbiAgICAgICAgbGV0IEI6dmVjMzxmMzI+ID0gcTFwZXJwICogc3QwLnkgKyBxMHBlcnAgKiBzdDEueTtcclxuICAgICAgICBsZXQgZGV0OmYzMiA9IG1heCggZG90KCBULCBUICksIGRvdCggQiwgQiApICk7XHJcbiAgICAgICAgbGV0IHNjYWxlOmYzMiA9ICggZGV0ID09IDAuMCApID8gMC4wIDogZmFjZURpcmVjdGlvbiAqIGludmVyc2VzcXJ0KCBkZXQgKTtcclxuICAgICAgICByZXR1cm4gbm9ybWFsaXplKCBUICogKCB0ZXh0dXJlTi54ICogc2NhbGUgKSArIEIgKiAoIHRleHR1cmVOLnkgKiBzY2FsZSApICsgTiAqIHRleHR1cmVOLnogKTtcclxuICAgIH1cclxuICAgICNlbmRpZlxyXG4gICAgc3RydWN0IE11bHRpQW5kU2luZ2xlU2NhdHRlcntcclxuICAgICAgICBtdWx0aVNjYXR0ZXI6dmVjMzxmMzI+LFxyXG4gICAgICAgIHNpbmdsZVNjYXR0ZXI6dmVjMzxmMzI+XHJcbiAgICB9XHJcbiAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAvLy8vLy8vL2lub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXJcclxuICAgICAgIGZuIGNvbXB1dGVNdWx0aXNjYXR0ZXJpbmdJcmlkZXNjZW5jZSggbm9ybWFsOnZlYzM8ZjMyPiwgdmlld0Rpcjp2ZWMzPGYzMj4sIHNwZWN1bGFyQ29sb3I6dmVjMzxmMzI+LCBzcGVjdWxhckY5MDpmMzIsIGlyaWRlc2NlbmNlOmYzMixpcmlkZXNjZW5jZUYwOnZlYzM8ZjMyPiwgcm91Z2huZXNzOmYzMiApLT5NdWx0aUFuZFNpbmdsZVNjYXR0ZXIge1xyXG4gICAjZWxzZVxyXG4gICAvLy8vLy8vL2lub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXJcclxuICAgICAgIGZuIGNvbXB1dGVNdWx0aXNjYXR0ZXJpbmcoIG5vcm1hbDp2ZWMzPGYzMj4sdmlld0Rpcjp2ZWMzPGYzMj4sIHNwZWN1bGFyQ29sb3I6dmVjMzxmMzI+LCBzcGVjdWxhckY5MDpmMzIsIHJvdWdobmVzczpmMzIpLT5NdWx0aUFuZFNpbmdsZVNjYXR0ZXIge1xyXG4gICAjZW5kaWZcclxuICAgbGV0IGZhYjp2ZWMyPGYzMj4gPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XHJcblxyXG4gICB2YXIgbXVsdGlBbmRTaW5nbGVTY2F0dGVyOk11bHRpQW5kU2luZ2xlU2NhdHRlcjtcclxuXHJcbiAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAgICAgbGV0IEZyOnZlYzM8ZjMyPiA9IG1peCggc3BlY3VsYXJDb2xvciwgaXJpZGVzY2VuY2VGMCwgaXJpZGVzY2VuY2UgKTtcclxuICAgI2Vsc2VcclxuICAgICAgIGxldCBGcjp2ZWMzPGYzMj4gPSBzcGVjdWxhckNvbG9yO1xyXG4gICAjZW5kaWZcclxuICAgICAgIGxldCBGc3NFc3M6dmVjMzxmMzI+ID0gRnIgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7XHJcbiAgICAgICBsZXQgRXNzOmYzMiA9IGZhYi54ICsgZmFiLnk7XHJcbiAgICAgICBsZXQgRW1zOmYzMiA9IDEuMCAtIEVzcztcclxuICAgICAgIGxldCBGYXZnOnZlYzM8ZjMyPiA9IEZyICsgKCAxLjAgLSBGciApICogMC4wNDc2MTk7XHJcbiAgICAgICBsZXQgRm1zOnZlYzM8ZjMyPiA9IEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTtcclxuICAgIC8vICAgIHNpbmdsZVNjYXR0ZXIgKz0gRnNzRXNzO1xyXG4gICAgLy8gICAgbXVsdGlTY2F0dGVyICs9IEZtcyAqIEVtcztcclxuICAgICAgIG11bHRpQW5kU2luZ2xlU2NhdHRlci5tdWx0aVNjYXR0ZXI9Rm1zICogRW1zO1xyXG4gICAgICAgbXVsdGlBbmRTaW5nbGVTY2F0dGVyLnNpbmdsZVNjYXR0ZXI9RnNzRXNzO1xyXG4gICAgICAgcmV0dXJuIG11bHRpQW5kU2luZ2xlU2NhdHRlcjtcclxuICAgfVxyXG4gICAvL+ebtOaOpeWFieeFp1xyXG4gICBmbiBSRV9EaXJlY3RfUGh5c2ljYWwoIGRpcmVjdExpZ2h0OkluY2lkZW50TGlnaHQsIGdlb21ldHJ5Okdlb21ldHJpY0NvbnRleHQsICBtYXRlcmlhbDpQaHlzaWNhbE1hdGVyaWFsKS0+UmVmbGVjdGVkTGlnaHQge1xyXG4gICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAgbGV0IGRvdE5MOmYzMiA9IHNhdHVyYXRlKGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24pKTtcclxuICAgICAgIGxldCBpcnJhZGlhbmNlOnZlYzM8ZjMyPiA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XHJcbiAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVR9XHJcbiAgICAgICAgICAgbGV0IGRvdE5MY2M6ZjMyID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xyXG4gICAgICAgICAgIGxldCBjY0lycmFkaWFuY2U6dmVjMzxmMzI+ID0gZG90TkxjYyAqIGRpcmVjdExpZ2h0LmNvbG9yO1xyXG4gICAgICAgICAgIGNsZWFyY29hdFNwZWN1bGFyICs9IGNjSXJyYWRpYW5jZSAqIEJSREZfR0dYKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7XHJcbiAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTn1cclxuICAgICAgICAgICBzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX1NoZWVuKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc2hlZW5Db2xvciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTtcclxuICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyID0gaXJyYWRpYW5jZSAqIEJSREZfR0dYX0lyaWRlc2NlbmNlKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsIG1hdGVyaWFsLmlyaWRlc2NlbmNlLCBtYXRlcmlhbC5pcmlkZXNjZW5jZUZyZXNuZWwsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xyXG4gICAgICAgI2Vsc2VcclxuICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciA9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcclxuICAgICAgICNlbmRpZlxyXG4gICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xyXG4gICAgICAgcmV0dXJuIHJlZmxlY3RlZExpZ2h0O1xyXG4gICB9XHJcbiAgIC8v6Ze05o6l5YWJ54WnXHJcbiAgIGZuIFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbCggaXJyYWRpYW5jZTp2ZWMzPGYzMj4sIGdlb21ldHJ5Okdlb21ldHJpY0NvbnRleHQsIG1hdGVyaWFsOlBoeXNpY2FsTWF0ZXJpYWwgKS0+UmVmbGVjdGVkTGlnaHQge1xyXG4gICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlID0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XHJcbiAgICAgICByZXR1cm4gcmVmbGVjdGVkTGlnaHQ7XHJcbiAgIH1cclxuICAgLy/pl7TmjqXpq5jlhYlcclxuICAgZm4gUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbCggcmFkaWFuY2U6dmVjMzxmMzI+LCBpcnJhZGlhbmNlOnZlYzM8ZjMyPiwgY2xlYXJjb2F0UmFkaWFuY2U6dmVjMzxmMzI+LCBnZW9tZXRyeTpHZW9tZXRyaWNDb250ZXh0LCBtYXRlcmlhbDpQaHlzaWNhbE1hdGVyaWFsKS0+UmVmbGVjdGVkTGlnaHQge1xyXG4gICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUfVxyXG4gICAgICAgICAgIGNsZWFyY29hdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogRW52aXJvbm1lbnRCUkRGKCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xyXG4gICAgICAgI2VuZGlmXHJcbiAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTn1cclxuICAgICAgICAgICBzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBtYXRlcmlhbC5zaGVlbkNvbG9yICogSUJMU2hlZW5CUkRGKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7XHJcbiAgICAgICAjZW5kaWZcclxuICAgICAgIHZhciBzaW5nbGVTY2F0dGVyaW5nOnZlYzM8ZjMyPjtcclxuICAgICAgIHZhciBtdWx0aVNjYXR0ZXJpbmc6dmVjMzxmMzI+O1xyXG4gICAgICAgbGV0IGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTp2ZWMzPGYzMj4gPSBpcnJhZGlhbmNlICogUkVDSVBST0NBTF9QSTtcclxuICAgICAgIHZhciB0ZW1wTXVsdGlBbmRTaW5nbGVTY2F0dGVyOk11bHRpQW5kU2luZ2xlU2NhdHRlcjtcclxuICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAgICAgICAgICAgdGVtcE11bHRpQW5kU2luZ2xlU2NhdHRlcj1jb21wdXRlTXVsdGlzY2F0dGVyaW5nSXJpZGVzY2VuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsIG1hdGVyaWFsLmlyaWRlc2NlbmNlLCBtYXRlcmlhbC5pcmlkZXNjZW5jZUZyZXNuZWwsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xyXG4gICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgdGVtcE11bHRpQW5kU2luZ2xlU2NhdHRlcj0gY29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzICk7XHJcbiAgICAgICAjZW5kaWZcclxuICAgICAgIHNpbmdsZVNjYXR0ZXJpbmc9dGVtcE11bHRpQW5kU2luZ2xlU2NhdHRlci5zaW5nbGVTY2F0dGVyOyBcclxuICAgICAgIG11bHRpU2NhdHRlcmluZz10ZW1wTXVsdGlBbmRTaW5nbGVTY2F0dGVyLm11bHRpU2NhdHRlcjtcclxuICAgICAgIGxldCB0b3RhbFNjYXR0ZXJpbmc6dmVjMzxmMzI+ID0gc2luZ2xlU2NhdHRlcmluZyArIG11bHRpU2NhdHRlcmluZztcclxuICAgICAgIGxldCBkaWZmdXNlOnZlYzM8ZjMyPiA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gbWF4KCBtYXgoIHRvdGFsU2NhdHRlcmluZy5yLCB0b3RhbFNjYXR0ZXJpbmcuZyApLCB0b3RhbFNjYXR0ZXJpbmcuYiApICk7XHJcbiAgICAgICByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyID0gcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nO1xyXG4gICAgICAgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciA9IG11bHRpU2NhdHRlcmluZyAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTtcclxuICAgICAgIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSA9IGRpZmZ1c2UgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XHJcbiAgICAgICByZXR1cm4gcmVmbGVjdGVkTGlnaHQ7XHJcbiAgIH1cclxuICAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBiclN0cnVjdChkZWZpbmVzKSB7XHJcbiAgcmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXHJcbiAgICAgICAgc3RydWN0IE1hdGVyaWFsVW5pZm9ybXtcclxuXHJcbiAgICAgICAgICAgIG1vZGVsTWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgIFxyXG4gICAgICAgICAgICBkaWZmdXNlOnZlYzM8ZjMyPixcclxuICAgIFxyXG4gICAgICAgICAgICBvcGFjaXR5OmYzMixcclxuICAgIFxyXG4gICAgICAgICAgICBub3JtYWxNYXRyaXg6IG1hdDN4MzxmMzI+LFxyXG4gICAgXHJcbiAgICAgICAgICAgIGVtaXNzaXZlOnZlYzM8ZjMyPixcclxuICAgIFxyXG4gICAgICAgICAgICByb3VnaG5lc3M6ZjMyLFxyXG4gICAgXHJcbiAgICAgICAgICAgIG1ldGFsbmVzczpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5UT05FX01BUFBJTkd9XHJcbiAgICAgICAgICAgICAgICB0b25lTWFwcGluZ0V4cG9zdXJlOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuU1BFQ1VMQVJ9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICBzcGVjdWxhckNvbG9yOnZlYzM8ZjMyPixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgIHNwZWN1bGFySW50ZW5zaXR5OmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTn1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgc2hlZW5Db2xvcjp2ZWMzPGYzMj4sXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHNoZWVuUm91Z2huZXNzOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UUkFOU01JU1NJT059XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGF0dGVudWF0aW9uQ29sb3I6dmVjMzxmMzI+LFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICB0cmFuc21pc3Npb246ZjMyLFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTp2ZWMyPGYzMj4sXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHRoaWNrbmVzczpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGF0dGVudWF0aW9uRGlzdGFuY2U6ZjMyLFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0tJTk5JTkd9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGJpbmRNYXRyaXg6bWF0NHg0PGYzMj4sXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGJpbmRNYXRyaXhJbnZlcnNlOm1hdDR4NDxmMzI+LFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBib25lVGV4dHVyZVNpemU6dTMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX05PUk1BTFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICAgbm9ybWFsU2NhbGU6dmVjMjxmMzI+LFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLklPUn1cclxuICAgICAgICAgICAgICAgIGlvcjpmMzIsXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUX05PUk1BTFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJjb2F0Tm9ybWFsU2NhbGU6dmVjMjxmMzI+LFxyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICBjbGVhcmNvYXQ6ZjMyLFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgY2xlYXJjb2F0Um91Z2huZXNzOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICBcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0V9XHJcbiAgICAgICAgICAgICAgICBpcmlkZXNjZW5jZTpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGlyaWRlc2NlbmNlSU9SOmYzMixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VUaGlja25lc3NNaW5pbXVtOmYzMixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VUaGlja25lc3NNYXhpbXVtOmYzMixcclxuICAgIFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0FPVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICBhb1RleHR1cmVJbnRlbnNpdHk6ZjMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0xJR0hUVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICBsaWdodFRleHR1cmVJbnRlbnNpdHk6ZjMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9FTlZURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgZW52VGV4dHVyZUludGVuc2l0eTpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGZsaXBFbnZUZXh0dXJlOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9CVU1QVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIGJ1bXBTY2FsZTpmMzI7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfRElTUExBQ0VNRU5UVEVYVFVSRX1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgZGlzcGxhY2VtZW50U2NhbGU6ZjMyLFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBkaXNwbGFjZW1lbnRCaWFzOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9NT1JQSFRBUkdFVFN9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuTU9SUEhUQVJHRVRTX1RFWFRVUkV9IFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU6dmVjMjx1MzI+LFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgTU9SUEhUQVJHRVRTX0NPVU5UOnUzMixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIG1vcnBoVGFyZ2V0SW5mbHVlbmNlczphcnJheTxmMzI+LFxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICB9XHJcblxyXG4gICBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGJyVGV4dHVyZShkZWZpbmVzKSB7XHJcbiAgcmV0dXJuIHdnc2xQYXJzZURlZmluZXNgICAgICAgICBcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQlVNUFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmJ1bXBUZXh0dXJlQmluZGluZ30pIHZhciBidW1wVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVFJBTlNNSVNTSU9OfVxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVFJBTlNNSVNTSU9OVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnRyYW5zbWlzc2lvblRleHR1cmVCaW5kaW5nfSkgdmFyIHRyYW5zbWlzc2lvblRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEhJQ0tORVNTVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnRoaWNrbmVzc1RleHR1cmVCaW5kaW5nfSkgdmFyIHRoaWNrbmVzc1RleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy50cmFuc21pc3Npb25TYW1wbGVyVGV4dHVyZUJpbmRpbmd9KSB2YXIgdHJhbnNtaXNzaW9uU2FtcGxlclRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0VOVlRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmVudlRleHR1cmVCaW5kaW5nfSkgdmFyIGVudlRleHR1cmU6IHRleHR1cmVfY3ViZTxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTk9STUFMVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMubm9ybWFsVGV4dHVyZUJpbmRpbmd9KSB2YXIgbm9ybWFsVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmNsZWFyY29hdFRleHR1cmVCaW5kaW5nfSkgdmFyIGNsZWFyY29hdFRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVRfUk9VR0hORVNTVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuY2xlYXJjb2F0UmNsZWFyY29hdFJvdWdobmVzc1RleHR1cmVCaW5kaW5nfSkgdmFyIGNsZWFyY29hdFJvdWdobmVzc1RleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVRfTk9STUFMVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuY2xlYXJjb2F0Tm9ybWFsVGV4dHVyZUJpbmRpbmd9KSB2YXIgY2xlYXJjb2F0Tm9ybWFsVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuaXJpZGVzY2VuY2VUZXh0dXJlQmluZGluZ30pIHZhciBpcmlkZXNjZW5jZVRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JUklERVNDRU5DRV9USElDS05FU1NURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5pcmlkZXNjZW5jZVRoaWNrbmVzc1RleHR1cmVCaW5kaW5nfSkgdmFyIGlyaWRlc2NlbmNlVGhpY2tuZXNzVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1JPVUdITkVTU1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnJvdWdobmVzc1RleHR1cmVCaW5kaW5nfSkgdmFyIHJvdWdobmVzc1RleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9NRVRBTE5FU1NURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5tZXRhbG5lc3NUZXh0dXJlQmluZGluZ30pIHZhciBtZXRhbG5lc3NUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5TUEVDVUxBUn1cclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NQRUNVTEFSSU5URU5TSVRZVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnNwZWN1bGFySW50ZW5zaXR5VGV4dHVyZUJpbmRpbmd9KSB2YXIgc3BlY3VsYXJJbnRlbnNpdHlUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TUEVDVUxBUkNPTE9SVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnNwZWN1bGFyQ29sb3JUZXh0dXJlQmluZGluZ30pIHZhciBzcGVjdWxhckNvbG9yVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0hFRU59XHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTkNPTE9SVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnNoZWVuQ29sb3JUZXh0dXJlQmluZGluZ30pIHZhciBzaGVlbkNvbG9yVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTlJPVUdITkVTU1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5zaGVlblJvdWdobmVzc1RleHR1cmVCaW5kaW5nfSkgdmFyIHNoZWVuUm91Z2huZXNzVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYmFzZVNhbXBsZXJCaW5kaW5nfSkgdmFyIGJhc2VTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5iYXNlVGV4dHVyZUJpbmRpbmd9KSB2YXIgYmFzZVRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9BTFBIQVRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmFscGhhVGV4dHVyZUJpbmRpbmd9KSB2YXIgYWxwaGFUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQU9URVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5hb1RleHR1cmVCaW5kaW5nfSkgdmFyIGFvVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9MSUdIVFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmxpZ2h0VGV4dHVyZUJpbmRpbmd9KSB2YXIgbGlnaHRUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfRU1JU1NJVkVURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5lbWlzc2l2ZVRleHR1cmVCaW5kaW5nfSkgdmFyIGVtaXNzaXZlVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGJyVXRpbHMoZGVmaW5lcykge1xyXG4gIHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAgY29uc3QgUEk6ZjMyPSAzLjE0MTU5MjY1MzU4OTc5MztcclxuICAgIGNvbnN0IFBJMjpmMzI9IDYuMjgzMTg1MzA3MTc5NTg2O1xyXG4gICAgY29uc3QgUElfSEFMRjpmMzI9IDEuNTcwNzk2MzI2Nzk0ODk2NjtcclxuICAgIGNvbnN0IFJFQ0lQUk9DQUxfUEk6ZjMyPSAwLjMxODMwOTg4NjE4Mzc5MDc7XHJcbiAgICBjb25zdCBSRUNJUFJPQ0FMX1BJMjpmMzI9IDAuMTU5MTU0OTQzMDkxODk1MzU7XHJcbiAgICBjb25zdCBFUFNJTE9OOmYzMj0gMWUtNjtcclxuXHJcbiAgICBmbiBwb3cyKHg6ZjMyICktPmYzMiB7XHJcbiAgICAgICAgcmV0dXJuIHgqeDtcclxuICAgIH1cclxuICAgIGZuIHBvdzJWZWN0b3IoeDp2ZWMzPGYzMj4gKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICByZXR1cm4geCp4O1xyXG4gICAgfVxyXG4gICAgZm4gcG93MyggeDpmMzIgKS0+ZjMyIHtcclxuICAgICAgICByZXR1cm4geCp4Kng7XHJcbiAgICB9XHJcbiAgICBmbiBwb3c0KCB4OmYzMiApLT5mMzIge1xyXG4gICAgICAgIGxldCB4MjpmMzIgPSB4Kng7XHJcbiAgICAgICAgcmV0dXJuIHgyKngyO1xyXG4gICAgfVxyXG4gICAgZm4gbWF4Myggdjp2ZWMzPGYzMj4gKS0+ZjMyIHtcclxuICAgICAgICByZXR1cm4gbWF4KCBtYXgoIHYueCwgdi55ICksIHYueiApO1xyXG4gICAgfVxyXG4gICAgZm4gYXZlcmFnZSh2OnZlYzM8ZjMyPiApLT5mMzIge1xyXG4gICAgICAgIHJldHVybiBkb3QoIHYsIHZlYzM8ZjMyPiggMC4zMzMzMzMzICkgKTtcclxuICAgIH1cclxuICAgIGZuIHJhbmQoIHV2OnZlYzI8ZjMyPiApLT5mMzIge1xyXG4gICAgICAgIGxldCBhOmYzMiA9IDEyLjk4OTg7XHJcbiAgICAgICAgbGV0IGI6ZjMyID0gNzguMjMzO1xyXG4gICAgICAgIGxldCBjOmYzMiA9IDQzNzU4LjU0NTM7XHJcbiAgICAgICAgbGV0IGR0OmYzMiA9IGRvdCggdXYueHksIHZlYzI8ZjMyPiggYSwgYiApICk7XHJcbiAgICAgICAgbGV0IHNuOmYzMiA9IGR0ICUgUEk7XHJcbiAgICAgICAgcmV0dXJuIGZyYWN0KCBzaW4oIHNuICkgKiBjICk7XHJcbiAgICB9XHJcbiAgICBmbiB0cmFuc2Zvcm1EaXJlY3Rpb24oIGRpcjp2ZWMzPGYzMj4sIG1hdHJpeDptYXQ0eDQ8ZjMyPiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNDxmMzI+KCBkaXIsIDAuMCApICkueHl6ICk7XHJcbiAgICB9XHJcblxyXG4gICAgZm4gdHJhbnNwb3NlTWF0MyggbTptYXQzeDM8ZjMyPiApLT5tYXQzeDM8ZjMyPiB7XHJcbiAgICAgICAgdmFyIHRtcDptYXQzeDM8ZjMyPjtcclxuICAgICAgICB0bXBbIDAgXSA9IHZlYzM8ZjMyPiggbVsgMCBdLngsIG1bIDEgXS54LCBtWyAyIF0ueCApO1xyXG4gICAgICAgIHRtcFsgMSBdID0gdmVjMzxmMzI+KCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7XHJcbiAgICAgICAgdG1wWyAyIF0gPSB2ZWMzPGYzMj4oIG1bIDAgXS56LCBtWyAxIF0ueiwgbVsgMiBdLnogKTtcclxuICAgICAgICByZXR1cm4gdG1wO1xyXG4gICAgfVxyXG4gICAgZm4gbHVtaW5hbmNlKCByZ2I6dmVjMzxmMzI+ICktPmYzMiB7XHJcbiAgICAgICAgbGV0IHdlaWdodHM6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KDAuMjEyNjcyOSwgMC43MTUxNTIyLCAwLjA3MjE3NTAgKTtcclxuICAgICAgICByZXR1cm4gZG90KCB3ZWlnaHRzLCByZ2IgKTtcclxuICAgIH1cclxuICAgIGZuIExpbmVhclRvbmVNYXBwaW5nKCBjb2xvcjp2ZWMzPGYzMj4sdG9uZU1hcHBpbmdFeHBvc3VyZTpmMzIgICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRvbmVNYXBwaW5nRXhwb3N1cmUgKiBjb2xvcjtcclxuICAgIH1cclxuXHJcbiAgICBmbiBSZWluaGFyZFRvbmVNYXBwaW5nKCBjb2xvcjp2ZWMzPGYzMj4sdG9uZU1hcHBpbmdFeHBvc3VyZTpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICB2YXIgdGVtcENvbG9yOnZlYzM8ZjMyPjtcclxuICAgICAgICB0ZW1wQ29sb3I9Y29sb3I7XHJcbiAgICAgICAgdGVtcENvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XHJcbiAgICAgICAgcmV0dXJuIHNhdHVyYXRlKCB0ZW1wQ29sb3IgLyAoIHZlYzM8ZjMyPiggMS4wICkgKyB0ZW1wQ29sb3IgKSApO1xyXG4gICAgfVxyXG4gICAgZm4gQ3VzdG9tVG9uZU1hcHBpbmcoIGNvbG9yOnZlYzM8ZjMyPiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgIH1cclxuICAgIGZuIHRvbmVNYXBwaW5nKCBjb2xvcjp2ZWMzPGYzMj4sdG9uZU1hcHBpbmdFeHBvc3VyZTpmMzIgICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgcmV0dXJuIFJlaW5oYXJkVG9uZU1hcHBpbmcoIGNvbG9yLHRvbmVNYXBwaW5nRXhwb3N1cmUgKTtcclxuICAgIH1cclxuXHJcbiAgICBmbiBMaW5lYXJUb0xpbmVhciggdmFsdWU6dmVjNDxmMzI+ICktPnZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgZm4gbGVzc1RoYW5FcXVhbChhOnZlYzM8ZjMyPixiOnZlYzM8ZjMyPiktPnZlYzM8ZjMyPntcclxuICAgICAgIGxldCB4VmFsdWU6ZjMyPXNlbGVjdChiLngsYS54LGEueDw9Yi54KTtcclxuICAgICAgIGxldCB5VmFsdWU6ZjMyPXNlbGVjdChiLnksYS55LGEueTw9Yi55KTtcclxuICAgICAgIGxldCB6VmFsdWU6ZjMyPXNlbGVjdChiLnosYS56LGEuejw9Yi56KTtcclxuICAgICAgIHJldHVybiB2ZWMzPGYzMj4oeFZhbHVlLHlWYWx1ZSx6VmFsdWUpOyAgICBcclxuICAgIH1cclxuICAgIGZuIExpbmVhclRvc1JHQiggdmFsdWU6dmVjNDxmMzI+ICktPnZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQ8ZjMyPiggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMzxmMzI+KCAwLjQxNjY2ICkgKSAqIDEuMDU1IC0gdmVjMzxmMzI+KCAwLjA1NSApLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMzxmMzI+KCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzM8ZjMyPiggMC4wMDMxMzA4ICkgKSApICksIHZhbHVlLmEgKTtcclxuICAgIH1cclxuICAgIGZuIGxpbmVhclRvT3V0cHV0VGV4ZWwodmFsdWU6dmVjNDxmMzI+ICktPnZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgcmV0dXJuIExpbmVhclRvc1JHQiggdmFsdWUgKTtcclxuICAgIH1cclxuICAgIGA7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmxpbm5fcGhvbmcoZGVmaW5lcykge1xyXG5cdHJldHVybiBgXHJcbiAgICAgICBmbiBnZXRQb2ludExpZ2h0SW5mbyhwb2ludExpZ2h0OlBvaW50TGlnaHQsd29ybGRQb3M6dmVjMzxmMzI+LHNoaW5pbmVzczpmMzIsTjp2ZWMzPGYzMj4sVjp2ZWMzPGYzMj4pLT52ZWMzPGYzMj57XHJcbiAgICAgICAgdmFyIGNvbG9yPXZlYzM8ZjMyPigwLjAsMC4wLDAuMCk7XHJcbiAgICAgICAgdmFyIGRpcmVjdGlvbjp2ZWMzPGYzMj4gPSB3b3JsZFBvcyAtIHBvaW50TGlnaHQucG9zaXRpb247XHJcbiAgICAgICAgbGV0IGRpc3Q6ZjMyID0gbGVuZ3RoKCBkaXJlY3Rpb24gKTtcclxuICAgICAgICBkaXJlY3Rpb24gPSBub3JtYWxpemUoZGlyZWN0aW9uKTtcclxuICAgICAgICBsZXQgZGVjYXkgPSBjbGFtcCgxLjAgLSBwb3coZGlzdCAvIHBvaW50TGlnaHQuZGlzdGFuY2UsIDQuMCksIDAuMCwgMS4wKTtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAgbWF4KCBkb3QoIE4sIC1kaXJlY3Rpb24gKSwgMC4wICkgKiBkZWNheTtcclxuICAgICAgICBjb2xvciArPSBwb2ludExpZ2h0LmNvbG9yICogZDtcclxuXHJcbiAgICAgICAgbGV0IGhhbGZEaXI6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBWIC0gZGlyZWN0aW9uICk7XHJcbiAgICAgICAgbGV0IHM6ZjMyID0gcG93KCBjbGFtcCggZG90KCBOLCBoYWxmRGlyICksIDAuMCwgMS4wICksIHNoaW5pbmVzcyApICAqIGRlY2F5O1xyXG4gICAgICAgIGNvbG9yICs9IHBvaW50TGlnaHQuY29sb3IgKiBzO1xyXG4gICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgIH1cclxuICAgICAgIGZuIGdldFNwb3RMaWdodEluZm8oc3BvdExpZ2h0OlNwb3RMaWdodCx3b3JsZFBvczp2ZWMzPGYzMj4sc2hpbmluZXNzOmYzMixOOnZlYzM8ZjMyPixWOnZlYzM8ZjMyPiktPnZlYzM8ZjMyPntcclxuICAgICAgICB2YXIgY29sb3I9dmVjMzxmMzI+KDAuMCwwLjAsMC4wKTtcclxuICAgICAgICAgICAgdmFyIGRpcmVjdGlvbjp2ZWMzPGYzMj4gPSBzcG90TGlnaHQucG9zaXRpb24gLSB3b3JsZFBvcztcclxuICAgICAgICAgICAgbGV0IGxpZ2h0RGlzdGFuY2U6ZjMyID0gbGVuZ3RoKGRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZShkaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICBsZXQgYW5nbGVDb3M6ZjMyID0gZG90KCBkaXJlY3Rpb24sIC1zcG90TGlnaHQuZGlyZWN0aW9uICk7XHJcbiAgICAgICAgICAgIGxldCBkZWNheTpmMzIgPSBjbGFtcCgxLjAgLSBwb3cobGlnaHREaXN0YW5jZS9zcG90TGlnaHQuZGlzdGFuY2UsIDQuMCksIDAuMCwgMS4wKTtcclxuICAgICAgICAgICAgbGV0IHNwb3RFZmZlY3Q6ZjMyID0gc21vb3Roc3RlcCggc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBzcG90TGlnaHQuY29uZUNvcywgYW5nbGVDb3MgKTtcclxuICAgICAgICAgICAgbGV0IGRlY2F5VG90YWw6ZjMyID0gZGVjYXkgKiBzcG90RWZmZWN0O1xyXG4gICAgICAgICAgICBsZXQgZDpmMzIgPSBtYXgoIGRvdCggTiwgZGlyZWN0aW9uICksIDAuMCApICAqIGRlY2F5VG90YWw7XHJcbiAgICAgICAgICAgIGNvbG9yICs9IHNwb3RMaWdodC5jb2xvciAqIGQ7XHJcbiAgICAgICAgICAgIGxldCBoYWxmRGlyOnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggViArIGRpcmVjdGlvbiApO1xyXG4gICAgICAgICAgICBsZXQgczpmMzIgPSBwb3coIGNsYW1wKCBkb3QoIE4sIGhhbGZEaXIgKSwgMC4wLCAxLjAgKSwgc2hpbmluZXNzICkgKiBkZWNheVRvdGFsO1xyXG4gICAgICAgICAgICBjb2xvciArPSBzcG90TGlnaHQuY29sb3IgKiBzO1xyXG4gICAgICAgICAgICByZXR1cm4gY29sb3I7XHJcbiAgICAgICB9XHJcbiAgICBzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7XHJcbiAgICAgICAgZGlyZWN0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgY29sb3I6IHZlYzM8ZjMyPixcclxuICAgIH07XHJcbiAgICAgIGZuIGdldERpcmVjdExpZ2h0SW5mbyhkaXJlY3Rpb25hbExpZ2h0OkRpcmVjdGlvbmFsTGlnaHQsc2hpbmluZXNzOmYzMixOOnZlYzM8ZjMyPixWOnZlYzM8ZjMyPiktPnZlYzM8ZjMyPntcclxuICAgICAgICB2YXIgY29sb3I9dmVjMzxmMzI+KDAuMCwwLjAsMC4wKTtcclxuICAgICAgICBsZXQgZDpmMzIgPSBtYXgoZG90KE4sIC1kaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbiksIDAuMCk7XHJcbiAgICAgICAgY29sb3IgKz0gZGlyZWN0aW9uYWxMaWdodC5jb2xvciAqIGQ7XHJcblxyXG4gICAgICAgIGxldCBoYWxmRGlyOnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggViAtIGRpcmVjdGlvbmFsTGlnaHQuZGlyZWN0aW9uICk7XHJcbiAgICAgICAgbGV0IHM6ZjMyID0gcG93KCBjbGFtcCggZG90KCBOLCBoYWxmRGlyICksIDAuMCwgMS4wICksIHNoaW5pbmVzcyApO1xyXG4gICAgICAgIGNvbG9yICs9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3IgKiBzO1xyXG4gICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgIH1cclxuICAgIGA7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGhvbmdGdW5jdGlvbihkZWZpbmVzKSB7XHJcbiAgcmV0dXJuIGBcclxuICAgIGZuIEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKS0+ZjMyIHtcclxuXHJcbiAgICAgICAgLy8gZ2VvbWV0cnkgdGVybSBpcyAobiBkb3QgbCkobiBkb3QgdikgLyA0KG4gZG90IGwpKG4gZG90IHYpXHJcbiAgICAgICAgcmV0dXJuIDAuMjU7XHJcblxyXG4gICAgfVxyXG4gICAgZm4gRF9CbGlublBob25nKCBzaGluaW5lc3M6ZjMyLCBkb3ROSDpmMzIgKS0+ZjMyIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KGRvdE5ILCBzaGluaW5lc3MpO1xyXG5cclxuICAgIH1cclxuICAgIGZuIEJSREZfQmxpbm5QaG9uZyggbGlnaHREaXI6dmVjMzxmMzI+LCB2aWV3RGlyOnZlYzM8ZjMyPiwgbm9ybWFsOnZlYzM8ZjMyPiwgc3BlY3VsYXJDb2xvcjp2ZWMzPGYzMj4sIHNoaW5pbmVzczpmMzIgKS0+dmVjMzxmMzI+IHtcclxuXHJcbiAgICAgICAgbGV0ICBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcclxuXHJcbiAgICAgICAgbGV0ICBkb3ROSDpmMzIgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xyXG4gICAgICAgIGxldCBkb3RWSDpmMzIgPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTtcclxuXHJcbiAgICAgICAgbGV0IEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIDEuMCwgZG90VkggKTtcclxuXHJcbiAgICAgICAgbGV0IEc6ZjMyID0gR19CbGlublBob25nX0ltcGxpY2l0KCApO1xyXG5cclxuICAgICAgICBsZXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApO1xyXG5cclxuICAgICAgICByZXR1cm4gRiAqICggRyAqIEQgKTtcclxuXHJcbiAgICB9IFxyXG4gICAgZm4gUkVfRGlyZWN0X0JsaW5uUGhvbmcoICBkaXJlY3RMaWdodDpJbmNpZGVudExpZ2h0LGdlb21ldHJ5Okdlb21ldHJpY0NvbnRleHQsIG1hdGVyaWFsOkJsaW5uUGhvbmdNYXRlcmlhbCApLT5SZWZsZWN0ZWRMaWdodHtcclxuICAgICAgICB2YXIgcmVmbGVjdGVkTGlnaHQ6UmVmbGVjdGVkTGlnaHQ7IFxyXG4gICAgICAgIGxldCBkb3ROTDpmMzIgPSBzYXR1cmF0ZShkb3QoZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24pKTtcclxuICAgICAgICBsZXQgaXJyYWRpYW5jZTp2ZWMzPGYzMj4gPSBkb3ROTCpkaXJlY3RMaWdodC5jb2xvcjtcclxuXHJcbiAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZT0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XHJcblxyXG4gICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyPSBpcnJhZGlhbmNlICogQlJERl9CbGlublBob25nKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKSAqIG1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIHJlZmxlY3RlZExpZ2h0O1xyXG4gICAgfVxyXG4gICAgZm4gUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGlycmFkaWFuY2U6dmVjMzxmMzI+LCBnZW9tZXRyeTpHZW9tZXRyaWNDb250ZXh0LCBtYXRlcmlhbDpCbGlublBob25nTWF0ZXJpYWwpLT5SZWZsZWN0ZWRMaWdodCB7XHJcbiAgICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0OyBcclxuICAgICAgICByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XHJcbiAgICAgICAgcmV0dXJuIHJlZmxlY3RlZExpZ2h0O1xyXG4gICAgfVxyXG4gICAgYDtcclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaG9uZ1V0aWxzKGRlZmluZXMpIHtcclxuICByZXR1cm4gYFxyXG4gICBzdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHtcclxuICAgICAgICBkaWZmdXNlQ29sb3I6dmVjMzxmMzI+LFxyXG4gICAgICAgIHNwZWN1bGFyQ29sb3I6dmVjMzxmMzI+LFxyXG4gICAgICAgIHNwZWN1bGFyU2hpbmluZXNzOmYzMixcclxuICAgICAgICBzcGVjdWxhclN0cmVuZ3RoOmYzMixcclxuICAgIH07XHJcbiAgICBjb25zdCBSRUNJUFJPQ0FMX1BJOmYzMj0gMC4zMTgzMDk4ODYxODM3OTA3O1xyXG4gICBmbiBwb3cyKCB4OmYzMiApLT5mMzIgeyByZXR1cm4geCp4OyB9XHJcbiAgIGZuIHBvdzMoIHg6ZjMyICktPmYzMiB7IHJldHVybiB4KngqeDsgfVxyXG4gICBmbiBwb3c0KHg6ZjMyICktPmYzMiB7IGxldCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9XHJcbiAgIGZuIG1heDMoIHY6dmVjMzxmMzI+ICktPmYzMiB7IHJldHVybiBtYXgoIG1heCggdi54LCB2LnkgKSwgdi56ICk7IH1cclxuICAgZm4gYXZlcmFnZSh2OnZlYzM8ZjMyPiApLT5mMzIgeyBcclxuICAgICAgIGxldCByZXN1bHQ9dmVjMzxmMzI+KCAwLjMzMzMzMzMsICAwLjMzMzMzMzMsIDAuMzMzMzMzMyk7XHJcbiAgICAgICByZXR1cm4gZG90KCB2LHJlc3VsdCApOyBcclxuICAgfVxyXG4gICBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2tpbk1hdHJpeChkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgI2lmICR7ZGVmaW5lcy5IQVNfU0tJTn0gXG4gICAgICAgIHN0cnVjdCBKb2ludHNVbmlmb3Jte1xuICAgICAgICAgICAgIG1hdHJpeHM6YXJyYXk8bWF0NHg0Zj4sXG4gICAgICAgIH1cbiAgICAgICAgc3RydWN0IEludmVyc2VCaW5kTWF0cmljZXNVbmlmb3Jte1xuICAgICAgICAgICAgbWF0cml4czphcnJheTxtYXQ0eDRmPixcbiAgICAgICAgfVxuICAgICAgICBAYmluZGluZygke2RlZmluZXMuc2tpbkpvaW50c0J1ZmZlckJpbmRpbmd9KSBAZ3JvdXAoMCkgdmFyPHN0b3JhZ2UsIHJlYWQ+IGpvaW50c1VuaWZvcm0gOiBKb2ludHNVbmlmb3JtO1xuICAgICAgICBAYmluZGluZygke2RlZmluZXMuaW52c0J1ZmZlckJpbmRpbmd9KSBAZ3JvdXAoMCkgdmFyPHN0b3JhZ2UsIHJlYWQ+IGludmVyc2VCaW5kTWF0cmljZXNVbmlmb3JtIDogSW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm07XG4gICAgICAgIGZuIGdldFNraW5NYXRyaXgoam9pbnRzOiB2ZWM0Ziwgd2VpZ2h0czogdmVjNGYpIC0+IG1hdDR4NDxmMzI+IHtcbiAgICAgICAgICAgIGxldCBqb2ludDAgPSBqb2ludHNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy54KV0gKiBpbnZlcnNlQmluZE1hdHJpY2VzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMueCldO1xuICAgICAgICAgICAgbGV0IGpvaW50MSA9IGpvaW50c1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLnkpXSAqIGludmVyc2VCaW5kTWF0cmljZXNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy55KV07XG4gICAgICAgICAgICBsZXQgam9pbnQyID0gam9pbnRzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMueildICogaW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLnopXTtcbiAgICAgICAgICAgIGxldCBqb2ludDMgPSBqb2ludHNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy53KV0gKiBpbnZlcnNlQmluZE1hdHJpY2VzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMudyldO1xuICAgICAgICBcbiAgICAgICAgICAgIGxldCBza2luTWF0cml4ID0gam9pbnQwICogd2VpZ2h0cy54ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2ludDEgKiB3ZWlnaHRzLnkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaW50MiAqIHdlaWdodHMueiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbnQzICogd2VpZ2h0cy53O1xuICAgICAgICAgICAgcmV0dXJuIHNraW5NYXRyaXg7XG4gICAgICAgIH1cbiAgICAgICAgI2VuZGlmXG4gICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNraW5WZXJ0SGVhZGVyKGRlZmluZXMpIHtcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXG4gICAjaWYgJHtkZWZpbmVzLkhBU19TS0lOfSBcbiAgICAgICAgc3RydWN0IEpvaW50c1VuaWZvcm17XG4gICAgICAgICAgICAgbWF0cml4czphcnJheTxtYXQ0eDRmPixcbiAgICAgICAgfVxuICAgICAgICBzdHJ1Y3QgSW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm17XG4gICAgICAgICAgICBtYXRyaXhzOmFycmF5PG1hdDR4NGY+LFxuICAgICAgICB9XG4gICAgICAgIEBiaW5kaW5nKCR7ZGVmaW5lcy5za2luSm9pbnRzQnVmZmVyQmluZGluZ30pIEBncm91cCgwKSB2YXI8c3RvcmFnZSwgcmVhZD4gam9pbnRzVW5pZm9ybSA6IEpvaW50c1VuaWZvcm07XG4gICAgICAgIEBiaW5kaW5nKCR7ZGVmaW5lcy5pbnZzQnVmZmVyQmluZGluZ30pIEBncm91cCgwKSB2YXI8c3RvcmFnZSwgcmVhZD4gaW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm0gOiBJbnZlcnNlQmluZE1hdHJpY2VzVW5pZm9ybTtcbiAgICAgICAgZm4gZ2V0U2tpbk1hdHJpeChqb2ludHM6IHZlYzRmLCB3ZWlnaHRzOiB2ZWM0ZikgLT4gbWF0NHg0PGYzMj4ge1xuICAgICAgICAgICAgbGV0IGpvaW50MCA9IGpvaW50c1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLngpXSAqIGludmVyc2VCaW5kTWF0cmljZXNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy54KV07XG4gICAgICAgICAgICBsZXQgam9pbnQxID0gam9pbnRzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMueSldICogaW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLnkpXTtcbiAgICAgICAgICAgIGxldCBqb2ludDIgPSBqb2ludHNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy56KV0gKiBpbnZlcnNlQmluZE1hdHJpY2VzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMueildO1xuICAgICAgICAgICAgbGV0IGpvaW50MyA9IGpvaW50c1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLncpXSAqIGludmVyc2VCaW5kTWF0cmljZXNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy53KV07XG4gICAgICAgIFxuICAgICAgICAgICAgbGV0IHNraW5NYXRyaXggPSBqb2ludDAgKiB3ZWlnaHRzLnggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaW50MSAqIHdlaWdodHMueSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbnQyICogd2VpZ2h0cy56ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2ludDMgKiB3ZWlnaHRzLnc7XG4gICAgICAgICAgICByZXR1cm4gc2tpbk1hdHJpeDtcbiAgICAgICAgfVxuICAgICAgICAjZW5kaWZcbiAgIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gc2tpblZlcnRNYWluKGRlZmluZXMpIHtcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXG4gICAgICAgICNpZiAke2RlZmluZXMuSEFTX1NLSU59XG4gICAgICAgICAgICBtb2RlbE1hdHJpeCA9Z2V0U2tpbk1hdHJpeChpbnB1dC5qb2ludDAsaW5wdXQud2VpZ2h0MCk7XG4gICAgICAgICAgICB2Tm9ybWFsVmlldyA9IG5vcm1hbGl6ZSgobWF0ZXJpYWxVbmlmb3JtLm5vcm1hbE1hdHJpeCAqIG1vZGVsTWF0cml4ICogdmVjNDxmMzI+KGlucHV0Lm5vcm1hbCwgMC4wKSkueHl6KTtcbiAgICAgICAgI2VuZGlmXG4gIGA7XG59XG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIFBick1hdGVyaWFsU3RydWN0KGRlZmluZXMpIHtcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXG4gICAgc3RydWN0IE1hdGVyaWFsVW5pZm9ybSB7XG4gICAgICAgICAgbW9kZWxNYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgICAgIGNvbG9yOiB2ZWMzPGYzMj4sXG4gICAgICAgICAgb3BhY2l0eTpmMzIsXG4gICAgICAgICAgbm9ybWFsTWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgICAgICAgICBlbWlzc2l2ZTp2ZWMzPGYzMj4sXG4gICAgICAgICAgbWV0YWxsaWM6ZjMyLFxuICAgICAgICAgIHJvdWdobmVzczpmMzIsXG4gICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTk9STUFMVEVYVFVSRX1cbiAgICAgICAgICAgICAgbm9ybWFsVGV4dHVyZVNjYWxlOnZlYzI8ZjMyPixcbiAgICAgICAgICAjZW5kaWZcbiAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9BT1RFWFRVUkV9XG4gICAgICAgICAgICAgIG9jY2x1c2lvblN0cmVuZ3RoOmYzMixcbiAgICAgICAgICAjZW5kaWZcbiAgICAgIH1cbiAgIGA7XG59XG4iLCJpbXBvcnQgeyBGcmFnSW5wdXQgfSBmcm9tIFwiLi9hdHRyaWJ1dGUvRnJhZ0lucHV0XCI7XG5pbXBvcnQgeyBWZXJ0ZXhJbnB1dCB9IGZyb20gXCIuL2F0dHJpYnV0ZS9WZXJ0ZXhJbnB1dFwiO1xuaW1wb3J0IHsgVmVydGV4T3V0cHV0IH0gZnJvbSBcIi4vYXR0cmlidXRlL1ZlcnRleE91dHB1dFwiO1xuaW1wb3J0IHsgU3lzdGVtVW5pZm9ybSB9IGZyb20gXCIuL2NvbW1vbi9TeXN0ZW1Vbmlmb3JtXCI7XG5pbXBvcnQgZW52aXJvbm1lbnQgZnJvbSBcIi4vZW52aXJvbm1lbnQvZW52aXJvbm1lbnRcIjtcbmltcG9ydCB7IGluc3RhbmNlVmVydEhlYWRlciwgaW5zdGFuY2VWZXJ0TWFpbiB9IGZyb20gXCIuL2luc3RhbmNlL0luc3RhbmNlXCI7XG5pbXBvcnQgbGlnaHQgZnJvbSBcIi4vbGlnaHQvbGlnaHRcIjtcbmltcG9ydCBsaWdodENvbW1vbiBmcm9tIFwiLi9saWdodC9saWdodENvbW1vblwiO1xuaW1wb3J0IHsgZ2V0Tm9ybWFsQnlOb3JtYWxUZXh0dXJlLCBnZXRUQk4sIGdldE5vcm1hbCB9IGZyb20gXCIuL25vcm1hbC9nZXROb3JtYWxCYWNrVXBcIjtcbmltcG9ydCBicmRmIGZyb20gXCIuL3Bici9icmRmXCI7XG5pbXBvcnQgaWJsIGZyb20gXCIuL3Bici9pYmxcIjtcbmltcG9ydCBwYnJGdW5jdGlvbiBmcm9tIFwiLi9wYnIvcGJyRnVuY3Rpb25cIjtcbmltcG9ydCBwYnJTdHJ1Y3QgZnJvbSBcIi4vcGJyL3BiclN0cnVjdFwiO1xuaW1wb3J0IHBiclRleHR1cmUgZnJvbSBcIi4vcGJyL3BiclRleHR1cmVcIjtcbmltcG9ydCBwYnJVdGlscyBmcm9tIFwiLi9wYnIvcGJyVXRpbHNcIjtcbmltcG9ydCBibGlubl9waG9uZyBmcm9tIFwiLi9waG9uZy9ibGlubl9waG9uZ1wiO1xuaW1wb3J0IHBob25nRnVuY3Rpb24gZnJvbSBcIi4vcGhvbmcvcGhvbmdGdW5jdGlvblwiO1xuaW1wb3J0IHBob25nVXRpbHMgZnJvbSBcIi4vcGhvbmcvcGhvbmdVdGlsc1wiO1xuLy8gaW1wb3J0IGdldE5vcm1hbCBmcm9tIFwiLi9ub3JtYWwvZ2V0Tm9ybWFsXCI7XG5pbXBvcnQgeyBza2luVmVydEhlYWRlciwgc2tpblZlcnRNYWluIH0gZnJvbSBcIi4vc2tpbi9Ta2luVmVydFwiO1xuaW1wb3J0IHsgUGJyTWF0ZXJpYWxTdHJ1Y3QgfSBmcm9tIFwiLi9zdHJ1Y3QvUGJyTWF0ZXJpYWxTdHJ1Y3RcIjtcbmNvbnN0IFNoYWRlckNodW5rID0ge1xuXHRsaWdodDogbGlnaHQsXG5cdGJyZGY6IGJyZGYsXG5cdHBob25nRnVuY3Rpb246IHBob25nRnVuY3Rpb24sXG5cdHBob25nVXRpbHM6IHBob25nVXRpbHMsXG5cdGxpZ2h0Q29tbW9uOiBsaWdodENvbW1vbixcblx0cGJyU3RydWN0OiBwYnJTdHJ1Y3QsXG5cdHBickZ1bmN0aW9uOiBwYnJGdW5jdGlvbixcblx0cGJyVGV4dHVyZTogcGJyVGV4dHVyZSxcblx0cGJyVXRpbHM6IHBiclV0aWxzLFxuXHRlbnZpcm9ubWVudDogZW52aXJvbm1lbnQsXG5cdGJsaW5uX3Bob25nOiBibGlubl9waG9uZyxcblx0Z2V0Tm9ybWFsOiBnZXROb3JtYWwsXG5cdGdldFRCTjogZ2V0VEJOLFxuXHRnZXROb3JtYWxCeU5vcm1hbFRleHR1cmU6IGdldE5vcm1hbEJ5Tm9ybWFsVGV4dHVyZSxcblx0aWJsOiBpYmwsXG5cdHNraW5WZXJ0TWFpbixcblx0c2tpblZlcnRIZWFkZXIsXG5cdEZyYWdJbnB1dCxcblx0VmVydGV4SW5wdXQsXG5cdFZlcnRleE91dHB1dCxcblx0UGJyTWF0ZXJpYWxTdHJ1Y3QsXG5cdFN5c3RlbVVuaWZvcm0sXG5cdGluc3RhbmNlVmVydE1haW4sXG5cdGluc3RhbmNlVmVydEhlYWRlclxufTtcbmV4cG9ydCBkZWZhdWx0IFNoYWRlckNodW5rO1xuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaG9uZ1ZlcnQoZGVmaW5lcykge1xuXHRyZXR1cm4gYFxuICAgICAgc3RydWN0IFZlcnRleE91dHB1dCB7XG4gICAgICAgICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb246IHZlYzQ8ZjMyPixcbiAgICAgICAgICAgIEBsb2NhdGlvbigwKSB1djogdmVjMjxmMzI+LFxuICAgICAgICAgICAgQGxvY2F0aW9uKDEpIHZpZXc6IHZlYzM8ZjMyPiwgLy8gVmVjdG9yIGZyb20gdmVydGV4IHRvIGNhbWVyYS5cbiAgICAgICAgICAgIEBsb2NhdGlvbigyKSB3b3JsZFBvczogdmVjMzxmMzI+LFxuICAgICAgICAgICAgQGxvY2F0aW9uKDMpIGNvbG9yOiB2ZWM0PGYzMj4sXG4gICAgICAgICAgICBAbG9jYXRpb24oNCkgbm9ybWFsOiB2ZWMzPGYzMj4sXG4gICAgICAgICAgICBAbG9jYXRpb24oNSkgdmlld1Bvc2l0aW9uOiB2ZWMzPGYzMj4sXG4gICAgICB9O1xuICAgICAgc3RydWN0IE1hdGVyaWFsVW5pZm9ybSB7XG4gICAgICAgICAgICBtb2RlbE1hdHJpeDogbWF0NHg0PGYzMj4sXG4gICAgICAgICAgICBjb2xvcjogdmVjMzxmMzI+LFxuICAgICAgICAgICAgb3BhY2l0eTpmMzIsXG4gICAgICAgICAgICBub3JtYWxNYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgICAgICAgZW1pc3NpdmU6dmVjMzxmMzI+LFxuICAgICAgICAgICAgc3BlY3VsYXI6dmVjMzxmMzI+LFxuICAgICAgICAgICAgc2hpbmluZXNzOmYzMixcbiAgICAgIH1cbiAgICAgIHN0cnVjdCBTeXN0ZW1Vbmlmb3JtIHtcbiAgICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgICAgICAgdmlld01hdHJpeDogbWF0NHg0PGYzMj4sXG4gICAgICAgICAgICBpbnZlcnNlVmlld01hdHJpeDogbWF0NHg0PGYzMj4sXG4gICAgICAgICAgICBjYW1lcmFQb3NpdGlvbjogdmVjMzxmMzI+LFxuICAgICAgfTsgXG5cbiAgICAgIEBiaW5kaW5nKCR7ZGVmaW5lcy5waG9uZ0JpbmRpbmd9KSBAZ3JvdXAoMCkgdmFyPHVuaWZvcm0+IHNlbGZVbmlmb3JtIDogTWF0ZXJpYWxVbmlmb3JtO1xuICAgICAgQGJpbmRpbmcoJHtkZWZpbmVzLmNhbWVyYUJpbmRpbmd9KSBAZ3JvdXAoMSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xuXG4gICAgICBzdHJ1Y3QgVmVydGV4SW5wdXQge1xuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5wb3NpdGlvbkxvY2F0aW9ufSkgcG9zaXRpb246IHZlYzM8ZjMyPiwgICAgICAgXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLm5vcm1hbExvY2F0aW9ufSkgbm9ybWFsOiB2ZWMzPGYzMj4sXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnV2TG9jYXRpb259KSB1djogdmVjMjxmMzI+LFxuICAgICAgfVxuICAgICAgQHZlcnRleFxuICAgICAgZm4gbWFpbihpbnB1dDogVmVydGV4SW5wdXQpIC0+IFZlcnRleE91dHB1dCB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0OiBWZXJ0ZXhPdXRwdXQ7XG4gICAgICAgICAgICBvdXRwdXQudXYgPSBpbnB1dC51djtcbiAgICAgICAgICAgIGxldCBtb2RlbFBvcz1zZWxmVW5pZm9ybS5tb2RlbE1hdHJpeCAqdmVjNDxmMzI+KGlucHV0LnBvc2l0aW9uLDEuMCk7XG4gICAgICAgICAgICBvdXRwdXQud29ybGRQb3MgPSBtb2RlbFBvcy54eXovbW9kZWxQb3MudztcbiAgICAgICAgICAgIGxldCB2Tm9ybWFsVmlldyA9IHNlbGZVbmlmb3JtLm5vcm1hbE1hdHJpeCAqIHZlYzQ8ZjMyPihpbnB1dC5ub3JtYWwsMC4wKTtcbiAgICAgICAgICAgIG91dHB1dC5ub3JtYWwgPSAgdk5vcm1hbFZpZXcueHl6O1xuICAgICAgICAgICAgb3V0cHV0LnZpZXcgPSBzeXN0ZW1Vbmlmb3JtLmNhbWVyYVBvc2l0aW9uLnh5eiAtIG1vZGVsUG9zLnh5ejtcbiAgICAgICAgICAgIGxldCB2aWV3UG9zaXRpb249c3lzdGVtVW5pZm9ybS52aWV3TWF0cml4ICogbW9kZWxQb3M7XG4gICAgICAgICAgICBvdXRwdXQudmlld1Bvc2l0aW9uID0gLXZpZXdQb3NpdGlvbi54eXo7XG4gICAgICAgICAgICBvdXRwdXQucG9zaXRpb24gPSBzeXN0ZW1Vbmlmb3JtLnByb2plY3Rpb25NYXRyaXggKiBzeXN0ZW1Vbmlmb3JtLnZpZXdNYXRyaXggKiBtb2RlbFBvcztcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICB9YDtcbn1cbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaG9uZ0ZyYWcoZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYCAgXHJcbiAgc3RydWN0IFZlcnRJbnB1dCB7XHJcbiAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxyXG4gICAgICBAYnVpbHRpbihmcm9udF9mYWNpbmcpIGZyb250RmFjaW5nOiBib29sLFxyXG4gICAgICBAbG9jYXRpb24oMCkgdXY6IHZlYzI8ZjMyPixcclxuICAgICAgQGxvY2F0aW9uKDEpIHZpZXc6IHZlYzM8ZjMyPiwgLy8gVmVjdG9yIGZyb20gdmVydGV4IHRvIGNhbWVyYS5cclxuICAgICAgQGxvY2F0aW9uKDIpIHdvcmxkUG9zOiB2ZWMzPGYzMj4sXHJcbiAgICAgIEBsb2NhdGlvbigzKSBjb2xvcjogdmVjNDxmMzI+LFxyXG4gICAgICBAbG9jYXRpb24oNCkgbm9ybWFsOiB2ZWMzPGYzMj4sXHJcbiAgICAgIEBsb2NhdGlvbig1KSB2aWV3UG9zaXRpb246IHZlYzM8ZjMyPixcclxuICAgIH07XHJcbiAgICBcclxuICAgIHN0cnVjdCBNYXRlcmlhbFVuaWZvcm0ge1xyXG4gICAgICBtb2RlbE1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgIGNvbG9yOiB2ZWMzPGYzMj4sXHJcbiAgICAgIG9wYWNpdHk6ZjMyLFxyXG4gICAgICBub3JtYWxNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICBlbWlzc2l2ZTp2ZWMzPGYzMj4sXHJcbiAgICAgIHNoaW5pbmVzczpmMzIsXHJcbiAgICAgIHNwZWN1bGFyOnZlYzM8ZjMyPiwgICAgICBcclxuICAgfVxyXG4gICBzdHJ1Y3QgU3lzdGVtVW5pZm9ybSB7XHJcbiAgICAgIHByb2plY3Rpb25NYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICB2aWV3TWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgaW52ZXJzZVZpZXdNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICBjYW1lcmFQb3NpdGlvbjogdmVjMzxmMzI+LFxyXG4gIH07IFxyXG5cclxuICAgICNpZiR7ZGVmaW5lcy5VU0VfQ09MT1JURVhUVVJFfVxyXG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmJhc2VDb2xvclNhbXBsZXJCaW5kaW5nfSkgdmFyIGJhc2VDb2xvclNhbXBsZXI6IHNhbXBsZXI7XHJcbiAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYmFzZUNvbG9yVGV4dHVyZUJpbmRpbmd9KSB2YXIgYmFzZUNvbG9yVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgI2VuZGlmXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9OT1JNQUxURVhUVVJFfVxyXG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLm5vcm1hbFRleHR1cmVCaW5kaW5nfSkgdmFyIG5vcm1hbFRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5ub3JtYWxTYW1wbGVyQmluZGluZ30pIHZhciBub3JtYWxTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgI2VuZGlmXHJcbiAgICBAYmluZGluZygke2RlZmluZXMucGhvbmdCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjx1bmlmb3JtPiBtYXRlcmlhbFVuaWZvcm0gOiBNYXRlcmlhbFVuaWZvcm07XHJcbiAgICBAYmluZGluZygke2RlZmluZXMuY2FtZXJhQmluZGluZ30pIEBncm91cCgxKSB2YXI8dW5pZm9ybT4gc3lzdGVtVW5pZm9ybSA6IFN5c3RlbVVuaWZvcm07XHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9OT1JNQUxURVhUVVJFfVxyXG4gICAgICAjaW5jbHVkZSA8Z2V0VEJOPlxyXG4gICAgICAjaW5jbHVkZSA8Z2V0Tm9ybWFsQnlOb3JtYWxUZXh0dXJlPlxyXG4gICAgI2Vsc2VcclxuICAgICAgICAjaW5jbHVkZSA8Z2V0Tm9ybWFsPlxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2luY2x1ZGUgPGxpZ2h0PlxyXG5cclxuICAgIEBmcmFnbWVudFxyXG4gICAgZm4gbWFpbihpbnB1dDpWZXJ0SW5wdXQpIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4ge1xyXG4gICAgICAgIHZhciB0b3RhbEVtaXNzaXZlUmFkaWFuY2U6dmVjMzxmMzI+ID0gbWF0ZXJpYWxVbmlmb3JtLmVtaXNzaXZlO1xyXG4gICAgICAgIHZhciBjb2xvcjp2ZWM0PGYzMj47XHJcbiAgICAgICAgI2lmJHtkZWZpbmVzLlVTRV9DT0xPUlRFWFRVUkV9XHJcbiAgICAgICAgICAgIGNvbG9yPSB2ZWM0PGYzMj4odGV4dHVyZVNhbXBsZShiYXNlQ29sb3JUZXh0dXJlLCBiYXNlQ29sb3JTYW1wbGVyLCBpbnB1dC51dikucmdiK21hdGVyaWFsVW5pZm9ybS5jb2xvcixtYXRlcmlhbFVuaWZvcm0ub3BhY2l0eSk7XHJcbiAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgY29sb3I9dmVjNDxmMzI+KG1hdGVyaWFsVW5pZm9ybS5jb2xvcixtYXRlcmlhbFVuaWZvcm0ub3BhY2l0eSk7XHJcbiAgICAgICAgI2VuZGlmICAgICBcclxuICAgICAgICBsZXQgIFY6dmVjMzxmMzI+ID0gIG5vcm1hbGl6ZSggc3lzdGVtVW5pZm9ybS5jYW1lcmFQb3NpdGlvbiAtIGlucHV0LndvcmxkUG9zKTtcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9OT1JNQUxURVhUVVJFfVxyXG4gICAgICAgICAgICBsZXQgTjp2ZWMzPGYzMj4gPSBnZXROb3JtYWxCeU5vcm1hbFRleHR1cmUoaW5wdXQpOyAgXHJcbiAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgbGV0IE46dmVjMzxmMzI+ID0gZ2V0Tm9ybWFsKGlucHV0KTtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICB2YXIgZ2VvbWV0cnk6R2VvbWV0cnk7XHJcbiAgICAgICAgZ2VvbWV0cnkubm9ybWFsPU47XHJcbiAgICAgICAgZ2VvbWV0cnkudmlld0Rpcj1WO1xyXG4gICAgICAgIGdlb21ldHJ5LnBvc2l0aW9uPWlucHV0LndvcmxkUG9zO1xyXG4gICAgICAgIGxldCBsaWdodENvbG9yOlJlZmxlY3RlZExpZ2h0PXBhcnNlTGlnaHRzKGdlb21ldHJ5LG1hdGVyaWFsVW5pZm9ybS5zaGluaW5lc3MpO1xyXG4gICAgICAgIC8vIHZhciBmaW5uYWxDb2xvcjp2ZWMzPGYzMj49Y29sb3IueHl6ICsgKGxpZ2h0Q29sb3IuZGlyZWN0RGlmZnVzZSArIGxpZ2h0Q29sb3IuZGlyZWN0U3BlY3VsYXIgKyBsaWdodENvbG9yLmFtYmllbnQpO1xyXG4gICAgICAgIHZhciBmaW5uYWxDb2xvcjp2ZWMzPGYzMj49Y29sb3IueHl6ICogKGxpZ2h0Q29sb3IuZGlyZWN0RGlmZnVzZSArIGxpZ2h0Q29sb3IuZGlyZWN0U3BlY3VsYXIgKyBsaWdodENvbG9yLmFtYmllbnQpO1xyXG5cclxuICAgICAgICAvLyBmaW5uYWxDb2xvciA9IGxpZ2h0Q29sb3IudGVzdENvbG9yLnh5ejtcclxuXHJcbiAgICAgICAgcmV0dXJuIHZlYzQ8ZjMyPihmaW5uYWxDb2xvcixjb2xvci5hKTtcclxuICAgIH1gO1xyXG59XHJcbiIsIi8vIGltcG9ydCBDb2xvciBmcm9tIFwiLi4vLi4vbWF0aC9Db2xvclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3JGcmFnKGRlZmluZXMpIHtcclxuICByZXR1cm4gYFxyXG4gICAgc3RydWN0IFZlcnRleE91dHB1dCB7XHJcbiAgICAgICAgQGJ1aWx0aW4ocG9zaXRpb24pIHBvc2l0aW9uOiB2ZWM0PGYzMj4sXHJcbiAgICAgICAgQGxvY2F0aW9uKDApIGNvbG9yOiB2ZWM0PGYzMj4sXHJcbiAgICB9O1xyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OlZlcnRleE91dHB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcbiAgICAgIHJldHVybiBpbnB1dC5jb2xvcjtcclxuICAgIH1cclxuICAgIGA7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3JWZXJ0KGRlZmluZXMpIHtcblx0cmV0dXJuIGBcbiAgIHN0cnVjdCBWZXJ0ZXhJbnB1dCB7XG4gICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMucG9zaXRpb25Mb2NhdGlvbn0pIHBvc2l0aW9uOiB2ZWMzPGYzMj4sICAgICAgIFxuICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLmNvbG9yTG9jYXRpb259KSBjb2xvcjogdmVjNDxmMzI+LFxuICAgfVxuICAgc3RydWN0IFZlcnRleE91dHB1dCB7XG4gICAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxuICAgICAgICBAbG9jYXRpb24oMCkgY29sb3I6IHZlYzQ8ZjMyPixcbiAgICB9O1xuICAgc3RydWN0IFNlbGZVbmlmb3JtIHtcbiAgICAgIG1vZGVsTWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgIH1cbiAgIHN0cnVjdCBTeXN0ZW1Vbmlmb3JtIHtcbiAgICAgIHByb2plY3Rpb25NYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgdmlld01hdHJpeDogbWF0NHg0PGYzMj4sXG4gICAgICBpbnZlcnNlVmlld01hdHJpeDogbWF0NHg0PGYzMj4sXG4gICAgICBjYW1lcmFQb3NpdGlvbjogdmVjMzxmMzI+LFxuICAgfTsgXG4gICBAYmluZGluZygke2RlZmluZXMuY29sb3JCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjx1bmlmb3JtPiBzZWxmVW5pZm9ybSA6IFNlbGZVbmlmb3JtO1xuICAgQGJpbmRpbmcoJHtkZWZpbmVzLmNhbWVyYUJpbmRpbmd9KSBAZ3JvdXAoMSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xuICAgQHZlcnRleFxuICAgZm4gbWFpbihpbnB1dDogVmVydGV4SW5wdXQpIC0+IFZlcnRleE91dHB1dCB7XG4gICAgdmFyIG91dHB1dDpWZXJ0ZXhPdXRwdXQ7XG4gICAgb3V0cHV0LmNvbG9yPWlucHV0LmNvbG9yO1xuICAgIG91dHB1dC5wb3NpdGlvbiA9IHN5c3RlbVVuaWZvcm0ucHJvamVjdGlvbk1hdHJpeCAqIHN5c3RlbVVuaWZvcm0udmlld01hdHJpeCAqc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXgqdmVjNDxmMzI+KGlucHV0LnBvc2l0aW9uLDEuMCk7XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgIH1cbiAgIGA7XG59XG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBickZyYWcoZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAgI2luY2x1ZGUgPGxpZ2h0Q29tbW9uPlxyXG4gICAgI2luY2x1ZGUgPGxpZ2h0PlxyXG4gICAgI2luY2x1ZGUgPGJyZGY+XHJcbiAgICAjaW5jbHVkZSA8cGJyU3RydWN0PlxyXG4gICAgI2luY2x1ZGUgPHBiclV0aWxzPlxyXG4gICAgI2luY2x1ZGUgPHBickZ1bmN0aW9uPlxyXG4gICAgI2luY2x1ZGUgPHBiclRleHR1cmU+XHJcbiAgICAjaW5jbHVkZSA8ZW52aXJvbm1lbnQ+XHJcbiAgICBzdHJ1Y3QgU3lzdGVtVW5pZm9ybSB7XHJcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgICAgdmlld01hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgICAgaW52ZXJzZVZpZXdNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICAgIGNhbWVyYVBvc2l0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICB9OyBcclxuICAgIC8vIHVuaWZvcm0gdmVjMyBsaWdodFByb2JlWzldLFxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuc3RydWN0IFZlcnRleE91dHB1dCB7XHJcbiAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb246IHZlYzQ8ZjMyPixcclxuICAgIEBidWlsdGluKGZyb250X2ZhY2luZykgaXNfZnJvbnQ6IGJvb2wsXHJcbiAgICBAbG9jYXRpb24oMCkgdlV2OiB2ZWMyPGYzMj4sXHJcbiAgICBAbG9jYXRpb24oMSkgdlZpZXdQb3NpdGlvbjogdmVjMzxmMzI+LCAvLyBWZWN0b3IgZnJvbSB2ZXJ0ZXggdG8gY2FtZXJhLlxyXG4gICAgQGxvY2F0aW9uKDIpIHZXb3JsZFBvc2l0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICBAbG9jYXRpb24oMykgdk5vcm1hbDogdmVjMzxmMzI+LFxyXG4gICAgLy8g5Y+v6YCJXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9MSUdIVFRFWFRVUkUgfHwgZGVmaW5lcy5VU0VfQU9URVhUVVJFfVxyXG4gICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMudlV2Mk91dExvY2F0aW9ufSkgdlV2MjogdmVjMjxmMzI+LFxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfQ09MT1JfQUxQSEF9XHJcbiAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy52Q29sb3JPdXRMb2NhdGlvbn0pIHZDb2xvcjogdmVjNDxmMzI+LFxyXG4gICAgI2VsaWYgJHtkZWZpbmVzLlVTRV9DT0xPUiB8fCBkZWZpbmVzLlVTRV9JTlNUQU5DSU5HX0NPTE9SfVxyXG4gICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMudkNvbG9yT3V0TG9jYXRpb259KSB2Q29sb3I6IHZlYzM8ZjMyPixcclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZiAke2RlZmluZXMuVVNFX1RBTkdFTlR9XHJcbiAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy52VGFuZ2VudE91dExvY2F0aW9ufSkgdlRhbmdlbnQ6IHZlYzM8ZjMyPixcclxuICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnZCaXRhbmdlbnRPdXRMb2NhdGlvbn0pIHZCaXRhbmdlbnQ6IHZlYzM8ZjMyPixcclxuICAgICNlbmRpZlxyXG59O1xyXG4gICAgICAgIHN0cnVjdCBQaHlzaWNhbE1hdGVyaWFsIHtcclxuICAgICAgICAgICAgIGRpZmZ1c2VDb2xvcjp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgICByb3VnaG5lc3M6ZjMyLFxyXG4gICAgICAgICAgICAgc3BlY3VsYXJDb2xvcjp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgICBzcGVjdWxhckY5MDpmMzIsXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVH1cclxuICAgICAgICAgICAgICAgIGNsZWFyY29hdDpmMzIsXHJcbiAgICAgICAgICAgICAgICBjbGVhcmNvYXRSb3VnaG5lc3M6ZjMyLFxyXG4gICAgICAgICAgICAgICAgY2xlYXJjb2F0RjA6dmVjMzxmMzI+LFxyXG4gICAgICAgICAgICAgICAgY2xlYXJjb2F0RjkwOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JUklERVNDRU5DRX1cclxuICAgICAgICAgICAgICAgIGlyaWRlc2NlbmNlOmYzMixcclxuICAgICAgICAgICAgICAgIGlyaWRlc2NlbmNlSU9SOmYzMixcclxuICAgICAgICAgICAgICAgIGlyaWRlc2NlbmNlVGhpY2tuZXNzOmYzMixcclxuICAgICAgICAgICAgICAgIGlyaWRlc2NlbmNlRnJlc25lbDp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgICAgICBpcmlkZXNjZW5jZUYwOnZlYzM8ZjMyPixcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTn1cclxuICAgICAgICAgICAgICAgIHNoZWVuQ29sb3I6dmVjMzxmMzI+LFxyXG4gICAgICAgICAgICAgICAgc2hlZW5Sb3VnaG5lc3M6ZjMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuSU9SfVxyXG4gICAgICAgICAgICAgICAgIGlvcjpmMzIsXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVFJBTlNNSVNTSU9OfVxyXG4gICAgICAgICAgICAgICAgdHJhbnNtaXNzaW9uOmYzMixcclxuICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbkFscGhhOmYzMixcclxuICAgICAgICAgICAgICAgIHRoaWNrbmVzczpmMzIsXHJcbiAgICAgICAgICAgICAgICBhdHRlbnVhdGlvbkRpc3RhbmNlOmYzMixcclxuICAgICAgICAgICAgICAgIGF0dGVudWF0aW9uQ29sb3I6dmVjMzxmMzI+LFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICB9O1xyXG5AYmluZGluZygwKSBAZ3JvdXAoMCkgdmFyPHVuaWZvcm0+IG1hdGVyaWFsVW5pZm9ybSA6IE1hdGVyaWFsVW5pZm9ybTtcclxuQGJpbmRpbmcoMCkgQGdyb3VwKDEpIHZhcjx1bmlmb3JtPiBzeXN0ZW1Vbmlmb3JtIDogU3lzdGVtVW5pZm9ybTtcclxuQGZyYWdtZW50XHJcbmZuIG1haW4oaW5wdXQ6VmVydGV4T3V0cHV0KS0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4ge1xyXG4gICAgICAgIHZhciBkaWZmdXNlQ29sb3I6dmVjNDxmMzI+ID0gdmVjNChtYXRlcmlhbFVuaWZvcm0uZGlmZnVzZSwgbWF0ZXJpYWxVbmlmb3JtLm9wYWNpdHkgKTtcclxuICAgICAgIC8vIFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XHJcbiAgICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAgIHZhciB0b3RhbEVtaXNzaXZlUmFkaWFuY2U6dmVjMzxmMzI+ID0gbWF0ZXJpYWxVbmlmb3JtLmVtaXNzaXZlO1xyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RFWFRVUkV9XHJcbiAgICAgICAgICAgIHZhciBzYW1wbGVkRGlmZnVzZUNvbG9yOnZlYzQ8ZjMyPiA9dGV4dHVyZVNhbXBsZShiYXNlVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdik7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuREVDT0RFX1ZJREVPX1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBzYW1wbGVkRGlmZnVzZUNvbG9yID0gdmVjNDxmMzI+KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzPGYzMj4oIDAuMDUyMTMyNzAxNCApLCB2ZWMzPGYzMj4oIDIuNCApICksIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiICogMC4wNzczOTkzODA4LCB2ZWMzPGYzMj4oIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzPGYzMj4oIDAuMDQwNDUgKSApICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci53ICk7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgZGlmZnVzZUNvbG9yICo9IHNhbXBsZWREaWZmdXNlQ29sb3I7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgIHZhciByb3VnaG5lc3NGYWN0b3I6ZjMyID0gbWF0ZXJpYWxVbmlmb3JtLnJvdWdobmVzcztcclxuICAgIFxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1JPVUdITkVTU1RFWFRVUkV9XHJcbiAgICAgICAgICAgIGxldCB0ZXhlbFJvdWdobmVzczp2ZWM0PGYzMj49dGV4dHVyZVNhbXBsZShyb3VnaG5lc3NUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KTtcclxuICAgICAgICAgICAgcm91Z2huZXNzRmFjdG9yICo9IHRleGVsUm91Z2huZXNzLmc7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgIHZhciBtZXRhbG5lc3NGYWN0b3I6ZjMyID0gbWF0ZXJpYWxVbmlmb3JtLm1ldGFsbmVzcztcclxuICAgIFxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX01FVEFMTkVTU1RFWFRVUkV9XHJcbiAgICAgICAgICAgIGxldCB0ZXhlbE1ldGFsbmVzczp2ZWM0PGYzMj4gPXRleHR1cmVTYW1wbGUobWV0YWxuZXNzVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdik7XHJcbiAgICAgICAgICAgIG1ldGFsbmVzc0ZhY3RvciAqPSB0ZXhlbE1ldGFsbmVzcy5iO1xyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICBsZXQgZmFjZURpcmVjdGlvbjpmMzIgPXNlbGVjdCgtMS4wLDEuMCxpbnB1dC5pc19mcm9udCk7XHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5GTEFUX1NIQURFRH1cclxuICAgICAgICAgICAgbGV0IGZkeDp2ZWMzPGYzMj4gPSBkcGR4KCBpbnB1dC52Vmlld1Bvc2l0aW9uICk7XHJcbiAgICAgICAgICAgIGxldCBmZHk6dmVjMzxmMzI+ID0gZHBkeSggaW5wdXQudlZpZXdQb3NpdGlvbiApO1xyXG4gICAgICAgICAgICBsZXQgbm9ybWFsOnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggY3Jvc3MoIGZkeSwgZmR4ICkgKTtcclxuICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICBsZXQgbm9ybWFsOnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggaW5wdXQudk5vcm1hbCApO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLkRPVUJMRV9TSURFRH1cclxuICAgICAgICAgICAgICAgIG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UQU5HRU5UfVxyXG4gICAgICAgICAgICAgICAgbGV0IHRhbmdlbnQ6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBpbnB1dC52VGFuZ2VudCApO1xyXG4gICAgICAgICAgICAgICAgbGV0IGJpdGFuZ2VudDp2ZWMzPGYzMj4gPSBub3JtYWxpemUoIGlucHV0LnZCaXRhbmdlbnQgKTtcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuRE9VQkxFX1NJREVEfVxyXG4gICAgICAgICAgICAgICAgICAgIHRhbmdlbnQgPSB0YW5nZW50ICogZmFjZURpcmVjdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICBiaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlRBTkdFTlRTUEFDRV9OT1JNQUxURVhUVVJFIHx8IGRlZmluZXMuVVNFX0NMRUFSQ09BVF9OT1JNQUxURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCB2VEJOOm1hdDN4MzxmMzI+ID0gbWF0M3gzPGYzMj4oIHRhbmdlbnQsIGJpdGFuZ2VudCwgbm9ybWFsICk7XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICBcclxuICAgICAgICBsZXQgZ2VvbWV0cnlOb3JtYWw6dmVjMzxmMzI+ID0gbm9ybWFsO1xyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLk9CSkVDVFNQQUNFX05PUk1BTFRFWFRVUkV9XHJcbiAgICAgICAgICAgIG5vcm1hbCA9dGV4dHVyZVNhbXBsZShub3JtYWxUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KS54eXogKiAyLjAgLSAxLjA7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuRkxJUF9TSURFRH1cclxuICAgICAgICAgICAgICAgIG5vcm1hbCA9IC0gbm9ybWFsO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5ET1VCTEVfU0lERUR9XHJcbiAgICAgICAgICAgICAgICBub3JtYWwgPSBub3JtYWwgKiBmYWNlRGlyZWN0aW9uO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgIG5vcm1hbCA9IG5vcm1hbGl6ZShtYXRlcmlhbFVuaWZvcm0ubm9ybWFsTWF0cml4ICogbm9ybWFsICk7XHJcblxyXG4gICAgICAgICAgICAjZWxpZiAke2RlZmluZXMuVEFOR0VOVFNQQUNFX05PUk1BTFRFWFRVUkV9XHJcbiAgICAgICAgICAgIGxldCB0ZW1wTWFwTjp2ZWMzPGYzMj4gPXRleHR1cmVTYW1wbGUobm9ybWFsVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdikueHl6ICogMi4wIC0gMS4wO1xyXG4gICAgICAgICAgICBsZXQgbWFwTjp2ZWMzPGYzMj4gPXRlbXBNYXBOLnh5ICo9IG1hdGVyaWFsVW5pZm9ybS5ub3JtYWxTY2FsZTtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEFOR0VOVH1cclxuICAgICAgICAgICAgICAgIG5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTtcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIG5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIGlucHV0LnZWaWV3UG9zaXRpb24sIG5vcm1hbCwgbWFwTiwgZmFjZURpcmVjdGlvbiApO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNlbGlmICR7ZGVmaW5lcy5VU0VfQlVNUFRFWFRVUkV9XHJcblxyXG4gICAgICAgICAgICAgICAgbm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLSBpbnB1dC52Vmlld1Bvc2l0aW9uLCBub3JtYWwsIGRIZHh5X2Z3ZCgpLCBmYWNlRGlyZWN0aW9uICk7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVH1cclxuICAgICAgICAgICAgdmFyIGNsZWFyY29hdE5vcm1hbDp2ZWMzPGYzMj4gPSBnZW9tZXRyeU5vcm1hbDtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVRfTk9STUFMVEVYVFVSRX1cclxuICAgICAgICAgICAgdmFyIGNsZWFyY29hdE1hcE46dmVjMzxmMzI+ID10ZXh0dXJlU2FtcGxlKGNsZWFyY29hdE5vcm1hbFRleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpLnh5eiAqIDIuMCAtIDEuMDtcclxuICAgICAgICAgICAgY2xlYXJjb2F0TWFwTi54eSAqPSBtYXRlcmlhbFVuaWZvcm0uY2xlYXJjb2F0Tm9ybWFsU2NhbGU7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RBTkdFTlR9XHJcbiAgICAgICAgICAgICAgICBjbGVhcmNvYXROb3JtYWwgPSBub3JtYWxpemUoIHZUQk4gKiBjbGVhcmNvYXRNYXBOICk7XHJcbiAgICAgICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgICAgICBjbGVhcmNvYXROb3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSBpbnB1dC52Vmlld1Bvc2l0aW9uLCBjbGVhcmNvYXROb3JtYWwsIGNsZWFyY29hdE1hcE4sIGZhY2VEaXJlY3Rpb24gKTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfRU1JU1NJVkVURVhUVVJFfVxyXG4gICAgICAgICAgICBsZXQgZW1pc3NpdmVDb2xvcjp2ZWM0PGYzMj4gPXRleHR1cmVTYW1wbGUoZW1pc3NpdmVUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KTtcclxuICAgICAgICAgICAgdG90YWxFbWlzc2l2ZVJhZGlhbmNlICo9IGVtaXNzaXZlQ29sb3IucmdiO1xyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICB2YXIgbWF0ZXJpYWw6UGh5c2ljYWxNYXRlcmlhbDtcclxuICAgICAgICBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiICogKCAxLjAgLSBtZXRhbG5lc3NGYWN0b3IgKTtcclxuICAgICAgICBsZXQgZHh5OnZlYzM8ZjMyPiA9IG1heCggYWJzKCBkcGR4KCBnZW9tZXRyeU5vcm1hbCApICksIGFicyggZHBkeSggZ2VvbWV0cnlOb3JtYWwgKSApICk7XHJcbiAgICAgICAgbGV0IGdlb21ldHJ5Um91Z2huZXNzOmYzMiA9IG1heCggbWF4KCBkeHkueCwgZHh5LnkgKSwgZHh5LnogKTtcclxuICAgICAgICBtYXRlcmlhbC5yb3VnaG5lc3MgPSBtYXgoIHJvdWdobmVzc0ZhY3RvciwgMC4wNTI1ICk7XHJcbiAgICAgICAgbWF0ZXJpYWwucm91Z2huZXNzICs9IGdlb21ldHJ5Um91Z2huZXNzO1xyXG4gICAgICAgIG1hdGVyaWFsLnJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwucm91Z2huZXNzLCAxLjAgKTtcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5JT1J9XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmlvciA9IG1hdGVyaWFsVW5pZm9ybS5pb3I7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuU1BFQ1VMQVJ9XHJcbiAgICAgICAgICAgICAgICBsZXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3I6ZjMyID0gbWF0ZXJpYWxVbmlmb3JtLnNwZWN1bGFySW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgbGV0IHNwZWN1bGFyQ29sb3JGYWN0b3I6dmVjMzxmMzI+ID0gbWF0ZXJpYWxVbmlmb3JtLnNwZWN1bGFyQ29sb3I7XHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TUEVDVUxBUklOVEVOU0lUWVRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj10ZXh0dXJlU2FtcGxlKHNwZWN1bGFySW50ZW5zaXR5VGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdikuYTtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NQRUNVTEFSQ09MT1JURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgICAgIHNwZWN1bGFyQ29sb3JGYWN0b3IgKj10ZXh0dXJlU2FtcGxlKHNwZWN1bGFyQ29sb3JUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KS5yZ2I7XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zcGVjdWxhckY5MCA9IG1peCggc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIDEuMCwgbWV0YWxuZXNzRmFjdG9yICk7XHJcbiAgICAgICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgICAgICBsZXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3I6ZjMyID0gMS4wO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNwZWN1bGFyQ29sb3JGYWN0b3I6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KCAxLjAgKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggbWluKCBwb3cyKCAoIG1hdGVyaWFsLmlvciAtIDEuMCApIC8gKCBtYXRlcmlhbC5pb3IgKyAxLjAgKSApICogc3BlY3VsYXJDb2xvckZhY3RvciwgdmVjMyggMS4wICkgKSAqIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTtcclxuICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICBtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzPGYzMj4oIDAuMDQgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVH1cclxuICAgICAgICAgICAgbWF0ZXJpYWwuY2xlYXJjb2F0ID0gbWF0ZXJpYWxVbmlmb3JtLmNsZWFyY29hdDtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWF0ZXJpYWxVbmlmb3JtLmNsZWFyY29hdFJvdWdobmVzcztcclxuICAgICAgICAgICAgbWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzPGYzMj4oIDAuMDQgKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwID0gMS4wO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVRURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuY2xlYXJjb2F0ICo9dGV4dHVyZVNhbXBsZShjbGVhcmNvYXRUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KS54O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUX1JPVUdITkVTU1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKj10ZXh0dXJlU2FtcGxlKGNsZWFyY29hdFJvdWdobmVzc1RleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpLnk7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICBtYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1heCggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAwLjA1MjUgKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICs9IGdlb21ldHJ5Um91Z2huZXNzO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtaW4oIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMS4wICk7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0V9XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmlyaWRlc2NlbmNlID0gbWF0ZXJpYWxVbmlmb3JtLmlyaWRlc2NlbmNlO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5pcmlkZXNjZW5jZUlPUiA9IG1hdGVyaWFsVW5pZm9ybS5pcmlkZXNjZW5jZUlPUjtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0VURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuaXJpZGVzY2VuY2UgKj10ZXh0dXJlU2FtcGxlKGlyaWRlc2NlbmNlVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdikucjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFX1RISUNLTkVTU1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5pcmlkZXNjZW5jZVRoaWNrbmVzcyA9IChtYXRlcmlhbFVuaWZvcm0uaXJpZGVzY2VuY2VUaGlja25lc3NNYXhpbXVtIC0gbWF0ZXJpYWxVbmlmb3JtLmlyaWRlc2NlbmNlVGhpY2tuZXNzTWluaW11bSkgKiB0ZXh0dXJlU2FtcGxlKGlyaWRlc2NlbmNlVGhpY2tuZXNzVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdikuZyArIG1hdGVyaWFsVW5pZm9ybS5pcmlkZXNjZW5jZVRoaWNrbmVzc01pbmltdW07XHJcbiAgICAgICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5pcmlkZXNjZW5jZVRoaWNrbmVzcyA9IG1hdGVyaWFsVW5pZm9ybS5pcmlkZXNjZW5jZVRoaWNrbmVzc01heGltdW07XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NIRUVOfVxyXG4gICAgICAgICAgICBtYXRlcmlhbC5zaGVlbkNvbG9yID0gbWF0ZXJpYWxVbmlmb3JtLnNoZWVuQ29sb3I7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NIRUVOQ09MT1JURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2hlZW5Db2xvciAqPXRleHR1cmVTYW1wbGUoc2hlZW5Db2xvclRleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpLnJnYjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzID0gY2xhbXAoIG1hdGVyaWFsVW5pZm9ybS5zaGVlblJvdWdobmVzcywgMC4wNywgMS4wICk7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NIRUVOUk9VR0hORVNTVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICo9dGV4dHVyZVNhbXBsZShzaGVlblJvdWdobmVzc1RleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpLmE7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBnZW9tZXRyeTpHZW9tZXRyaWNDb250ZXh0O1xyXG4gICAgICAgIGdlb21ldHJ5LnBvc2l0aW9uID0gLSBpbnB1dC52Vmlld1Bvc2l0aW9uO1xyXG4gICAgICAgIGdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbDtcclxuICAgICAgIC8vIGdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIGlucHV0LnZWaWV3UG9zaXRpb24gKTtcclxuICAgICAgICBnZW9tZXRyeS52aWV3RGlyID0gbm9ybWFsaXplKCBpbnB1dC52Vmlld1Bvc2l0aW9uKTsgXHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVH1cclxuICAgICAgICAgICAgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsID0gY2xlYXJjb2F0Tm9ybWFsO1xyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JUklERVNDRU5DRX1cclxuICAgICAgICAgICAgbGV0IGRvdE5WaTpmMzIgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xyXG4gICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmlyaWRlc2NlbmNlVGhpY2tuZXNzID09IDAuMCApIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmlyaWRlc2NlbmNlID0gMC4wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuaXJpZGVzY2VuY2UgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuaXJpZGVzY2VuY2UgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIG1hdGVyaWFsLmlyaWRlc2NlbmNlID4gMC4wICkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuaXJpZGVzY2VuY2VGcmVzbmVsID0gZXZhbElyaWRlc2NlbmNlKCAxLjAsIG1hdGVyaWFsLmlyaWRlc2NlbmNlSU9SLCBkb3ROVmksIG1hdGVyaWFsLmlyaWRlc2NlbmNlVGhpY2tuZXNzLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yICk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5pcmlkZXNjZW5jZUYwID0gU2NobGlja190b19GMCggbWF0ZXJpYWwuaXJpZGVzY2VuY2VGcmVzbmVsLCAxLjAsIGRvdE5WaSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgIHZhciBpYmxJcnJhZGlhbmNlOnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggMC4wICk7XHJcbiAgICAgICAgdmFyIGlycmFkaWFuY2U6dmVjMzxmMzI+ID0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZShjb21tb25MaWdodHNQYXJtcy5hbWJpZW50KTtcclxuICAgICAgICAvL2lycmFkaWFuY2UgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5Lm5vcm1hbCxzeXN0ZW1Vbmlmb3JtLnZpZXdNYXRyaXggKTtcclxuXHJcbiAgICAgICAgdmFyIHJhZGlhbmNlOnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggMC4wICk7XHJcbiAgICAgICAgdmFyIGNsZWFyY29hdFJhZGlhbmNlOnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggMC4wICk7XHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0xJR0hUVEVYVFVSRX1cclxuICAgICAgICAgICAgbGV0IGxpZ2h0TWFwVGV4ZWw6dmVjNDxmMzI+ID10ZXh0dXJlU2FtcGxlKGxpZ2h0VGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdjIpO1xyXG4gICAgICAgICAgICBsZXQgbGlnaHRNYXBJcnJhZGlhbmNlOnZlYzM8ZjMyPiA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbWF0ZXJpYWxVbmlmb3JtLmxpZ2h0VGV4dHVyZUludGVuc2l0eTtcclxuICAgICAgICAgICAgaXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgLy8mJiBkZWZpbmVzLlNUQU5EQVJEJiZkZWZpbmVzLkVOVlRFWFRVUkVfVFlQRV9DVUJFX1VWXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfRU5WVEVYVFVSRX0gXHJcbiAgICAgICAgICAgIGlibElycmFkaWFuY2UgKz0gZ2V0SUJMSXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsLGJhc2VTYW1wbGVyLHN5c3RlbVVuaWZvcm0udmlld01hdHJpeCApO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0VOVlRFWFRVUkV9XHJcbiAgICAgICAgICAgIHJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLGJhc2VTYW1wbGVyLHN5c3RlbVVuaWZvcm0udmlld01hdHJpeCwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbFVuaWZvcm0ucm91Z2huZXNzICk7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVH1cclxuICAgICAgICAgICAgICAgIGNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLGJhc2VTYW1wbGVyLHN5c3RlbVVuaWZvcm0udmlld01hdHJpeCwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgLy/nm7TmjqXlhYnnhadcclxuICAgICAgICAgICAgbGV0IGRpclJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0PSBwYXJzZUxpZ2h0cyhnZW9tZXRyeSxtYXRlcmlhbCk7XHJcbiAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz1kaXJSZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlO1xyXG4gICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPWRpclJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyO1xyXG4gICAgICAgIC8v6Ze05o6l5ryr5Y+N5bCEXHJcbiAgICAgICAgICAgIGxldCBpbmRpcmVjdERpZmZ1c2VMaWdodDpSZWZsZWN0ZWRMaWdodD0gUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKCBpcnJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9aW5kaXJlY3REaWZmdXNlTGlnaHQuaW5kaXJlY3REaWZmdXNlO1xyXG4gICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPWluZGlyZWN0RGlmZnVzZUxpZ2h0LmluZGlyZWN0U3BlY3VsYXI7XHJcbiAgICAgICAgLy/pl7TmjqXpq5jlhYlcclxuICAgICAgICAgICAgbGV0IGluZGlyZWN0U3BlY3VsYXJMaWdodDpSZWZsZWN0ZWRMaWdodD1SRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCByYWRpYW5jZSwgaWJsSXJyYWRpYW5jZSwgY2xlYXJjb2F0UmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCk7XHJcbiAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz1pbmRpcmVjdFNwZWN1bGFyTGlnaHQuaW5kaXJlY3REaWZmdXNlO1xyXG4gICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPWluZGlyZWN0U3BlY3VsYXJMaWdodC5pbmRpcmVjdFNwZWN1bGFyO1xyXG4gICAgICAgIC8v546v5aKD5YWJ6YGu6JS9XHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQU9URVhUVVJFfVxyXG4gICAgICAgICAgICBsZXQgYW1iaWVudE9jY2x1c2lvbjpmMzIgPSAodGV4dHVyZVNhbXBsZShhb1RleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYyKS5yIC0gMS4wICkgKiBtYXRlcmlhbFVuaWZvcm0uYW9UZXh0dXJlSW50ZW5zaXR5ICsgMS4wO1xyXG5cclxuICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGFtYmllbnRPY2NsdXNpb247XHJcbiAgICAgICAgICAgIC8vJiZkZWZpbmVzLlNUQU5EQVJEXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0VOVlRFWFRVUkV9IFxyXG4gICAgICAgICAgICAgICAgbGV0IGRvdE5WOmYzMiA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XHJcbiAgICAgICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgdmFyIHRvdGFsRGlmZnVzZTp2ZWMzPGYzMj4gPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlO1xyXG4gICAgICAgIHZhciB0b3RhbFNwZWN1bGFyOnZlYzM8ZjMyPiA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhcjtcclxuICAgICAgICAvL+mAj+WwhFxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RSQU5TTUlTU0lPTn1cclxuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNtaXNzaW9uID0gbWF0ZXJpYWxVbmlmb3JtLnRyYW5zbWlzc2lvbjtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNtaXNzaW9uQWxwaGEgPSAxLjA7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnRoaWNrbmVzcyA9IG1hdGVyaWFsVW5pZm9ybS50aGlja25lc3M7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmF0dGVudWF0aW9uRGlzdGFuY2UgPSBtYXRlcmlhbFVuaWZvcm0uYXR0ZW51YXRpb25EaXN0YW5jZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuYXR0ZW51YXRpb25Db2xvciA9IG1hdGVyaWFsVW5pZm9ybS5hdHRlbnVhdGlvbkNvbG9yO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UUkFOU01JU1NJT05URVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNtaXNzaW9uICo9dGV4dHVyZVNhbXBsZSh0cmFuc21pc3Npb25UZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KS5yO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEhJQ0tORVNTVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnRoaWNrbmVzcyAqPXRleHR1cmVTYW1wbGUodGhpY2tuZXNzVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdikuZztcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIGxldCBwb3M6dmVjMzxmMzI+ID0gdldvcmxkUG9zaXRpb247XHJcbiAgICAgICAgICAgIGxldCB2OnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggY2FtZXJhUG9zaXRpb24gLSBwb3MgKTtcclxuICAgICAgICAgICAgbGV0IG46dmVjMzxmMzI+ID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCBzeXN0ZW1Vbmlmb3JtLnZpZXdNYXRyaXggKTtcclxuICAgICAgICAgICAgbGV0IHRyYW5zbWlzc2lvbjp2ZWM0PGYzMj4gPSBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKFxyXG4gICAgICAgICAgICBuLCB2LCBtYXRlcmlhbC5yb3VnaG5lc3MsIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsIHBvcywgbW9kZWxNYXRyaXgsIHN5c3RlbVVuaWZvcm0udmlld01hdHJpeCwgc3lzdGVtVW5pZm9ybS5wcm9qZWN0aW9uTWF0cml4LCBtYXRlcmlhbC5pb3IsIG1hdGVyaWFsLnRoaWNrbmVzcywgbWF0ZXJpYWwuYXR0ZW51YXRpb25Db2xvciwgbWF0ZXJpYWwuYXR0ZW51YXRpb25EaXN0YW5jZSApO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC50cmFuc21pc3Npb25BbHBoYSA9IG1peCggbWF0ZXJpYWwudHJhbnNtaXNzaW9uQWxwaGEsIHRyYW5zbWlzc2lvbi5hLCBtYXRlcmlhbC50cmFuc21pc3Npb24gKTtcclxuICAgICAgICAgICAgdG90YWxEaWZmdXNlID0gbWl4KCB0b3RhbERpZmZ1c2UsIHRyYW5zbWlzc2lvbi5yZ2IsIG1hdGVyaWFsLnRyYW5zbWlzc2lvbiApO1xyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICBsZXQgb3V0Z29pbmdMaWdodDp2ZWMzPGYzMj4gPSB0b3RhbERpZmZ1c2UgKyB0b3RhbFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTn1cclxuICAgICAgICAgICAgbGV0IHNoZWVuRW5lcmd5Q29tcDpmMzIgPSAxLjAgLSAwLjE1NyAqIG1heDMoIG1hdGVyaWFsLnNoZWVuQ29sb3IgKTtcclxuICAgICAgICAgICAgb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyO1xyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVR9XHJcbiAgICAgICAgICAgIGxldCBkb3ROVmNjOmYzMiA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XHJcbiAgICAgICAgICAgIGxldCBGY2M6dmVjMzxmMzI+ID0gRl9TY2hsaWNrKCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBkb3ROVmNjICk7XHJcbiAgICAgICAgICAgIG91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogKCAxLjAgLSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBGY2MgKSArIGNsZWFyY29hdFNwZWN1bGFyICogbWF0ZXJpYWwuY2xlYXJjb2F0O1xyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UUkFOU01JU1NJT059XHJcbiAgICAgICAgICAgIGRpZmZ1c2VDb2xvci5hICo9IG1hdGVyaWFsLnRyYW5zbWlzc2lvbkFscGhhICsgMC4xO1xyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICB2YXIgZmlubmFsQ29sb3I6dmVjNDxmMzI+O1xyXG4gICAgICAgIGZpbm5hbENvbG9yID0gdmVjNDxmMzI+KCBvdXRnb2luZ0xpZ2h0LCBkaWZmdXNlQ29sb3IuYSApO1xyXG4gICAgICAgICNpZiAke2RlZmluZXMuVE9ORV9NQVBQSU5HfVxyXG4gICAgICAgICAgIGZpbm5hbENvbG9yLnJnYiA9IHRvbmVNYXBwaW5nKCBmaW5uYWxDb2xvci5yZ2IsbWF0ZXJpYWxVbmlmb3JtLnRvbmVNYXBwaW5nRXhwb3N1cmUgKTtcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICBmaW5uYWxDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGZpbm5hbENvbG9yKTtcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5QUkVNVUxUSVBMSUVEX0FMUEhBfVxyXG4gICAgICAgICAgICBmaW5uYWxDb2xvci5yZ2IgKj0gZmlubmFsQ29sb3IuYTtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLkRJVEhFUklOR31cclxuICAgICAgICAgICAgZmlubmFsQ29sb3IucmdiID0gZGl0aGVyaW5nKCBmaW5uYWxDb2xvci5yZ2IgKTtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICByZXR1cm4gZmlubmFsQ29sb3I7XHJcbiAgICB9YDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBiclZlcnQoZGVmaW5lcykge1xyXG4gIHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAgI2luY2x1ZGUgPHBiclN0cnVjdD5cclxuICAgIHN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxyXG4gICAgICAgIEBsb2NhdGlvbigwKSB2VXY6IHZlYzI8ZjMyPixcclxuICAgICAgICBAbG9jYXRpb24oMSkgdlZpZXdQb3NpdGlvbjogdmVjMzxmMzI+LCAvLyBWZWN0b3IgZnJvbSB2ZXJ0ZXggdG8gY2FtZXJhLlxyXG4gICAgICAgIEBsb2NhdGlvbigyKSB2V29ybGRQb3NpdGlvbjogdmVjMzxmMzI+LFxyXG4gICAgICAgIEBsb2NhdGlvbigzKSB2Tm9ybWFsOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgLy8g5Y+v6YCJXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTElHSFRURVhUVVJFIHx8IGRlZmluZXMuVVNFX0FPVEVYVFVSRX1cclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy52VXYyT3V0TG9jYXRpb259KSB2VXYyOiB2ZWMyPGYzMj4sXHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NPTE9SX0FMUEhBfVxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnZDb2xvck91dExvY2F0aW9ufSkgdkNvbG9yOiB2ZWM0PGYzMj4sXHJcbiAgICAgICAgI2VsaWYgJHtkZWZpbmVzLlVTRV9DT0xPUiB8fCBkZWZpbmVzLlVTRV9JTlNUQU5DSU5HX0NPTE9SfVxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnZDb2xvck91dExvY2F0aW9ufSkgdkNvbG9yOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RBTkdFTlR9XHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMudlRhbmdlbnRPdXRMb2NhdGlvbn0pIHZUYW5nZW50OiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMudkJpdGFuZ2VudE91dExvY2F0aW9ufSkgdkJpdGFuZ2VudDogdmVjMzxmMzI+LFxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgfTtcclxuICAgIHN0cnVjdCBHbG9iYWxVbmlmb3JtIHtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgICB2aWV3TWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgICBpbnZlcnNlVmlld01hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgICAgY2FtZXJhUG9zaXRpb246IHZlYzM8ZjMyPixcclxuICAgIH07XHJcblxyXG4gICAgLy90ZXh0dXJlIGFuZCBzYW1wbGVyXHJcbiAgICAvLyBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnNhbXBsZXJCaW5kaW5nfSkgdmFyIGJhc2VTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfU0tJTk5JTkd9XHJcbiAgICAgICAgLy91bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBib25lVGV4dHVyZTtcclxuICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtcclxuICAgICAgICAgIGRlZmluZXMuYm9uZVRleHR1cmVCaW5kaW5nXHJcbiAgICAgICAgfSkgdmFyIGJvbmVUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9ESVNQTEFDRU1FTlRURVhUVVJFfVxyXG4gICAgICAgIC8vdW5pZm9ybSBzYW1wbGVyMkQgZGlzcGxhY2VtZW50TWFwO1xyXG4gICAgICAgIEBncm91cCgwKSBAYmluZGluZygke1xyXG4gICAgICAgICAgZGVmaW5lcy5kaXNwbGFjZW1lbnRUZXh0dXJlQmluZGluZ1xyXG4gICAgICAgIH0pIHZhciBkaXNwbGFjZW1lbnRNYXA6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZiAke2RlZmluZXMuTU9SUEhUQVJHRVRTX1RFWFRVUkV9XHJcbiAgICAgICAgLy91bmlmb3JtIHNhbXBsZXIyREFycmF5IG1vcnBoVGFyZ2V0c1RleHR1cmU7XHJcbiAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7XHJcbiAgICAgICAgICBkZWZpbmVzLm1vcnBoVGFyZ2V0c1RleHR1cmVCaW5kaW5nXHJcbiAgICAgICAgfSkgdmFyIG1vcnBoVGFyZ2V0c1RleHR1cmU6IHRleHR1cmVfMmRfYXJyYXk8ZjMyPjtcclxuICAgICNlbmRpZlxyXG5cclxuICAgIHN0cnVjdCBWZXJ0ZXhJbnB1dCB7XHJcbiAgICAgICAgQGxvY2F0aW9uKDApIHBvc2l0aW9uOiB2ZWMzPGYzMj4sICBcclxuXHJcbiAgICAgICAgQGxvY2F0aW9uKDEpIG5vcm1hbDogdmVjMzxmMzI+LFxyXG5cclxuICAgICAgICBAbG9jYXRpb24oMikgdXY6IHZlYzI8ZjMyPixcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9MSUdIVFRFWFRVUkUgfHwgZGVmaW5lcy5VU0VfQU9URVhUVVJFfVxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnV2MkxvY2F0aW9ufSkgdXYyOnZlYzI8ZjMyPixcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JTlNUQU5DSU5HfVxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtcclxuICAgICAgICAgICAgICBkZWZpbmVzLmluc3RhbmNlTWF0cml4TG9jYXRpb25cclxuICAgICAgICAgICAgfSkgaW5zdGFuY2VNYXRyaXg6bWF0NHg0PGYzMj4sXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSU5TVEFOQ0lOR19DT0xPUn1cclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5pbnN0YW5jZUNvbG9yTG9jYXRpb259KSBpbnN0YW5jZUNvbG9yOnZlYzM8ZjMyPixcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICBcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UQU5HRU5UfVxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnRhbmdlbnRMb2NhdGlvbn0pIHRhbmdlbnQ6dmVjNDxmMzI+LFxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NPTE9SX0FMUEhBfVxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLmNvbG9yTG9jYXRpb259KSBjb2xvcjp2ZWM0PGYzMj4sXHJcbiAgICAgICAgI2VsaWYgJHtkZWZpbmVzLlVTRV9DT0xPUn1cclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5jb2xvckxvY2F0aW9ufSkgY29sb3I6dmVjMzxmMzI+LFxyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9NT1JQSFRBUkdFVFMgJiYgIWRlZmluZXMuTU9SUEhUQVJHRVRTX1RFWFRVUkV9XHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMubW9ycGhUYXJnZXQwTG9jYXRpb259KSBtb3JwaFRhcmdldDA6dmVjMzxmMzI+LFxyXG5cclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5tb3JwaFRhcmdldDFMb2NhdGlvbn0pIG1vcnBoVGFyZ2V0MTp2ZWMzPGYzMj4sXHJcblxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLm1vcnBoVGFyZ2V0MkxvY2F0aW9ufSkgbW9ycGhUYXJnZXQyOnZlYzM8ZjMyPixcclxuXHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMubW9ycGhUYXJnZXQzTG9jYXRpb259KSBtb3JwaFRhcmdldDM6dmVjMzxmMzI+LFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9NT1JQSE5PUk1BTFN9XHJcbiAgICAgICAgICAgICAgICBAbG9jYXRpb24oJHtcclxuICAgICAgICAgICAgICAgICAgZGVmaW5lcy5tb3JwaE5vcm1hbDBMb2NhdGlvblxyXG4gICAgICAgICAgICAgICAgfSkgbW9ycGhOb3JtYWwwOnZlYzM8ZjMyPixcclxuXHJcbiAgICAgICAgICAgICAgICBAbG9jYXRpb24oJHtcclxuICAgICAgICAgICAgICAgICAgZGVmaW5lcy5tb3JwaE5vcm1hbDFMb2NhdGlvblxyXG4gICAgICAgICAgICAgICAgfSkgbW9ycGhOb3JtYWwxOnZlYzM8ZjMyPixcclxuXHJcbiAgICAgICAgICAgICAgICBAbG9jYXRpb24oJHtcclxuICAgICAgICAgICAgICAgICAgZGVmaW5lcy5tb3JwaE5vcm1hbDJMb2NhdGlvblxyXG4gICAgICAgICAgICAgICAgfSkgbW9ycGhOb3JtYWwyOnZlYzM8ZjMyPixcclxuXHJcbiAgICAgICAgICAgICAgICBAbG9jYXRpb24oJHtcclxuICAgICAgICAgICAgICAgICAgZGVmaW5lcy5tb3JwaE5vcm1hbDNMb2NhdGlvblxyXG4gICAgICAgICAgICAgICAgfSkgbW9ycGhOb3JtYWwzOnZlYzM8ZjMyPixcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke1xyXG4gICAgICAgICAgICAgICAgICBkZWZpbmVzLm1vcnBoVGFyZ2V0NExvY2F0aW9uXHJcbiAgICAgICAgICAgICAgICB9KSBtb3JwaFRhcmdldDQ6dmVjMzxmMzI+LFxyXG5cclxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke1xyXG4gICAgICAgICAgICAgICAgICBkZWZpbmVzLm1vcnBoVGFyZ2V0NUxvY2F0aW9uXHJcbiAgICAgICAgICAgICAgICB9KSBtb3JwaFRhcmdldDU6dmVjMzxmMzI+LFxyXG5cclxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke1xyXG4gICAgICAgICAgICAgICAgICBkZWZpbmVzLm1vcnBoVGFyZ2V0NkxvY2F0aW9uXHJcbiAgICAgICAgICAgICAgICB9KSBtb3JwaFRhcmdldDY6dmVjMzxmMzI+LFxyXG5cclxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke1xyXG4gICAgICAgICAgICAgICAgICBkZWZpbmVzLm1vcnBoVGFyZ2V0N0xvY2F0aW9uXHJcbiAgICAgICAgICAgICAgICB9KSBtb3JwaFRhcmdldDc6dmVjMzxmMzI+LFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TS0lOTklOR31cclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5za2luSW5kZXhMb2NhdGlvbn0pIHNraW5JbmRleDp2ZWM0PGYzMj4sXHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMuc2tpbldlaWdodExvY2F0aW9ufSkgc2tpbldlaWdodDp2ZWM0PGYzMj4sXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgfVxyXG5cclxuICAgICNpZiAke2RlZmluZXMuTU9SUEhUQVJHRVRTX1RFWFRVUkV9XHJcbiAgICAgICAgZm4gZ2V0TW9ycGgoIHZlcnRleEluZGV4OnUzMiwgbW9ycGhUYXJnZXRJbmRleDp1MzIsb2Zmc2V0OnUzMiApLT52ZWM0PGYzMj4ge1xyXG4gICAgICAgICAgICBsZXQgdGV4ZWxJbmRleDp1MzIgPSB2ZXJ0ZXhJbmRleCAqIE1PUlBIVEFSR0VUU19URVhUVVJFX1NUUklERSArIG9mZnNldDtcclxuICAgICAgICAgICAgbGV0IHk6dTMyID0gdGV4ZWxJbmRleCAvIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54O1xyXG4gICAgICAgICAgICBsZXQgeDp1MzIgPSB0ZXhlbEluZGV4IC0geSAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54O1xyXG4gICAgICAgICAgICBsZXQgbW9ycGhVVjp2ZWMzPHUzMj4gPSB2ZWMzPHUzMj4oIHgsIHksIG1vcnBoVGFyZ2V0SW5kZXggKTtcclxuICAgICAgICAgICAgLy90ZXh0dXJlTG9hZFxyXG4gICAgICAgICAgICAvL3JldHVybiB0ZXhlbEZldGNoKCBtb3JwaFRhcmdldHNUZXh0dXJlLCBtb3JwaFVWLCAwICk7XHJcbiAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlTG9hZCggbW9ycGhUYXJnZXRzVGV4dHVyZSwgbW9ycGhVViwgMCApO1xyXG4gICAgICAgIH1cclxuICAgICNlbmRpZlxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfU0tJTk5JTkd9XHJcbiAgICAgICAgZm4gZ2V0Qm9uZU1hdHJpeCggaTpmMzIgKS0+bWF0NHg0PGYzMj4ge1xyXG4gICAgICAgICAgICBsZXQgajpmMzIgPSBpICogNC4wO1xyXG4gICAgICAgICAgICBsZXQgeDpmMzIgPSBqJWYzMiggbWF0ZXJpYWxVbmlmb3JtLmJvbmVUZXh0dXJlU2l6ZSApO1xyXG4gICAgICAgICAgICBsZXQgeTpmMzIgPSBmbG9vciggaiAvIGYzMiggbWF0ZXJpYWxVbmlmb3JtLmJvbmVUZXh0dXJlU2l6ZSApICk7XHJcbiAgICAgICAgICAgIGxldCBkeDpmMzIgPSAxLjAgLyBmMzIoIG1hdGVyaWFsVW5pZm9ybS5ib25lVGV4dHVyZVNpemUgKTtcclxuICAgICAgICAgICAgbGV0IGR5OmYzMiA9IDEuMCAvIGYzMiggbWF0ZXJpYWxVbmlmb3JtLmJvbmVUZXh0dXJlU2l6ZSApO1xyXG4gICAgICAgICAgICB5ID0gZHkgKiAoIHkgKyAwLjUgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCB2MTp2ZWM0PGYzMj4gPSB0ZXh0dXJlU2FtcGxlKGJvbmVUZXh0dXJlLCBiYXNlU2FtcGxlciwgdmVjMjxmMzI+KCBkeCAqICggeCArIDAuNSApLCB5ICkgKTtcclxuICAgICAgICAgICAgbGV0IHYyOnZlYzQ8ZjMyPiA9IHRleHR1cmVTYW1wbGUoYm9uZVRleHR1cmUsIGJhc2VTYW1wbGVyLCB2ZWMyPGYzMj4oIGR4ICogKCB4ICsgMS41ICksIHkgKSApO1xyXG4gICAgICAgICAgICBsZXQgdjM6dmVjNDxmMzI+ID0gdGV4dHVyZVNhbXBsZShib25lVGV4dHVyZSwgYmFzZVNhbXBsZXIsIHZlYzI8ZjMyPiggZHggKiAoIHggKyAyLjUgKSwgeSApICk7XHJcbiAgICAgICAgICAgIGxldCB2NDp2ZWM0PGYzMj4gPSB0ZXh0dXJlU2FtcGxlKGJvbmVUZXh0dXJlLCBiYXNlU2FtcGxlciwgdmVjMjxmMzI+KCBkeCAqICggeCArIDMuNSApLCB5ICkgKTtcclxuICAgICAgICAgICAgbGV0IGJvbmU6bWF0NHg0PGYzMj4gPSBtYXQ0eDQ8ZjMyPiggdjEsIHYyLCB2MywgdjQgKTtcclxuICAgICAgICAgICAgcmV0dXJuIGJvbmU7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgQGJpbmRpbmcoMCkgQGdyb3VwKDApIHZhcjx1bmlmb3JtPiBtYXRlcmlhbFVuaWZvcm0gOiBNYXRlcmlhbFVuaWZvcm07XHJcbiAgICBAYmluZGluZygwKSBAZ3JvdXAoMSkgdmFyPHVuaWZvcm0+IGdsb2JhbFVuaWZvcm0gOiBHbG9iYWxVbmlmb3JtO1xyXG4gICAgQHZlcnRleFxyXG4gICAgZm4gbWFpbihpbnB1dDpWZXJ0ZXhJbnB1dCktPlZlcnRleE91dHB1dCB7XHJcbiAgICAgICAgdmFyIHZlcnRleE91dHB1dDpWZXJ0ZXhPdXRwdXQ7XHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEVYVFVSRX1cclxuICAgICAgICAgICAgdmVydGV4T3V0cHV0LnZVdiA9IGlucHV0LnV2O1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0xJR0hUVEVYVFVSRSB8fCBkZWZpbmVzLlVTRV9BT1RFWFRVUkV9XHJcbiAgICAgICAgICAgIHZlcnRleE91dHB1dC52VXYyIGlucHV0LnV2MjtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DT0xPUl9BTFBIQX1cclxuICAgICAgICAgICAgdmVydGV4T3V0cHV0LnZDb2xvciA9IHZlYzQoIDEuMCApO1xyXG4gICAgICAgICAgICAjZWxpZiAke2RlZmluZXMuVVNFX0NPTE9SIHx8IGRlZmluZXMuVVNFX0lOU1RBTkNJTkdfQ09MT1J9XHJcbiAgICAgICAgICAgIHZlcnRleE91dHB1dC52Q29sb3IgPSB2ZWMzKCAxLjAgKTtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DT0xPUn1cclxuICAgICAgICAgICAgdmVydGV4T3V0cHV0LnZDb2xvciAqPSBpbnB1dC5jb2xvcjtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JTlNUQU5DSU5HX0NPTE9SfVxyXG4gICAgICAgICAgICB2ZXJ0ZXhPdXRwdXQudkNvbG9yLnh5eiAqPSBpbnB1dC5pbnN0YW5jZUNvbG9yLnh5ejtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9NT1JQSENPTE9SUyAmJiBkZWZpbmVzLk1PUlBIVEFSR0VUU19URVhUVVJFfVxyXG4gICAgICAgICAgICB2ZXJ0ZXhPdXRwdXQudkNvbG9yICo9IG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgOiB1MzIgPSAwdTsgaSA8IG1hdGVyaWFsVW5pZm9ybS5NT1JQSFRBUkdFVFNfQ09VTlQ7IGkgPSBpICsgMXUgKSB7XHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DT0xPUl9BTFBIQX1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhID0gMC4wICkgdmVydGV4T3V0cHV0LnZDb2xvciArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDIgKSAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcclxuICAgICAgICAgICAgICAgICAgICAjZWxpZiAke2RlZmluZXMuVVNFX0NPTE9SfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICEgPSAwLjAgKSB2ZXJ0ZXhPdXRwdXQudkNvbG9yICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMiApLnJnYiAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgdmFyIG9iamVjdE5vcm1hbDp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oaW5wdXQubm9ybWFsKTtcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UQU5HRU5UfVxyXG4gICAgICAgICAgICBsZXQgb2JqZWN0VGFuZ2VudDp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIGlucHV0LnRhbmdlbnQueHl6ICk7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTU9SUEhOT1JNQUxTfVxyXG4gICAgICAgICAgICBvYmplY3ROb3JtYWwgKj0gbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5NT1JQSFRBUkdFVFNfVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIGZvciAoIGxldCBpIDogdTMyID0gMHU7IGkgPCBtYXRlcmlhbFVuaWZvcm0uTU9SUEhUQVJHRVRTX0NPVU5UOyBpID0gaSArIDF1KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gISA9IDAuMCApIG9iamVjdE5vcm1hbCArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDEgKS54eXogKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgICAgICBvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwwICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xyXG4gICAgICAgICAgICAgICAgb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMSAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcclxuICAgICAgICAgICAgICAgIG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDIgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XHJcbiAgICAgICAgICAgICAgICBvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwzICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TS0lOTklOR31cclxuICAgICAgICAgICAgbGV0IGJvbmVNYXRYOm1hdDR4NDxmMzI+ID0gZ2V0Qm9uZU1hdHJpeCggaW5wdXQuc2tpbkluZGV4LnggKTtcclxuICAgICAgICAgICAgbGV0IGJvbmVNYXRZOm1hdDR4NDxmMzI+ID0gZ2V0Qm9uZU1hdHJpeCggaW5wdXQuc2tpbkluZGV4LnkgKTtcclxuICAgICAgICAgICAgbGV0IGJvbmVNYXRaOm1hdDR4NDxmMzI+ID0gZ2V0Qm9uZU1hdHJpeCggaW5wdXQuc2tpbkluZGV4LnogKTtcclxuICAgICAgICAgICAgbGV0IGJvbmVNYXRXOm1hdDR4NDxmMzI+ID0gZ2V0Qm9uZU1hdHJpeCggaW5wdXQuc2tpbkluZGV4LncgKTtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TS0lOTklOR31cclxuICAgICAgICAgICAgbGV0IHNraW5NYXRyaXg6bWF0NHg0PGYzMj4gPSBtYXQ0eDQ8ZjMyPiggMC4wICk7XHJcbiAgICAgICAgICAgIHNraW5NYXRyaXggKz0gaW5wdXQuc2tpbldlaWdodC54ICogYm9uZU1hdFg7XHJcbiAgICAgICAgICAgIHNraW5NYXRyaXggKz0gaW5wdXQuc2tpbldlaWdodC55ICogYm9uZU1hdFk7XHJcbiAgICAgICAgICAgIHNraW5NYXRyaXggKz0gaW5wdXQuc2tpbldlaWdodC56ICogYm9uZU1hdFo7XHJcbiAgICAgICAgICAgIHNraW5NYXRyaXggKz0gaW5wdXQuc2tpbldlaWdodC53ICogYm9uZU1hdFc7XHJcbiAgICAgICAgICAgIHNraW5NYXRyaXggPSBtYXRlcmlhbFVuaWZvcm0uYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogbWF0ZXJpYWxVbmlmb3JtLmJpbmRNYXRyaXg7XHJcbiAgICAgICAgICAgIG9iamVjdE5vcm1hbCA9IHZlYzQ8ZjMyPiggc2tpbk1hdHJpeCAqIHZlYzQ8ZjMyPiggb2JqZWN0Tm9ybWFsLCAwLjAgKSApLnh5ejtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEFOR0VOVH1cclxuICAgICAgICAgICAgICAgIG9iamVjdFRhbmdlbnQgPSB2ZWM0PGYzMj4oIHNraW5NYXRyaXggKiB2ZWM0PGYzMj4oIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICB2YXIgdHJhbnNmb3JtZWROb3JtYWw6dmVjMzxmMzI+ID0gb2JqZWN0Tm9ybWFsO1xyXG4gICAgICAgIC8vIHRyYW5zZm9ybWVkTm9ybWFsKz12ZWMzPGYzMj4oMC4wKTtcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JTlNUQU5DSU5HfVxyXG4gICAgICAgICAgICBsZXQgbTptYXQzeDM8ZjMyPiA9IG1hdDN4MzxmMzI+KCBpbnB1dC5pbnN0YW5jZU1hdHJpeCApO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzPGYzMj4oIGRvdCggbVsgMCBdLCBtWyAwIF0gKSwgZG90KCBtWyAxIF0sIG1bIDEgXSApLCBkb3QoIG1bIDIgXSwgbVsgMiBdICkgKTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtZWROb3JtYWwgPSBtICogdHJhbnNmb3JtZWROb3JtYWw7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgdHJhbnNmb3JtZWROb3JtYWwgPSBtYXRlcmlhbFVuaWZvcm0ubm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7XHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5GTElQX1NJREVEfVxyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEFOR0VOVH1cclxuICAgICAgICAgICAgbGV0IHRyYW5zZm9ybWVkVGFuZ2VudDp2ZWMzPGYzMj4gPSAoZ2xvYmFsVW5pZm9ybS52aWV3TWF0cml4Km1hdGVyaWFsVW5pZm9ybS5tb2RlbE1hdHJpeCAqIHZlYzQ8ZjMyPiggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuRkxJUF9TSURFRH1cclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkVGFuZ2VudCA9IC0gdHJhbnNmb3JtZWRUYW5nZW50O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICB2ZXJ0ZXhPdXRwdXQudk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLkZMQVRfU0hBREVEfVxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UQU5HRU5UfVxyXG4gICAgICAgICAgICAgICAgdlRhbmdlbnQgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkVGFuZ2VudCApO1xyXG4gICAgICAgICAgICAgICAgdkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiBpbnB1dC50YW5nZW50LncgKTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgbGV0IHRyYW5zZm9ybWVkOnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggaW5wdXQucG9zaXRpb24gKTtcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9NT1JQSFRBUkdFVFN9XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkICo9IG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuTU9SUEhUQVJHRVRTX1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBmb3IgKCBsZXQgaSA6IHUzMiA9IDB1OyBpIDwgbWF0ZXJpYWxVbmlmb3JtLk1PUlBIVEFSR0VUU19DT1VOVDsgaSA9IGkgKyAxdSApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhID0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwICkueHl6ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZCArPSBpbnB1dC5tb3JwaFRhcmdldDAgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZCArPSBpbnB1dC5tb3JwaFRhcmdldDEgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07XHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZCArPSBpbnB1dC5tb3JwaFRhcmdldDIgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZCArPSBpbnB1dC5tb3JwaFRhcmdldDMgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9NT1JQSE5PUk1BTFN9XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWQgKz0gaW5wdXQubW9ycGhUYXJnZXQ0ICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkICs9IGlucHV0Lm1vcnBoVGFyZ2V0NSAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIDUgXTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZCArPSBpbnB1dC5tb3JwaFRhcmdldDYgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA2IF07XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWQgKz0gaW5wdXQubW9ycGhUYXJnZXQ3ICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdO1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NLSU5OSU5HfVxyXG4gICAgICAgICAgICBsZXQgc2tpblZlcnRleDp2ZWM0PGYzMj4gPSBtYXRlcmlhbFVuaWZvcm0uYmluZE1hdHJpeCAqIHZlYzQ8ZjMyPiggdHJhbnNmb3JtZWQsIDEuMCApO1xyXG4gICAgICAgICAgICBsZXQgc2tpbm5lZDp2ZWM0PGYzMj4gPSB2ZWM0PGYzMj4oIDAuMCApO1xyXG4gICAgICAgICAgICBza2lubmVkICs9IGJvbmVNYXRYICogc2tpblZlcnRleCAqIGlucHV0LnNraW5XZWlnaHQueDtcclxuICAgICAgICAgICAgc2tpbm5lZCArPSBib25lTWF0WSAqIHNraW5WZXJ0ZXggKiBpbnB1dC5za2luV2VpZ2h0Lnk7XHJcbiAgICAgICAgICAgIHNraW5uZWQgKz0gYm9uZU1hdFogKiBza2luVmVydGV4ICogaW5wdXQuc2tpbldlaWdodC56O1xyXG4gICAgICAgICAgICBza2lubmVkICs9IGJvbmVNYXRXICogc2tpblZlcnRleCAqIGlucHV0LnNraW5XZWlnaHQudztcclxuICAgICAgICAgICAgdHJhbnNmb3JtZWQgPSAoIG1hdGVyaWFsVW5pZm9ybS5iaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54eXo7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfRElTUExBQ0VNRU5UVEVYVFVSRX0gXHJcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkICs9IG5vcm1hbGl6ZSggb2JqZWN0Tm9ybWFsICkgKiAodGV4dHVyZVNhbXBsZShkaXNwbGFjZW1lbnRNYXAsIGJhc2VTYW1wbGVyLCB2VXYpLnggKiBtYXRlcmlhbFVuaWZvcm0uZGlzcGxhY2VtZW50U2NhbGUgKyBtYXRlcmlhbFVuaWZvcm0uZGlzcGxhY2VtZW50QmlhcyApO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHZhciBtdlBvc2l0aW9uOnZlYzQ8ZjMyPiA9IHZlYzQ8ZjMyPiggdHJhbnNmb3JtZWQsIDEuMCApO1xyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lOU1RBTkNJTkd9XHJcbiAgICAgICAgICAgIG12UG9zaXRpb24gPSBpbnB1dC5pbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgbXZQb3NpdGlvbiA9IGdsb2JhbFVuaWZvcm0udmlld01hdHJpeCptYXRlcmlhbFVuaWZvcm0ubW9kZWxNYXRyaXggKiBtdlBvc2l0aW9uO1xyXG4gICAgICAgIHZlcnRleE91dHB1dC5wb3NpdGlvbiA9IGdsb2JhbFVuaWZvcm0ucHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247XHJcbiAgICAgICAgdmVydGV4T3V0cHV0LnZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6L212UG9zaXRpb24udztcclxuICAgICAgICAjaWYgJHtcclxuICAgICAgICAgIGRlZmluZXMuVVNFX0VOVlRFWFRVUkUgfHwgZGVmaW5lcy5ESVNUQU5DRSB8fCBkZWZpbmVzLlVTRV9UUkFOU01JU1NJT05cclxuICAgICAgICB9IFxyXG4gICAgICAgICAgICB2YXIgd29ybGRQb3NpdGlvbjp2ZWM0PGYzMj4gPSB2ZWM0PGYzMj4oIHRyYW5zZm9ybWVkLCAxLjAgKTtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSU5TVEFOQ0lOR31cclxuICAgICAgICAgICAgICAgIHdvcmxkUG9zaXRpb24gPSBpbnB1dC5pbnN0YW5jZU1hdHJpeCAqIHdvcmxkUG9zaXRpb247XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICB3b3JsZFBvc2l0aW9uID0gbWF0ZXJpYWxVbmlmb3JtLm1vZGVsTWF0cml4ICogd29ybGRQb3NpdGlvbjtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UUkFOU01JU1NJT059XHJcbiAgICAgICAgICAgIHZlcnRleE91dHB1dC52V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHJldHVybiB2ZXJ0ZXhPdXRwdXQ7XHJcbiAgICB9XHJcbiAgICBgO1xyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNreUJveEZyYWcoZGVmaW5lcykge1xyXG4gIHJldHVybiBgXHJcbiAgICBmbiBsZXNzVGhhbkVxdWFsKGE6dmVjMzxmMzI+LGI6dmVjMzxmMzI+KS0+dmVjMzxmMzI+e1xyXG4gICAgICAgIGxldCB4VmFsdWU6ZjMyPXNlbGVjdChiLngsYS54LGEueDw9Yi54KTtcclxuICAgICAgICBsZXQgeVZhbHVlOmYzMj1zZWxlY3QoYi55LGEueSxhLnk8PWIueSk7XHJcbiAgICAgICAgbGV0IHpWYWx1ZTpmMzI9c2VsZWN0KGIueixhLnosYS56PD1iLnopO1xyXG4gICAgICAgIHJldHVybiB2ZWMzPGYzMj4oeFZhbHVlLHlWYWx1ZSx6VmFsdWUpOyAgICBcclxuICAgICB9XHJcbiAgICBmbiBMaW5lYXJUb3NSR0IoIHZhbHVlOnZlYzQ8ZjMyPiApLT52ZWM0PGYzMj4ge1xyXG4gICAgICAgIHJldHVybiB2ZWM0PGYzMj4oIG1peCggcG93KCB2YWx1ZS5yZ2IsIHZlYzM8ZjMyPiggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzM8ZjMyPiggMC4wNTUgKSwgdmFsdWUucmdiICogMTIuOTIsIHZlYzM8ZjMyPiggbGVzc1RoYW5FcXVhbCggdmFsdWUucmdiLCB2ZWMzPGYzMj4oIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7XHJcbiAgICB9XHJcbiAgc3RydWN0IEZyYWdtZW50SW5wdXQge1xyXG4gICAgQGxvY2F0aW9uKDApIHRleENvb3JkIDogdmVjMzxmMzI+XHJcbiAgfTtcclxuICBAZ3JvdXAoMCkgQGJpbmRpbmcoMikgdmFyIGRlZmF1bHRTYW1wbGVyOiBzYW1wbGVyO1xyXG4gIEBncm91cCgwKSBAYmluZGluZygxKSB2YXIgc2t5Ym94VGV4dHVyZTogdGV4dHVyZV9jdWJlPGYzMj47XHJcbiAgQGZyYWdtZW50XHJcbiAgZm4gbWFpbihpbnB1dCA6IEZyYWdtZW50SW5wdXQpIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4ge1xyXG4gICAgbGV0IGNvbG9yID0gdGV4dHVyZVNhbXBsZShza3lib3hUZXh0dXJlLCBkZWZhdWx0U2FtcGxlciwgaW5wdXQudGV4Q29vcmQpO1xyXG4gICAgcmV0dXJuIExpbmVhclRvc1JHQihjb2xvcik7XHJcbiAgfVxyXG5gO1xyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNreUJveFZlcnQoZGVmaW5lcykge1xuXHRyZXR1cm4gYFxuICAgc3RydWN0IFN5c3RlbVVuaWZvcm0ge1xuICAgICAgIHByb2plY3Rpb25NYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgIHZpZXdNYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgIGludmVyc2VWaWV3TWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgICAgICBjYW1lcmFQb3NpdGlvbjogdmVjMzxmMzI+LFxuICAgfTsgXG4gICBzdHJ1Y3QgTWF0ZXJpYWxVbmlmb3JtIHtcbiAgICBtb2RlbE1hdHJpeDogbWF0NHg0PGYzMj4sXG4gfVxuICAgQGJpbmRpbmcoJHtkZWZpbmVzLnNreWJveEJpbmRpbmd9KSBAZ3JvdXAoMCkgdmFyPHVuaWZvcm0+IHNlbGZVbmlmb3JtIDogTWF0ZXJpYWxVbmlmb3JtO1xuICAgQGJpbmRpbmcoJHtkZWZpbmVzLmNhbWVyYUJpbmRpbmd9KSBAZ3JvdXAoMSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xuICAgICBzdHJ1Y3QgVmVydGV4SW5wdXQge1xuICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMucG9zaXRpb25Mb2NhdGlvbn0pIHBvc2l0aW9uIDogdmVjMzxmMzI+LFxuICAgICB9O1xuICAgICBzdHJ1Y3QgVmVydGV4T3V0cHV0IHtcbiAgICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb24gOiB2ZWM0PGYzMj4sXG4gICAgICAgQGxvY2F0aW9uKDApIHRleENvb3JkIDogdmVjMzxmMzI+LFxuICAgICB9O1xuICAgICBAdmVydGV4XG4gICAgIGZuIG1haW4oaW5wdXQgOiBWZXJ0ZXhJbnB1dCkgLT4gVmVydGV4T3V0cHV0IHtcbiAgICAgICB2YXIgb3V0cHV0IDogVmVydGV4T3V0cHV0O1xuICAgICAgIG91dHB1dC50ZXhDb29yZCA9IGlucHV0LnBvc2l0aW9uLnh5ejtcbiAgICAgICB2YXIgbW9kZWxWaWV3ID0gc3lzdGVtVW5pZm9ybS52aWV3TWF0cml4O1xuICAgICAgIC8vIERyb3AgdGhlIHRyYW5zbGF0aW9uIHBvcnRpb24gb2YgdGhlIG1vZGVsVmlldyBtYXRyaXhcbiAgICAgICBtb2RlbFZpZXdbM10gPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIG1vZGVsVmlld1szXS53KTtcbiAgICAgICBvdXRwdXQucG9zaXRpb24gPSBzeXN0ZW1Vbmlmb3JtLnByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXcgKiB2ZWM0PGYzMj4oaW5wdXQucG9zaXRpb24sMS4wKTtcbiAgICAgICBvdXRwdXQucG9zaXRpb24gPSBvdXRwdXQucG9zaXRpb24ueHl3dztcbiAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICB9XG4gICBgO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVhZEZyYWcoZGVmaW5lcykge1xyXG5cdHJldHVybiBgXHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMSkgdmFyIGJhc2VTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgQGdyb3VwKDApIEBiaW5kaW5nKDApIHZhciBjb2xvclRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgIHN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxyXG4gICAgICAgIEBsb2NhdGlvbigwKSB1djogdmVjMjxmMzI+LFxyXG4gICAgfTtcclxuICAgIEBmcmFnbWVudFxyXG4gICAgZm4gbWFpbihpbnB1dDpWZXJ0ZXhPdXRwdXQpIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4ge1xyXG4gICAgICByZXR1cm4gdGV4dHVyZVNhbXBsZShjb2xvclRleHR1cmUsIGJhc2VTYW1wbGVyLCB2ZWMyPGYzMj4oaW5wdXQudXYueCwxLjAtaW5wdXQudXYueSkpO1xyXG4gICAgfVxyXG4gICAgYDtcclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWFkVmVydChkZWZpbmVzKSB7XG5cdHJldHVybiBgXG4gICAgc3RydWN0IFZlcnRleElucHV0IHtcbiAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMucG9zaXRpb25Mb2NhdGlvbn0pIHBvc2l0aW9uOiB2ZWMyPGYzMj4sICAgICAgIFxuICAgIH1cbiAgICBzdHJ1Y3QgVmVydGV4T3V0cHV0IHtcbiAgICAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxuICAgICAgICAgQGxvY2F0aW9uKDApIHV2OiB2ZWMyPGYzMj4sXG4gICAgIH07XG4gICAgQHZlcnRleFxuICAgIGZuIG1haW4oaW5wdXQ6IFZlcnRleElucHV0KSAtPiBWZXJ0ZXhPdXRwdXQge1xuICAgICB2YXIgb3V0cHV0OlZlcnRleE91dHB1dDtcbiAgICAgb3V0cHV0LnV2ID0gaW5wdXQucG9zaXRpb24gKiAwLjUgKyAwLjU7XG4gICAgIG91dHB1dC5wb3NpdGlvbiA9IHZlYzQ8ZjMyPihpbnB1dC5wb3NpdGlvbiwgMC4wLCAxLjApOztcbiAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG4gICAgYDtcbn1cbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vV2dzbFByZXByb2Nlc3NvclwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGJyX3ZzKGRlZmluZXMpIHtcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXG4gICAgI2luY2x1ZGUgPFBick1hdGVyaWFsU3RydWN0PlxuICAgICNpbmNsdWRlIDxTeXN0ZW1Vbmlmb3JtPlxuICAgICNpbmNsdWRlIDxWZXJ0ZXhJbnB1dD5cbiAgICAjaW5jbHVkZSA8VmVydGV4T3V0cHV0PiBcbiAgICAjaW5jbHVkZSA8c2tpblZlcnRIZWFkZXI+XG4gICAgI2luY2x1ZGUgPGluc3RhbmNlVmVydEhlYWRlcj5cbiAgICBAYmluZGluZygke2RlZmluZXMucGJyQmluZGluZ30pIEBncm91cCgwKSB2YXI8dW5pZm9ybT4gbWF0ZXJpYWxVbmlmb3JtIDogTWF0ZXJpYWxVbmlmb3JtO1xuICAgIEBiaW5kaW5nKCR7ZGVmaW5lcy5jYW1lcmFCaW5kaW5nfSkgQGdyb3VwKDEpIHZhcjx1bmlmb3JtPiBzeXN0ZW1Vbmlmb3JtIDogU3lzdGVtVW5pZm9ybTtcbiAgICBAdmVydGV4XG4gICAgZm4gbWFpbihpbnB1dDogVmVydGV4SW5wdXQpLT4gVmVydGV4T3V0cHV0XG4gICB7XG4gICAgICAgIHZhciBvdXRwdXQ6IFZlcnRleE91dHB1dDtcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5IQVNfVVZ9XG4gICAgICAgICAgICBvdXRwdXQudXYgPSBpbnB1dC51djtcbiAgICAgICAgI2VuZGlmXG4gICAgICAgIHZhciBtb2RlbE1hdHJpeDptYXQ0eDQ8ZjMyPjtcbiAgICAgICAgdmFyIHZOb3JtYWxWaWV3OnZlYzM8ZjMyPjtcbiAgICAgICAgdk5vcm1hbFZpZXcgPSBub3JtYWxpemUobWF0ZXJpYWxVbmlmb3JtLm5vcm1hbE1hdHJpeCAqIHZlYzQ8ZjMyPihpbnB1dC5ub3JtYWwsMC4wKSkueHl6O1xuICAgICAgICBtb2RlbE1hdHJpeD1tYXRlcmlhbFVuaWZvcm0ubW9kZWxNYXRyaXg7ICAgXG4gICAgICAgICNpbmNsdWRlIDxza2luVmVydE1haW4+XG4gICAgICAgICNpbmNsdWRlIDxpbnN0YW5jZVZlcnRNYWluPiAgXG4gICAgICAgIG91dHB1dC5ub3JtYWwgPSB2Tm9ybWFsVmlldy54eXo7XG4gICAgICAgIG91dHB1dC5wb3NpdGlvbiA9IHN5c3RlbVVuaWZvcm0ucHJvamVjdGlvbk1hdHJpeCAqIHN5c3RlbVVuaWZvcm0udmlld01hdHJpeCAqbW9kZWxNYXRyaXgqIHZlYzQ8ZjMyPihpbnB1dC5wb3NpdGlvbiwgMS4wKTtcbiAgICAgICAgbGV0IG1vZGVsUG9zPW1vZGVsTWF0cml4ICp2ZWM0PGYzMj4oaW5wdXQucG9zaXRpb24sMS4wKTtcbiAgICAgICAgb3V0cHV0LndvcmxkUG9zID0gbW9kZWxQb3MueHl6L21vZGVsUG9zLnc7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7ICAgXG4gICB9XG4gICBgO1xufVxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYnJfZnMoZGVmaW5lcykge1xuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcbiAgICAgICAgLy8gcmVmZXJlbmNlOiBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYtV2ViR0wtUEJSL2Jsb2IvbWFzdGVyL3NoYWRlcnMvcGJyLWZyYWcuZ2xzbFxuICAgICAgICAjaW5jbHVkZSA8cGJyVXRpbHM+XG4gICAgICAgICNpbmNsdWRlIDxsaWdodD5cbiAgICAgICAgI2luY2x1ZGUgPGJyZGY+XG4gICAgICAgICNpbmNsdWRlIDxQYnJNYXRlcmlhbFN0cnVjdD5cbiAgICAgICAgI2luY2x1ZGUgPFN5c3RlbVVuaWZvcm0+IFxuICAgICAgICAjaW5jbHVkZSA8RnJhZ0lucHV0PiAgIFxuICAgICAgICBzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XG4gICAgICAgICAgICBkaWZmdXNlQ29sb3I6dmVjMzxmMzI+LFxuICAgICAgICAgICAgcm91Z2huZXNzOmYzMixcbiAgICAgICAgICAgIHNwZWN1bGFyQ29sb3I6dmVjMzxmMzI+LFxuICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVR9XG4gICAgICAgICAgICAgICBjbGVhcmNvYXQ6ZjMyLFxuICAgICAgICAgICAgICAgY2xlYXJjb2F0Um91Z2huZXNzOmYzMixcbiAgICAgICAgICAgICAgIGNsZWFyY29hdEYwOnZlYzM8ZjMyPixcbiAgICAgICAgICAgICAgIGNsZWFyY29hdEY5MDpmMzIsXG4gICAgICAgICAgICNlbmRpZlxuXG4gICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxuICAgICAgICAgICAgICAgaXJpZGVzY2VuY2U6ZjMyLFxuICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VJT1I6ZjMyLFxuICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VUaGlja25lc3M6ZjMyLFxuICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VGcmVzbmVsOnZlYzM8ZjMyPixcbiAgICAgICAgICAgICAgIGlyaWRlc2NlbmNlRjA6dmVjMzxmMzI+LFxuICAgICAgICAgICAjZW5kaWZcblxuICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTn1cbiAgICAgICAgICAgICAgIHNoZWVuQ29sb3I6dmVjMzxmMzI+LFxuICAgICAgICAgICAgICAgc2hlZW5Sb3VnaG5lc3M6ZjMyLFxuICAgICAgICAgICAjZW5kaWZcblxuICAgICAgICAgICAjaWYgJHtkZWZpbmVzLklPUn1cbiAgICAgICAgICAgICAgICBpb3I6ZjMyLFxuICAgICAgICAgICAjZW5kaWZcblxuICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UUkFOU01JU1NJT059XG4gICAgICAgICAgICAgICB0cmFuc21pc3Npb246ZjMyLFxuICAgICAgICAgICAgICAgdHJhbnNtaXNzaW9uQWxwaGE6ZjMyLFxuICAgICAgICAgICAgICAgdGhpY2tuZXNzOmYzMixcbiAgICAgICAgICAgICAgIGF0dGVudWF0aW9uRGlzdGFuY2U6ZjMyLFxuICAgICAgICAgICAgICAgYXR0ZW51YXRpb25Db2xvcjp2ZWMzPGYzMj4sXG4gICAgICAgICAgICNlbmRpZlxuICAgICAgIH07XG4gICAgICAgIGNvbnN0IE1fUEk6ZjMyID0gMy4xNDE1OTI2NTM1ODk3OTM7XG4gICAgICAgIGNvbnN0IGNfTWluUm91Z2huZXNzOmYzMiA9IDAuMDQ7XG4gICAgICAgIEBiaW5kaW5nKCR7ZGVmaW5lcy5wYnJCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjx1bmlmb3JtPiBtYXRlcmlhbFVuaWZvcm0gOiBNYXRlcmlhbFVuaWZvcm07XG4gICAgICAgIEBiaW5kaW5nKCR7ZGVmaW5lcy5jYW1lcmFCaW5kaW5nfSkgQGdyb3VwKDEpIHZhcjx1bmlmb3JtPiBzeXN0ZW1Vbmlmb3JtIDogU3lzdGVtVW5pZm9ybTtcbiAgICAgICAgLy8gSUJMXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lCTH1cbiAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuc3BlY3VsYXJFbnZUZXh0dXJlQmluZGluZ30pIHZhciBzcGVjdWxhckVudlRleHR1cmU6IHRleHR1cmVfY3ViZTxmMzI+O1xuICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5zcGVjdWxhckVudlNhbXBsZXJCaW5kaW5nfSkgdmFyIHNwZWN1bGFyRW52U2FtcGxlcjogc2FtcGxlcjtcbiAgICAgICAgI2VuZGlmXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RFWFRVUkV9XG4gICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYmFzZUNvbG9yVGV4dHVyZUJpbmRpbmd9KSB2YXIgYmFzZUNvbG9yVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xuICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmJhc2VDb2xvclNhbXBsZXJCaW5kaW5nfSkgdmFyIGJhc2VDb2xvclNhbXBsZXI6IHNhbXBsZXI7XG4gICAgICAgICNlbmRpZlxuICAgICAgICAvLyBub3JtYWwgbWFwXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX05PUk1BTFRFWFRVUkV9XG4gICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5ub3JtYWxUZXh0dXJlQmluZGluZ30pIHZhciBub3JtYWxUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XG4gICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5ub3JtYWxTYW1wbGVyQmluZGluZ30pIHZhciBub3JtYWxTYW1wbGVyOiBzYW1wbGVyO1xuICAgICAgICAjZW5kaWZcbiAgICAgICAgLy8gZW1taXN2ZSBtYXBcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfRU1JU1NJVkVURVhUVVJFfVxuICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5lbWlzc2l2ZVRleHR1cmVCaW5kaW5nfSkgdmFyIGVtaXNzaXZlVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xuICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5lbWlzc2l2ZVNhbXBsZXJCaW5kaW5nfSkgdmFyIGVtaXNzaXZlU2FtcGxlcjogc2FtcGxlcjtcbiAgICAgICAgI2VuZGlmXG5cbiAgICAgICAgLy8gbWV0YWwgcm91Z2huZXNzXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX01FVEFMTkVTU1RFWFRVUkV9XG4gICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7XG5cdFx0XHRcdFx0ZGVmaW5lcy5tZXRhbG5lc3NSb3VnaG5lc3NUZXh0dXJlQmluZGluZ1xuXHRcdFx0XHR9KSB2YXIgbWV0YWxuZXNzUm91Z2huZXNzVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xuICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMubWV0YWxuZXNzUm91Z2huZXNzU2FtcGxlckJpbmRpbmd9KSB2YXIgbWV0YWxuZXNzUm91Z2huZXNzU2FtcGxlcjogc2FtcGxlcjtcbiAgICAgICAgI2VuZGlmXG4gICAgICAgIC8vIG9jY2x1c2lvbiB0ZXh0dXJlXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0FPVEVYVFVSRX1cbiAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmFvVGV4dHVyZUJpbmRpbmd9KSB2YXIgYW9UZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XG4gICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5hb1NhbXBsZXJCaW5kaW5nfSkgdmFyIGFvU2FtcGxlcjogc2FtcGxlcjtcbiAgICAgICAgI2VuZGlmXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX05PUk1BTFRFWFRVUkV9XG4gICAgICAgICAgICAjaW5jbHVkZSA8Z2V0VEJOPlxuICAgICAgICAgICAgI2luY2x1ZGUgPGdldE5vcm1hbEJ5Tm9ybWFsVGV4dHVyZT5cbiAgICAgICAgI2Vsc2VcbiAgICAgICAgICAgICNpbmNsdWRlIDxnZXROb3JtYWw+XG4gICAgICAgICNlbmRpZlxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JQkx9XG4gICAgICAgICAgICAjaW5jbHVkZSA8aWJsPlxuICAgICAgICAjZW5kaWZcbiAgICAgICAgQGZyYWdtZW50XG4gICAgICAgIGZuIG1haW4oaW5wdXQ6RnJhZ0lucHV0KSAtPiBAbG9jYXRpb24oMCkgdmVjNDxmMzI+IFxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcGVyY2VwdHVhbFJvdWdobmVzczpmMzIgPSBtYXRlcmlhbFVuaWZvcm0ucm91Z2huZXNzO1xuICAgICAgICAgICAgdmFyIG1ldGFsbGljOmYzMiA9IG1hdGVyaWFsVW5pZm9ybS5tZXRhbGxpYztcblxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTUVUQUxORVNTVEVYVFVSRX1cbiAgICAgICAgICAgICAgICBsZXQgbXJTYW1wbGU6dmVjNDxmMzI+ID0gdGV4dHVyZVNhbXBsZShtZXRhbG5lc3NSb3VnaG5lc3NUZXh0dXJlLG1ldGFsbmVzc1JvdWdobmVzc1NhbXBsZXIsIGlucHV0LnV2KTtcbiAgICAgICAgICAgICAgICBwZXJjZXB0dWFsUm91Z2huZXNzID0gbXJTYW1wbGUuZyAqIHBlcmNlcHR1YWxSb3VnaG5lc3M7XG4gICAgICAgICAgICAgICAgbWV0YWxsaWMgPSBtclNhbXBsZS5iICogbWV0YWxsaWM7XG4gICAgICAgICAgICAjZW5kaWZcbiAgICAgICAgICAgIHBlcmNlcHR1YWxSb3VnaG5lc3MgPSBjbGFtcChwZXJjZXB0dWFsUm91Z2huZXNzLCBjX01pblJvdWdobmVzcywgMS4wKTtcbiAgICAgICAgICAgIG1ldGFsbGljID0gY2xhbXAobWV0YWxsaWMsIDAuMCwgMS4wKTtcbiAgICAgICAgICAgIGxldCBhbHBoYVJvdWdobmVzczpmMzIgPSBwZXJjZXB0dWFsUm91Z2huZXNzICogcGVyY2VwdHVhbFJvdWdobmVzcztcblxuXG4gICAgICAgICAgICAvLyBUaGUgYWxiZWRvIG1heSBiZSBkZWZpbmVkIGZyb20gYSBiYXNlIHRleHR1cmUgb3IgYSBmbGF0IGNvbG9yXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9URVhUVVJFfVxuICAgICAgICAgICAgICAgIGxldCBiYXNlQ29sb3I6dmVjNDxmMzI+ID0gdGV4dHVyZVNhbXBsZShiYXNlQ29sb3JUZXh0dXJlLGJhc2VDb2xvclNhbXBsZXIsIGlucHV0LnV2KSA7XG4gICAgICAgICAgICAjZWxzZVxuICAgICAgICAgICAgICAgIGxldCBiYXNlQ29sb3I6dmVjNDxmMzI+ID0gdmVjNDxmMzI+KG1hdGVyaWFsVW5pZm9ybS5jb2xvciwxLjApO1xuICAgICAgICAgICAgI2VuZGlmXG5cbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX05PUk1BTFRFWFRVUkV9XG4gICAgICAgICAgICAgICAgbGV0IG46dmVjMzxmMzI+ID0gZ2V0Tm9ybWFsQnlOb3JtYWxUZXh0dXJlKGlucHV0KTsgIFxuICAgICAgICAgICAgI2Vsc2VcbiAgICAgICAgICAgICAgICBsZXQgbjp2ZWMzPGYzMj4gPSBnZXROb3JtYWwoaW5wdXQpO1xuICAgICAgICAgICAgI2VuZGlmXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWw6UGh5c2ljYWxNYXRlcmlhbDtcbiAgICAgICAgICAgIG1hdGVyaWFsLmRpZmZ1c2VDb2xvcj1iYXNlQ29sb3IucmdiKiggMS4wIC0gbWV0YWxsaWMgKTtcbiAgICAgICAgICAgIG1hdGVyaWFsLnJvdWdobmVzcz1wZXJjZXB0dWFsUm91Z2huZXNzO1xuICAgICAgICAgICAgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvcj1taXgoIHZlYzM8ZjMyPiggMC4wNCksIGJhc2VDb2xvci5yZ2IsIG1ldGFsbGljICk7XG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnk6R2VvbWV0cnk7XG4gICAgICAgICAgICBnZW9tZXRyeS5ub3JtYWw9bjtcbiAgICAgICAgICAgIGdlb21ldHJ5LnZpZXdEaXI9bm9ybWFsaXplKHN5c3RlbVVuaWZvcm0uY2FtZXJhUG9zaXRpb24gLSBpbnB1dC53b3JsZFBvcyk7XG4gICAgICAgICAgICBnZW9tZXRyeS5wb3NpdGlvbj1pbnB1dC53b3JsZFBvcztcbiAgICAgICAgICAgIGdlb21ldHJ5LmRvdE5WID0gc2F0dXJhdGUoZG90KGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpcikgKTtcbiAgICAgICAgICAgIC8vbGlnaHQgc2hhZGluZ1xuICAgICAgICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0PXBhcnNlTGlnaHRzKGdlb21ldHJ5LG1hdGVyaWFsKTtcbiAgICAgICAgICAgIHZhciBjb2xvcj1yZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlK3JlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyO1xuICAgICAgICAgICAgLy9JQkxcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lCTCAmJiBkZWZpbmVzLkhBU19VVn1cbiAgICAgICAgICAgICAgICB2YXIgcmVmbGVjdGVkTGlnaHREaWZmdXNlPWluZGlyZWN0RGlmZnVzZV9QaHlzaWNhbChnZW9tZXRyeSxtYXRlcmlhbCk7XG4gICAgICAgICAgICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0U3BlY3VsYXI9aW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbChnZW9tZXRyeSxtYXRlcmlhbCk7XG4gICAgICAgICAgICAgICAgY29sb3IrPXJlZmxlY3RlZExpZ2h0RGlmZnVzZS5pbmRpcmVjdERpZmZ1c2U7XG4gICAgICAgICAgICAgICAgY29sb3IrPXJlZmxlY3RlZExpZ2h0U3BlY3VsYXIuaW5kaXJlY3RTcGVjdWxhcjtcbiAgICAgICAgICAgICNlbmRpZlxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQU9URVhUVVJFfVxuICAgICAgICAgICAgICAgIGxldCBhbzpmMzIgPSB0ZXh0dXJlU2FtcGxlKGFvVGV4dHVyZSxhb1NhbXBsZXIsIGlucHV0LnV2KS5yO1xuICAgICAgICAgICAgICAgIGNvbG9yID0gbWl4KGNvbG9yLCBjb2xvciAqIGFvLCBtYXRlcmlhbFVuaWZvcm0ub2NjbHVzaW9uU3RyZW5ndGgpO1xuICAgICAgICAgICAgI2VuZGlmXG5cbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0VNSVNTSVZFVEVYVFVSRX1cbiAgICAgICAgICAgICAgICBsZXQgZW1pc3NpdmU6dmVjMzxmMzI+ID0gdGV4dHVyZVNhbXBsZShlbWlzc2l2ZVRleHR1cmUsIGVtaXNzaXZlU2FtcGxlcixpbnB1dC51dikucmdiIDtcbiAgICAgICAgICAgICAgICBjb2xvciArPSBlbWlzc2l2ZTtcbiAgICAgICAgICAgICNlbmRpZlxuICAgICAgIHJldHVybiB2ZWM0PGYzMj4oY29sb3IsIGJhc2VDb2xvci5hKTtcbiAgICB9XG4gICBgO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQmx1cihkZWZpbmVzKSB7XHJcblx0cmV0dXJuIGBcclxuICAgIHN0cnVjdCBGcmFnSW5wdXQge1xyXG4gICAgICAgIEBsb2NhdGlvbigwKSB1djogdmVjMjxmMzI+LFxyXG4gICAgfVxyXG4gICAgc3RydWN0IEJsdXJVbmlmb3JtcyB7XHJcbiAgICAgICAgZGlyZWN0aW9uOnZlYzI8ZjMyPixcclxuICAgIH1cclxuICAgIGZuIGdhdXNzaWFuUGRmKHg6ZjMyLCBzaWdtYTpmMzIpLT5mMzIge1xyXG4gICAgICAgIHJldHVybiAwLjM5ODk0ICogZXhwKCAtMC41ICogeCAqIHgvKCBzaWdtYSAqIHNpZ21hKSkvc2lnbWE7XHJcbiAgICB9XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgIHZhcjx1bmlmb3JtPiBibHVyVW5pZm9ybXMgOiBCbHVyVW5pZm9ybXM7XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0RGlmZnVzZUJpbmRpbmd9fSkgdmFyIHREaWZmdXNlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0U2FtcGxlckJpbmRpbmd9fSkgdmFyIHRTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OkZyYWdJbnB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgbGV0IGludlNpemU6dmVjMjxmMzI+ID0gdmVjMjxmMzI+KDEuMCwxLjApIC8gdmVjMjxmMzI+KHRleHR1cmVEaW1lbnNpb25zKHREaWZmdXNlKSk7XHJcbiAgICAgICAgbGV0IGZTaWdtYTpmMzIgPWYzMigke2RlZmluZXMuU0lHTUF9KTtcclxuICAgICAgICB2YXIgd2VpZ2h0U3VtOmYzMiA9IGdhdXNzaWFuUGRmKDAuMCwgZlNpZ21hKTtcclxuICAgICAgICBsZXQgYmFzZUNvbG9yPXRleHR1cmVTYW1wbGUodERpZmZ1c2UsIHRTYW1wbGVyLCBpbnB1dC51dik7XHJcbiAgICAgICAgdmFyIGRpZmZ1c2VTdW06dmVjMzxmMzI+ID0gYmFzZUNvbG9yLnJnYiAqIHdlaWdodFN1bTtcclxuICAgICAgICBsZXQgdXZPZmZzZXQ6dmVjMjxmMzI+ID0gYmx1clVuaWZvcm1zLmRpcmVjdGlvbiAqIGludlNpemU7XHJcbiAgICAgICAgZm9yKCB2YXIgaSA6IHUzMiA9IDE7IGkgPCAke2RlZmluZXMuS0VSTkVMX1JBRElVU307aSA9IGkgKyAxICkge1xyXG4gICAgICAgICAgICBsZXQgeDpmMzIgPSBmMzIoaSk7XHJcbiAgICAgICAgICAgIGxldCB3OmYzMiA9IGdhdXNzaWFuUGRmKHgsIGZTaWdtYSk7XHJcbiAgICAgICAgICAgIGxldCBzYW1wbGUxOnZlYzM8ZjMyPj10ZXh0dXJlU2FtcGxlKHREaWZmdXNlLCB0U2FtcGxlciwgaW5wdXQudXYrIHV2T2Zmc2V0KngpLnJnYjtcclxuICAgICAgICAgICAgbGV0IHNhbXBsZTI6dmVjMzxmMzI+PXRleHR1cmVTYW1wbGUodERpZmZ1c2UsIHRTYW1wbGVyLCBpbnB1dC51di0gdXZPZmZzZXQqeCkucmdiO1xyXG4gICAgICAgICAgICBkaWZmdXNlU3VtID1kaWZmdXNlU3VtKyAoc2FtcGxlMitzYW1wbGUyKSogdztcclxuICAgICAgICAgICAgd2VpZ2h0U3VtICs9IDIuMCAqIHc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRpZmZ1c2VTdW0vPXdlaWdodFN1bTtcclxuICAgICAgcmV0dXJuIHZlYzQ8ZjMyPihkaWZmdXNlU3VtLGJhc2VDb2xvci5hKTtcclxuICAgIH1cclxuICBgO1xyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEx1bWlub3NpdHlIaWdoKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gYFxyXG4gICAgc3RydWN0IEx1bWlub3NpdHlVbmlmb3Jtc3tcclxuICAgICAgICBsdW1pbm9zaXR5VGhyZXNob2xkOmYzMixcclxuICAgICAgICBzbW9vdGhXaWR0aDpmMzIsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOnZlYzM8ZjMyPixcclxuICAgICAgICBkZWZhdWx0T3BhY2l0eTpmMzIsXHJcbiAgICB9XHJcbiAgICBzdHJ1Y3QgRnJhZ0lucHV0IHtcclxuICAgICAgICBAbG9jYXRpb24oMCkgdXY6IHZlYzI8ZjMyPixcclxuICAgIH07XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgIHZhcjx1bmlmb3JtPiBsdW1pbm9zaXR5VW5pZm9ybXMgOiBMdW1pbm9zaXR5VW5pZm9ybXM7XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0RGlmZnVzZUJpbmRpbmd9fSkgdmFyIHREaWZmdXNlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0U2FtcGxlckJpbmRpbmd9fSkgdmFyIHRTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OkZyYWdJbnB1dCktPiBAbG9jYXRpb24oMCkgdmVjNDxmMzI+IHtcclxuXHJcbiAgICAgICAgbGV0IHRleGVsOnZlYzQ8ZjMyPiA9IHRleHR1cmVTYW1wbGUodERpZmZ1c2UsIHRTYW1wbGVyLCBpbnB1dC51dik7XHJcblxyXG4gICAgICAgIGxldCBsdW1hOnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggMC4yOTksMC41ODcsMC4xMTQgKTtcclxuXHJcbiAgICAgICAgbGV0IHY6ZjMyID0gZG90KCB0ZXhlbC54eXosIGx1bWEgKTtcclxuXHJcbiAgICAgICAgbGV0IG91dHB1dENvbG9yOnZlYzQ8ZjMyPiA9IHZlYzQ8ZjMyPiggbHVtaW5vc2l0eVVuaWZvcm1zLmRlZmF1bHRDb2xvci5yZ2IsIGx1bWlub3NpdHlVbmlmb3Jtcy5kZWZhdWx0T3BhY2l0eSApO1xyXG5cclxuICAgICAgICBsZXQgYWxwaGE6ZjMyID0gc21vb3Roc3RlcCggbHVtaW5vc2l0eVVuaWZvcm1zLmx1bWlub3NpdHlUaHJlc2hvbGQsIGx1bWlub3NpdHlVbmlmb3Jtcy5sdW1pbm9zaXR5VGhyZXNob2xkICsgbHVtaW5vc2l0eVVuaWZvcm1zLnNtb290aFdpZHRoLCB2ICk7XHJcblxyXG4gICAgICAgcmV0dXJuIG1peCggb3V0cHV0Q29sb3IsIHRleGVsLCBhbHBoYSApO1xyXG4gICAgfVxyXG4gICAgYDtcclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBibGVuZEZyYWcoZGVmaW5lcykge1xyXG5cdHJldHVybiBgXHJcbiAgICBzdHJ1Y3QgRnJhZ0lucHV0IHtcclxuICAgICAgICBAbG9jYXRpb24oMCkgdXY6IHZlYzI8ZjMyPixcclxuICAgIH07XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0RGlmZnVzZUJpbmRpbmd9fSkgdmFyIHREaWZmdXNlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3tiYXNlQ29sb3JUZXh0dXJlQmluZGluZ319KSB2YXIgYmFzZUNvbG9yVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgQGdyb3VwKDApIEBiaW5kaW5nKHt7dFNhbXBsZXJCaW5kaW5nfX0pIHZhciB0U2FtcGxlcjogc2FtcGxlcjtcclxuICAgIEBmcmFnbWVudFxyXG4gICAgZm4gbWFpbihpbnB1dDpGcmFnSW5wdXQpIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4ge1xyXG4gICAgICAgIGxldCBwb3N0Q29sb3I6dmVjNDxmMzI+ID0gdGV4dHVyZVNhbXBsZSh0RGlmZnVzZSwgdFNhbXBsZXIsIGlucHV0LnV2KTtcclxuICAgICAgICBsZXQgYmFzZUNvbG9yOnZlYzQ8ZjMyPiA9IHRleHR1cmVTYW1wbGUoYmFzZUNvbG9yVGV4dHVyZSwgdFNhbXBsZXIsIGlucHV0LnV2KTtcclxuICAgICAgcmV0dXJuIGJhc2VDb2xvcitwb3N0Q29sb3I7XHJcbiAgICB9ICAgXHJcbiAgICBgO1xyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNoYWRvd01hcERlYnVnZ2VyRnJhZyhkZWZpbmVzKSB7XHJcblx0cmV0dXJuIGBcclxuICAgIEBncm91cCgwKSBAYmluZGluZygxKSB2YXIgc2hhZG93U2FtcGxlcjogc2FtcGxlcjtcclxuICAgIEBncm91cCgwKSBAYmluZGluZygwKSB2YXIgc2hhZG93TWFwOiB0ZXh0dXJlX2RlcHRoXzJkO1xyXG4gICAgXHJcbiAgICAvLyBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgdmFyIHNoYWRvd01hcDogdGV4dHVyZV9kZXB0aF8yZF9hcnJheTtcclxuICAgIC8vIEBncm91cCgwKSBAYmluZGluZygwKSB2YXIgc2hhZG93TWFwOiB0ZXh0dXJlXzJkPGYzMj47XHJcblxyXG4gICAgc3RydWN0IFZlcnRleE91dHB1dCB7XHJcbiAgICAgICAgQGJ1aWx0aW4ocG9zaXRpb24pIHBvc2l0aW9uOiB2ZWM0PGYzMj4sXHJcbiAgICAgICAgQGxvY2F0aW9uKDApIHV2OiB2ZWMyPGYzMj4sXHJcbiAgICB9O1xyXG5cclxuICAgIGZuIGxpbmVhcml6ZURlcHRoKGRlcHRoOiBmMzIsIG5lYXI6IGYzMiwgZmFyOiBmMzIpLT5mMzIge1xyXG4gICAgICByZXR1cm4gMiAqIChuZWFyICogZmFyKSAvIChmYXIgKyBuZWFyIC0gZGVwdGggKiAoZmFyIC0gbmVhcikpO1xyXG4gICAgfVxyXG5cclxuICAgIEBmcmFnbWVudFxyXG4gICAgZm4gbWFpbihpbnB1dDpWZXJ0ZXhPdXRwdXQpIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4ge1xyXG5cdFx0XHRsZXQgY29sb3I6IHZlYzQ8ZjMyPiA9IHRleHR1cmVHYXRoZXIoc2hhZG93TWFwLCBzaGFkb3dTYW1wbGVyLCB2ZWMyPGYzMj4oaW5wdXQudXYueCwxLjAtaW5wdXQudXYueSkpO1xyXG4gICAgICBsZXQgZGVwdGggPSAobGluZWFyaXplRGVwdGgoY29sb3IuciwgMC4xLCA1MDApIC0gMC4xKSAvICg1MDAgLSAwLjEpO1xyXG4gICAgICByZXR1cm4gdmVjNCh2ZWMzKGRlcHRoKSwgMS4wKTsgLy8gUGVyc3BlY3RpdmVDYW1lcmFcclxuICAgICAgLy8gcmV0dXJuIGNvbG9yO1xyXG5cclxuICAgICAgLy8gcmV0dXJuIHRleHR1cmVTYW1wbGUoc2hhZG93TWFwLCBzaGFkb3dTYW1wbGVyLCB2ZWMyPGYzMj4oaW5wdXQudXYueCwxLjAtaW5wdXQudXYueSkpO1xyXG5cclxuICAgIH1cclxuICAgIGA7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hhZG93TWFwRGVidWdnZXJWZXJ0KGRlZmluZXMpIHtcclxuXHRyZXR1cm4gYFxyXG4gICAgc3RydWN0IFZlcnRleElucHV0IHtcclxuICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5wb3NpdGlvbkxvY2F0aW9ufSkgcG9zaXRpb246IHZlYzI8ZjMyPiwgICAgICAgXHJcbiAgICB9XHJcbiAgICBzdHJ1Y3QgVmVydGV4T3V0cHV0IHtcclxuICAgICAgICAgQGJ1aWx0aW4ocG9zaXRpb24pIHBvc2l0aW9uOiB2ZWM0PGYzMj4sXHJcbiAgICAgICAgIEBsb2NhdGlvbigwKSB1djogdmVjMjxmMzI+LFxyXG4gICAgIH07XHJcbiAgICBAdmVydGV4XHJcbiAgICBmbiBtYWluKGlucHV0OiBWZXJ0ZXhJbnB1dCkgLT4gVmVydGV4T3V0cHV0IHtcclxuICAgICB2YXIgb3V0cHV0OlZlcnRleE91dHB1dDtcclxuICAgICBvdXRwdXQudXYgPSBpbnB1dC5wb3NpdGlvbiAqIDAuNSArIDAuNTtcclxuICAgICBvdXRwdXQucG9zaXRpb24gPSB2ZWM0PGYzMj4oaW5wdXQucG9zaXRpb24sIDAuMCwgMS4wKTs7XHJcbiAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH1cclxuICAgIGA7XHJcbn1cclxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNoYWRvd01hcFZlcnQoZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICBzdHJ1Y3QgVmVydGV4SW5wdXQge1xyXG4gICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnBvc2l0aW9uTG9jYXRpb259KSBwb3NpdGlvbjogdmVjMzxmMzI+LCAgICAgICBcclxuICAgfTtcclxuICAgc3RydWN0IFZlcnRleE91dHB1dCB7XHJcbiAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxyXG4gICAgfTtcclxuICAgc3RydWN0IFNlbGZVbmlmb3JtIHtcclxuICAgICAgbW9kZWxNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICB9O1xyXG4gICBzdHJ1Y3QgU3lzdGVtVW5pZm9ybSB7XHJcbiAgICAgIHByb2plY3Rpb25NYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICB2aWV3TWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgaW52ZXJzZVZpZXdNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICBjYW1lcmFQb3NpdGlvbjogdmVjMzxmMzI+LFxyXG4gICB9O1xyXG5cclxuICAgI2lmICR7ZGVmaW5lcy5pc1BvaW50TGlnaHRTaGFkb3dNYXB9XHJcbiAgICAgIHN0cnVjdCBQb2ludExpZ2h0VW5pZm9ybSB7XHJcbiAgICAgICAgIHZwTWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgICAgLy8gdnBNYXRyaXhBcnJheTogYXJyYXk8bWF0NHg0PGYzMj4sIDY+LFxyXG4gICAgICB9O1xyXG4gICAgICBAZ3JvdXAoMSkgQGJpbmRpbmcoJHtkZWZpbmVzLnBvaW50TGlnaHRTaGFkb3dDYW1lcmFCaW5kaW5nfSkgdmFyPHN0b3JhZ2UsIHJlYWQ+IHBvaW50TGlnaHRVbmlmb3JtOiBQb2ludExpZ2h0VW5pZm9ybTtcclxuICAgI2VuZGlmXHJcblxyXG4gICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnNlbGZCaW5kaW5nfSkgdmFyPHVuaWZvcm0+IHNlbGZVbmlmb3JtIDogU2VsZlVuaWZvcm07XHJcbiAgIEBncm91cCgxKSBAYmluZGluZygke2RlZmluZXMuY2FtZXJhQmluZGluZ30pIHZhcjx1bmlmb3JtPiBzeXN0ZW1Vbmlmb3JtIDogU3lzdGVtVW5pZm9ybTtcclxuXHJcbiAgIEB2ZXJ0ZXhcclxuICAgZm4gbWFpbihpbnB1dDogVmVydGV4SW5wdXQpIC0+IFZlcnRleE91dHB1dCB7XHJcbiAgICAgIHZhciBvdXRwdXQ6VmVydGV4T3V0cHV0O1xyXG4gICAgICAjaWYgJHtkZWZpbmVzLmlzUG9pbnRMaWdodFNoYWRvd01hcH1cclxuICAgICAgICAgb3V0cHV0LnBvc2l0aW9uID0gcG9pbnRMaWdodFVuaWZvcm0udnBNYXRyaXggKiBzZWxmVW5pZm9ybS5tb2RlbE1hdHJpeCAqIHZlYzQ8ZjMyPihpbnB1dC5wb3NpdGlvbiwxLjApO1xyXG4gICAgICAjZWxzZVxyXG4gICAgICAgICBvdXRwdXQucG9zaXRpb24gPSBzeXN0ZW1Vbmlmb3JtLnByb2plY3Rpb25NYXRyaXggKiBzeXN0ZW1Vbmlmb3JtLnZpZXdNYXRyaXggKiBzZWxmVW5pZm9ybS5tb2RlbE1hdHJpeCAqIHZlYzQ8ZjMyPihpbnB1dC5wb3NpdGlvbiwxLjApO1xyXG4gICAgICAjZW5kaWZcclxuICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgfVxyXG4gICBgO1xyXG59XHJcbiIsIi8vIGltcG9ydCBDb2xvciBmcm9tIFwiLi4vLi4vbWF0aC9Db2xvclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hhZG93TWFwRnJhZyhkZWZpbmVzKSB7XHJcblx0cmV0dXJuIGBcclxuICAgIHN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxyXG4gICAgICAgIEBsb2NhdGlvbigwKSBjb2xvcjogdmVjNDxmMzI+LFxyXG4gICAgfTtcclxuICAgIEBmcmFnbWVudFxyXG4gICAgZm4gbWFpbihpbnB1dDpWZXJ0ZXhPdXRwdXQpIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4ge1xyXG4gICAgICByZXR1cm4gaW5wdXQuY29sb3I7XHJcbiAgICB9XHJcbiAgICBgO1xyXG59XHJcbiIsImltcG9ydCBTaGFkZXJDaHVuayBmcm9tIFwiLi9zaGFkZXJDaHVuay9TaGFkZXJDaHVua1wiO1xyXG5pbXBvcnQgcGhvbmdWZXJ0IGZyb20gXCIuL21hdGVyaWFsL3Bob25nVmVydFwiO1xyXG5pbXBvcnQgcGhvbmdGcmFnIGZyb20gXCIuL21hdGVyaWFsL3Bob25nRnJhZ1wiO1xyXG5pbXBvcnQgY29sb3JGcmFnIGZyb20gXCIuL21hdGVyaWFsL2NvbG9yRnJhZ1wiO1xyXG5pbXBvcnQgY29sb3JWZXJ0IGZyb20gXCIuL21hdGVyaWFsL2NvbG9yVmVydFwiO1xyXG5pbXBvcnQgcGJyRnJhZyBmcm9tIFwiLi9tYXRlcmlhbC9wYnJGcmFnXCI7XHJcbmltcG9ydCBwYnJWZXJ0IGZyb20gXCIuL21hdGVyaWFsL3BiclZlcnRcIjtcclxuaW1wb3J0IHNreUJveEZyYWcgZnJvbSBcIi4vbWF0ZXJpYWwvc2t5Qm94RnJhZ1wiO1xyXG5pbXBvcnQgc2t5Qm94VmVydCBmcm9tIFwiLi9tYXRlcmlhbC9za3lCb3hWZXJ0XCI7XHJcbmltcG9ydCBxdWFkRnJhZyBmcm9tIFwiLi9tYXRlcmlhbC9xdWFkRnJhZ1wiO1xyXG5pbXBvcnQgcXVhZFZlcnQgZnJvbSBcIi4vbWF0ZXJpYWwvcXVhZFZlcnRcIjtcclxuaW1wb3J0IHBicl92cyBmcm9tIFwiLi9tYXRlcmlhbC9wYnJfdnNcIjtcclxuaW1wb3J0IHBicl9mcyBmcm9tIFwiLi9tYXRlcmlhbC9wYnJfZnNcIjtcclxuaW1wb3J0IEJsdXIgZnJvbSBcIi4vcG9zdFByb2Nlc3MvYmxvb20vQmx1clwiO1xyXG5pbXBvcnQgTHVtaW5vc2l0eUhpZ2ggZnJvbSBcIi4vcG9zdFByb2Nlc3MvYmxvb20vTHVtaW5vc2l0eUhpZ2hcIjtcclxuaW1wb3J0IGJsZW5kRnJhZyBmcm9tIFwiLi9wb3N0UHJvY2Vzcy9ibGVuZC9ibGVuZEZyYWdcIjtcclxuaW1wb3J0IHNoYWRvd01hcERlYnVnZ2VyRnJhZyBmcm9tIFwiLi9zaGFkZXJDaHVuay9zaGFkb3cvc2hhZG93TWFwRGVidWdnZXJGcmFnXCI7XHJcbmltcG9ydCBzaGFkb3dNYXBEZWJ1Z2dlclZlcnQgZnJvbSBcIi4vc2hhZGVyQ2h1bmsvc2hhZG93L3NoYWRvd01hcERlYnVnZ2VyVmVydFwiO1xyXG5pbXBvcnQgc2hhZG93TWFwVmVydCBmcm9tIFwiLi9zaGFkZXJDaHVuay9zaGFkb3cvc2hhZG93TWFwVmVydFwiO1xyXG5pbXBvcnQgc2hhZG93TWFwRnJhZyBmcm9tIFwiLi9zaGFkZXJDaHVuay9zaGFkb3cvc2hhZG93TWFwRnJhZ1wiO1xyXG5cclxuZnVuY3Rpb24gcmVkdWNlQ29tbWEoc2hhZGVyKSB7XHJcblx0Ly/lr7nmiYDmnInnmoRpbmNsdWRl5aSE55CGXHJcblx0Y29uc3Qgc3RyID0gcmVzb2x2ZUluY2x1ZGVzKHNoYWRlcik7XHJcblx0cmV0dXJuIHN0cjtcclxufVxyXG5jb25zdCBpbmNsdWRlUGF0dGVybiA9IC9eWyBcXHRdKiNpbmNsdWRlICs8KFtcXHdcXGQuL10rKT4vZ207XHJcbmxldCBjdXJyZW50RGVmaW5lcyA9IHt9O1xyXG5jb25zdCBzaGFkZXJzID0ge1xyXG5cdHBob25nOiB7XHJcblx0XHRmcmFnOiBwaG9uZ0ZyYWcsXHJcblx0XHR2ZXJ0OiBwaG9uZ1ZlcnRcclxuXHR9LFxyXG5cdGNvbG9yOiB7XHJcblx0XHRmcmFnOiBjb2xvckZyYWcsXHJcblx0XHR2ZXJ0OiBjb2xvclZlcnRcclxuXHR9LFxyXG5cdHBicjoge1xyXG5cdFx0ZnJhZzogcGJyRnJhZyxcclxuXHRcdHZlcnQ6IHBiclZlcnRcclxuXHR9LFxyXG5cdHNreWJveDoge1xyXG5cdFx0ZnJhZzogc2t5Qm94RnJhZyxcclxuXHRcdHZlcnQ6IHNreUJveFZlcnRcclxuXHR9LFxyXG5cdHJlc29sdmU6IHtcclxuXHRcdGZyYWc6IHF1YWRGcmFnLFxyXG5cdFx0dmVydDogcXVhZFZlcnRcclxuXHR9LFxyXG5cdHBicl9tYXQ6IHtcclxuXHRcdGZyYWc6IHBicl9mcyxcclxuXHRcdHZlcnQ6IHBicl92c1xyXG5cdH0sXHJcblx0Ymx1cjoge1xyXG5cdFx0ZnJhZzogQmx1cixcclxuXHRcdHZlcnQ6IHF1YWRWZXJ0XHJcblx0fSxcclxuXHRsdW1pbm9zaXR5SGlnaDoge1xyXG5cdFx0ZnJhZzogTHVtaW5vc2l0eUhpZ2gsXHJcblx0XHR2ZXJ0OiBxdWFkVmVydFxyXG5cdH0sXHJcblx0YmxlbmQ6IHtcclxuXHRcdGZyYWc6IGJsZW5kRnJhZyxcclxuXHRcdHZlcnQ6IHF1YWRWZXJ0XHJcblx0fSxcclxuXHRzaGFkb3dNYXBEZWJ1Z2dlcjoge1xyXG5cdFx0ZnJhZzogc2hhZG93TWFwRGVidWdnZXJGcmFnLFxyXG5cdFx0dmVydDogc2hhZG93TWFwRGVidWdnZXJWZXJ0XHJcblx0fSxcclxuXHRzaGFkb3dNYXA6IHtcclxuXHRcdHZlcnQ6IHNoYWRvd01hcFZlcnQsXHJcblx0XHRmcmFnOiBzaGFkb3dNYXBGcmFnXHJcblx0fVxyXG59O1xyXG5cclxuZnVuY3Rpb24gcmVzb2x2ZUluY2x1ZGVzKHN0cmluZykge1xyXG5cdHJldHVybiBzdHJpbmcucmVwbGFjZShpbmNsdWRlUGF0dGVybiwgaW5jbHVkZVJlcGxhY2VyKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5jbHVkZVJlcGxhY2VyKG1hdGNoLCBpbmNsdWRlKSB7XHJcblx0Y29uc3QgZXhjdXRlID0gU2hhZGVyQ2h1bmtbaW5jbHVkZV07XHJcblx0aWYgKGV4Y3V0ZSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgcmVzb2x2ZSAjaW5jbHVkZSA8JHtpbmNsdWRlfT5gKTtcclxuXHR9XHJcblx0Y29uc3QgcmVzdWx0ID0gZXhjdXRlKGN1cnJlbnREZWZpbmVzKTtcclxuXHRyZXR1cm4gcmVzb2x2ZUluY2x1ZGVzKHJlc3VsdCk7XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VmVydEZyYWcodHlwZSwgZGVmaW5lcyA9IHt9KSB7XHJcblx0Y29uc3QgZXhjdXRlRnVuYyA9IHNoYWRlcnNbdHlwZV07XHJcblx0Y3VycmVudERlZmluZXMgPSBkZWZpbmVzO1xyXG5cdHJldHVybiB7XHJcblx0XHR2ZXJ0OiByZWR1Y2VDb21tYShleGN1dGVGdW5jLnZlcnQoY3VycmVudERlZmluZXMpKSxcclxuXHRcdGZyYWc6IHJlZHVjZUNvbW1hKGV4Y3V0ZUZ1bmMuZnJhZyhjdXJyZW50RGVmaW5lcykpXHJcblx0fTtcclxufVxyXG4iLCJpbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IGdldFZlcnRGcmFnIGZyb20gXCIuL1NoYWRlcnNcIjtcclxuZXhwb3J0IGludGVyZmFjZSBHUFVTaGFkZXJNb2R1bGVPYmplY3Qge1xyXG5cdHZlcnQ6IEdQVVNoYWRlck1vZHVsZTtcclxuXHRmcmFnOiBHUFVTaGFkZXJNb2R1bGU7XHJcbn1cclxuZXhwb3J0IGNsYXNzIFNoYWRlclNvdXJjZSB7XHJcblx0dmVydEVudHJ5UG9pbnQ/OiBzdHJpbmc7XHJcblx0ZnJhZ0VudHJ5UG9pbnQ/OiBzdHJpbmc7XHJcblx0dmVydD86IHN0cmluZyB8IEZ1bmN0aW9uO1xyXG5cdGZyYWc/OiBzdHJpbmcgfCBGdW5jdGlvbjtcclxuXHRjb21wdXRlPzogc3RyaW5nIHwgRnVuY3Rpb247XHJcblx0Y29tcHV0ZU1haW4/OiBzdHJpbmc7XHJcblx0ZGVmaW5lcz86IHt9O1xyXG5cdGRpcnR5OiBib29sZWFuO1xyXG5cdHJlbmRlcjogYm9vbGVhbjtcclxuXHR0eXBlOiBzdHJpbmc7XHJcblx0cHJpdmF0ZSBfdWlkOiBzdHJpbmc7XHJcblx0cHJpdmF0ZSBjdXN0b206IGJvb2xlYW47XHJcblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xyXG5cdFx0dGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xyXG5cdFx0dGhpcy5kZWZpbmVzID0gb3B0aW9ucy5kZWZpbmVzO1xyXG5cdFx0dGhpcy5jdXN0b20gPSBkZWZhdWx0VmFsdWUob3B0aW9ucy5jdXN0b20sIGZhbHNlKTtcclxuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xyXG5cdFx0aWYgKG9wdGlvbnMucmVuZGVyKSB7XHJcblx0XHRcdHRoaXMucmVuZGVyID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy52ZXJ0RW50cnlQb2ludCA9IG9wdGlvbnMudmVydE1haW4gfHwgXCJtYWluXCI7XHJcblx0XHRcdHRoaXMuZnJhZ0VudHJ5UG9pbnQgPSBvcHRpb25zLmZyYWdNYWluIHx8IFwibWFpblwiO1xyXG5cdFx0XHR0aGlzLnZlcnQgPSBvcHRpb25zLnZlcnQgfHwgdW5kZWZpbmVkO1xyXG5cdFx0XHR0aGlzLmZyYWcgPSBvcHRpb25zLmZyYWcgfHwgdW5kZWZpbmVkO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5jb21wdXRlID0gb3B0aW9ucy5jb21wdXRlIHx8IHVuZGVmaW5lZDtcclxuXHRcdFx0dGhpcy5jb21wdXRlTWFpbiA9IG9wdGlvbnMuY29tcHV0ZU1haW4gfHwgXCJtYWluXCI7XHJcblx0XHR9XHJcblx0fVxyXG5cdGdldCB1aWQoKSB7XHJcblx0XHR0aGlzLl91aWQgPSB0aGlzLnR5cGUuY29uY2F0KEpTT04uc3RyaW5naWZ5KHRoaXMuZGVmaW5lcykpO1xyXG5cdFx0cmV0dXJuIHRoaXMuX3VpZDtcclxuXHR9XHJcblx0cHJpdmF0ZSB1cGRhdGVTaGFkZXJTdHIoKSB7XHJcblx0XHRpZiAodGhpcy5jdXN0b20pIHtcclxuXHRcdFx0aWYgKHRoaXMuY29tcHV0ZSkge1xyXG5cdFx0XHRcdHRoaXMuY29tcHV0ZSA9ICg8RnVuY3Rpb24+dGhpcy5jb21wdXRlKSh0aGlzLmRlZmluZXMpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMudmVydCA9IHRoaXMudmVydCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gdGhpcy52ZXJ0KHRoaXMuZGVmaW5lcykgOiB0aGlzLnZlcnQ7XHJcblx0XHRcdFx0dGhpcy5mcmFnID0gdGhpcy5mcmFnIGluc3RhbmNlb2YgRnVuY3Rpb24gPyB0aGlzLmZyYWcodGhpcy5kZWZpbmVzKSA6IHRoaXMuZnJhZztcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc3Qgc291cmNlID0gZ2V0VmVydEZyYWcodGhpcy50eXBlLCB0aGlzLmRlZmluZXMpO1xyXG5cclxuXHRcdFx0dGhpcy52ZXJ0ID0gc291cmNlLnZlcnQ7XHJcblx0XHRcdHRoaXMuZnJhZyA9IHNvdXJjZS5mcmFnO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRwdWJsaWMgc2V0RGVmaW5lcyhkZWZpbmVzKSB7XHJcblx0XHRpZiAoIWRlZmluZXMpIHJldHVybjtcclxuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5kZWZpbmVzID0gT2JqZWN0LmFzc2lnbih0aGlzLmRlZmluZXMsIGRlZmluZXMpO1xyXG5cdH1cclxuXHRjcmVhdGVTaGFkZXJNb2R1bGUoZGV2aWNlOiBHUFVEZXZpY2UpOiB7IHZlcnQ6IEdQVVNoYWRlck1vZHVsZTsgZnJhZzogR1BVU2hhZGVyTW9kdWxlIH0gfCBHUFVTaGFkZXJNb2R1bGUge1xyXG5cdFx0aWYgKHRoaXMuZGlydHkpIHtcclxuXHRcdFx0dGhpcy51cGRhdGVTaGFkZXJTdHIoKTtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMucmVuZGVyKSB7XHJcblx0XHRcdGNvbnN0IHZlcnQgPSB0aGlzLnZlcnRcclxuXHRcdFx0XHQ/IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe1xyXG5cdFx0XHRcdFx0XHRjb2RlOiA8c3RyaW5nPnRoaXMudmVydFxyXG5cdFx0XHRcdCAgfSlcclxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcclxuXHRcdFx0Y29uc3QgZnJhZyA9IHRoaXMuZnJhZ1xyXG5cdFx0XHRcdD8gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7XHJcblx0XHRcdFx0XHRcdGNvZGU6IDxzdHJpbmc+dGhpcy5mcmFnXHJcblx0XHRcdFx0ICB9KVxyXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xyXG5cclxuXHRcdFx0cmV0dXJuIHsgdmVydCwgZnJhZyB9O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc3QgY29tcHV0ZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe1xyXG5cdFx0XHRcdGNvZGU6IDxzdHJpbmc+dGhpcy5jb21wdXRlXHJcblx0XHRcdH0pO1xyXG5cdFx0XHRyZXR1cm4gY29tcHV0ZTtcclxuXHRcdH1cclxuXHR9XHJcblx0c3RhdGljIHJlcGxhY2VNYWluKHNvdXJjZTogc3RyaW5nLCByZW5hbWVkTWFpbjogc3RyaW5nKSB7XHJcblx0XHRyZW5hbWVkTWFpbiA9IGB2b2lkICR7cmVuYW1lZE1haW59KClgO1xyXG5cdFx0cmV0dXJuIHNvdXJjZS5yZXBsYWNlKC92b2lkXFxzK21haW5cXHMqXFwoXFxzKig/OnZvaWQpP1xccypcXCkvZywgcmVuYW1lZE1haW4pO1xyXG5cdH1cclxuXHRzdGF0aWMgY29tcGlsZUN1c3RvbVNoYWRlcmJhY2tVcCh0ZW1wbGF0ZSwgZGVmaW5lcyk6IHN0cmluZyB7XHJcblx0XHRjb25zdCByZWcgPSAvXFx7XFx7KFxcdyspXFx9XFx9LztcclxuXHRcdGlmIChyZWcudGVzdCh0ZW1wbGF0ZSkpIHtcclxuXHRcdFx0Y29uc3QgbmFtZSA9IHJlZy5leGVjKHRlbXBsYXRlKVsxXTtcclxuXHRcdFx0dGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKHJlZywgZGVmaW5lc1tuYW1lXSk7XHJcblx0XHRcdHJldHVybiBTaGFkZXJTb3VyY2UuY29tcGlsZUN1c3RvbVNoYWRlcih0ZW1wbGF0ZSwgZGVmaW5lcyk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGVtcGxhdGU7XHJcblx0fVxyXG5cdHN0YXRpYyBjb21waWxlQ3VzdG9tU2hhZGVyKHRlbXBsYXRlLCBkZWZpbmVzKTogc3RyaW5nIHtcclxuXHRcdGNvbnN0IHJlZyA9IC9cXCR7KFxcdyspLihcXHcrKX0vO1xyXG5cdFx0aWYgKHJlZy50ZXN0KHRlbXBsYXRlKSkge1xyXG5cdFx0XHRjb25zdCByZWdWYWx1ZSA9IHJlZy5leGVjKHRlbXBsYXRlKTtcclxuXHRcdFx0Y29uc3QgZGVmaW5lID0gcmVnVmFsdWVbMl07XHJcblx0XHRcdGNvbnN0IG5hbWUgPSByZWdWYWx1ZVswXTtcclxuXHRcdFx0dGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKG5hbWUsIGRlZmluZXNbZGVmaW5lXSk7XHJcblx0XHRcdHJldHVybiBTaGFkZXJTb3VyY2UuY29tcGlsZUN1c3RvbVNoYWRlcih0ZW1wbGF0ZSwgZGVmaW5lcyk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGVtcGxhdGU7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IElVbmlmb3JtLCBVbmlmb3JtcyB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBTaGFkZXJEYXRhIGZyb20gXCIuLi9yZW5kZXIvU2hhZGVyRGF0YVwiO1xyXG5pbXBvcnQgVW5pZm9ybUJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1CdWZmZXJcIjtcclxuaW1wb3J0IHsgVW5pZm9ybUVudW0gfSBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1zXCI7XHJcbmNvbnN0IHVuaWZvcm1BcnJheU5hbWVzID0gW1wiZmxvYXQtYXJyYXlcIiwgXCJ2ZWMyLWFycmF5XCIsIFwidmVjMy1hcnJheVwiLCBcInZlYzQtYXJyYXlcIl07XHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NvbnRhaW5GbG9hdFR5cGUodW5pZm9ybXMpIHtcclxuXHRsZXQgcmVzdWx0ID0gMDtcclxuXHRsZXQgaGFzQXJyYXl0eXBlID0gZmFsc2U7XHJcblx0Y29uc3QgdW5pZm9ybXNOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHVuaWZvcm1zKTtcclxuXHR1bmlmb3Jtc05hbWVzLm1hcCgodW5pZm9ybXNOYW1lKSA9PiB7XHJcblx0XHRpZiAodW5pZm9ybXNbdW5pZm9ybXNOYW1lXS50eXBlID09IFwidGV4dHVyZVwiIHx8IHVuaWZvcm1zW3VuaWZvcm1zTmFtZV0udHlwZSA9PSBcInNhbXBsZXJcIikge1xyXG5cdFx0XHRyZXN1bHQgKz0gMDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR1bmlmb3JtQXJyYXlOYW1lcy5maW5kKChuYW1lKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gbmFtZSA9PT0gdW5pZm9ybXNbdW5pZm9ybXNOYW1lXS50eXBlO1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGhhc0FycmF5dHlwZSA9IHRydWU7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmVzdWx0ICs9IDE7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9KTtcclxuXHRyZXR1cm4ge1xyXG5cdFx0aGFzRmxvYXQ6IHJlc3VsdCxcclxuXHRcdGhhc0FycmF5dHlwZVxyXG5cdH07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGFkZFVuaWZvcm1Ub1NoYWRlckRhdGEoXHJcblx0bmFtZTogc3RyaW5nLFxyXG5cdHVuaWZvcm06IElVbmlmb3JtLFxyXG5cdHVuaWZvcm1zOiBVbmlmb3JtcyxcclxuXHRzaGFkZXJEYXRhOiBTaGFkZXJEYXRhLFxyXG5cdHVuaWZvcm1CdWZmZXI/OiBVbmlmb3JtQnVmZmVyXHJcbikge1xyXG5cdHN3aXRjaCAodW5pZm9ybS50eXBlKSB7XHJcblx0XHRjYXNlIFwiZmxvYXRcIjpcclxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcdG5hbWUsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm1zW25hbWVdLnZhbHVlO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uRmxvYXRcclxuXHRcdFx0KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFwidmVjMlwiOlxyXG5cdFx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0bmFtZSxcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdW5pZm9ybXNbbmFtZV0udmFsdWU7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRVbmlmb3JtRW51bS5GbG9hdFZlYzJcclxuXHRcdFx0KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFwidmVjM1wiOlxyXG5cdFx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0bmFtZSxcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdW5pZm9ybXNbbmFtZV0udmFsdWU7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRVbmlmb3JtRW51bS5GbG9hdFZlYzNcclxuXHRcdFx0KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFwiY29sb3JcIjpcclxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcdG5hbWUsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm1zW25hbWVdLnZhbHVlO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uQ29sb3JcclxuXHRcdFx0KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFwidmVjNFwiOlxyXG5cdFx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0bmFtZSxcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdW5pZm9ybXNbbmFtZV0udmFsdWU7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRVbmlmb3JtRW51bS5GbG9hdFZlYzRcclxuXHRcdFx0KTtcclxuXHRcdGNhc2UgXCJtYXQyXCI6XHJcblx0XHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XHRuYW1lLFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdHJldHVybiB1bmlmb3Jtc1tuYW1lXS52YWx1ZTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdFVuaWZvcm1FbnVtLk1hdDJcclxuXHRcdFx0KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFwibWF0M1wiOlxyXG5cdFx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0bmFtZSxcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdW5pZm9ybXNbbmFtZV0udmFsdWU7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRVbmlmb3JtRW51bS5NYXQzXHJcblx0XHRcdCk7XHJcblx0XHRjYXNlIFwibWF0NFwiOlxyXG5cdFx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0bmFtZSxcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdW5pZm9ybXNbbmFtZV0udmFsdWU7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRVbmlmb3JtRW51bS5NYXQ0XHJcblx0XHRcdCk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSBcImZsb2F0LWFycmF5XCI6XHJcblx0XHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XHRuYW1lLFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdHJldHVybiB1bmlmb3Jtc1tuYW1lXS52YWx1ZTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdFVuaWZvcm1FbnVtLkZsb2F0QXJyYXksXHJcblx0XHRcdFx0dW5pZm9ybXNbbmFtZV0udmFsdWUubGVuZ3RoXHJcblx0XHRcdCk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSBcInZlYzItYXJyYXlcIjpcclxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcdG5hbWUsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm1zW25hbWVdLnZhbHVlO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uVmVjMkFycmF5LFxyXG5cdFx0XHRcdHVuaWZvcm1zW25hbWVdLnZhbHVlLmxlbmd0aFxyXG5cdFx0XHQpO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgXCJ2ZWMzLWFycmF5XCI6XHJcblx0XHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XHRuYW1lLFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdHJldHVybiB1bmlmb3Jtc1tuYW1lXS52YWx1ZTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdFVuaWZvcm1FbnVtLlZlYzNBcnJheSxcclxuXHRcdFx0XHR1bmlmb3Jtc1tuYW1lXS52YWx1ZS5sZW5ndGhcclxuXHRcdFx0KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFwidmVjNC1hcnJheVwiOlxyXG5cdFx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0bmFtZSxcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdW5pZm9ybXNbbmFtZV0udmFsdWU7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRVbmlmb3JtRW51bS5WZWM0QXJyYXksXHJcblx0XHRcdFx0dW5pZm9ybXNbbmFtZV0udmFsdWUubGVuZ3RoXHJcblx0XHRcdCk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSBcInRleHR1cmVcIjpcclxuXHRcdFx0c2hhZGVyRGF0YS5zZXRUZXh0dXJlKG5hbWUsICgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdW5pZm9ybXNbbmFtZV0udmFsdWU7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgXCJzYW1wbGVyXCI6XHJcblx0XHRcdHNoYWRlckRhdGEuc2V0U2FtcGxlcihuYW1lLCAoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHVuaWZvcm1zW25hbWVdLnZhbHVlO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRkZWZhdWx0OlxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub3QgbWF0Y2ggdW5pZnJvbSB0eXBlXCIpO1xyXG5cdFx0XHRicmVhaztcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IEJpbmRHcm91cExheW91dEVudHJ5IGZyb20gXCIuL0JpbmRHcm91cExheW91dEVudHJ5XCI7XHJcbmNvbnN0IGxheW91dENhY2hlID0gbmV3IE1hcCgpO1xyXG5jbGFzcyBCaW5kR3JvdXBMYXlvdXQge1xyXG5cdHB1YmxpYyBncHVCaW5kR3JvdXBMYXlvdXQ6IEdQVUJpbmRHcm91cExheW91dDtcclxuXHRpbmRleDogbnVtYmVyO1xyXG5cdHByaXZhdGUgY29uc3RydWN0b3IoZGV2aWNlOiBHUFVEZXZpY2UsIGxhYmVsOiBzdHJpbmcsIHB1YmxpYyBlbnRyaWVzOiBCaW5kR3JvdXBMYXlvdXRFbnRyeVtdID0gW10sIGluZGV4ID0gMCkge1xyXG5cdFx0dGhpcy5pbmRleCA9IGluZGV4IHx8IDA7XHJcblx0XHR0aGlzLmdwdUJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoe1xyXG5cdFx0XHRsYWJlbDogbGFiZWwsXHJcblx0XHRcdGVudHJpZXM6IGVudHJpZXMubWFwKCh7IHZpc2liaWxpdHksIGJ1ZmZlciwgc2FtcGxlciwgdGV4dHVyZSwgc3RvcmFnZVRleHR1cmUsIGJpbmRpbmcgfSkgPT4gKHtcclxuXHRcdFx0XHRiaW5kaW5nLFxyXG5cdFx0XHRcdHZpc2liaWxpdHksXHJcblx0XHRcdFx0YnVmZmVyLFxyXG5cdFx0XHRcdHNhbXBsZXIsXHJcblx0XHRcdFx0dGV4dHVyZSxcclxuXHRcdFx0XHRzdG9yYWdlVGV4dHVyZVxyXG5cdFx0XHR9KSlcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRzdGF0aWMgZ2V0QmluZEdyb3VwTGF5b3V0RnJvbUNhY2hlKFxyXG5cdFx0ZGV2aWNlOiBHUFVEZXZpY2UsXHJcblx0XHRsYWJlbDogc3RyaW5nLFxyXG5cdFx0ZW50aXJlczogQmluZEdyb3VwTGF5b3V0RW50cnlbXSxcclxuXHRcdGluZGV4XHJcblx0KTogQmluZEdyb3VwTGF5b3V0IHtcclxuXHRcdGlmIChsYXlvdXRDYWNoZS5oYXMobGFiZWwpKSB7XHJcblx0XHRcdHJldHVybiBsYXlvdXRDYWNoZS5nZXQobGFiZWwpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc3QgYmluZEdyb3VwTGF5b3V0ID0gbmV3IEJpbmRHcm91cExheW91dChkZXZpY2UsIGxhYmVsLCBlbnRpcmVzLCBpbmRleCk7XHJcblx0XHRcdGxheW91dENhY2hlLnNldChsYWJlbCwgYmluZEdyb3VwTGF5b3V0KTtcclxuXHRcdFx0cmV0dXJuIGJpbmRHcm91cExheW91dDtcclxuXHRcdH1cclxuXHR9XHJcblx0c3RhdGljIHJlbW92ZUJpbmRHcm91cExheW91dEZyb21DYWNoZShiaW5kR3JvdXBMYXlvdXQ6IEJpbmRHcm91cExheW91dCkge1xyXG5cdFx0bGF5b3V0Q2FjaGUuZGVsZXRlKGJpbmRHcm91cExheW91dCk7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCaW5kR3JvdXBMYXlvdXQ7XHJcbiIsImltcG9ydCB7IEJpbmRHcm91cExheW91dEVudHJ5VHlwZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpbmRHcm91cExheW91dEVudHJ5IHtcclxuICBiaW5kaW5nOiBudW1iZXI7XHJcbiAgdmlzaWJpbGl0eTogR1BVU2hhZGVyU3RhZ2VGbGFncztcclxuICB1bmlmb3Jtcz86IGFueVtdO1xyXG4gIGJ1ZmZlcj86IEdQVUJ1ZmZlckJpbmRpbmdMYXlvdXQ7XHJcbiAgc2FtcGxlcj86IEdQVVNhbXBsZXJCaW5kaW5nTGF5b3V0O1xyXG4gIHRleHR1cmU/OiBHUFVUZXh0dXJlQmluZGluZ0xheW91dDtcclxuICBzdG9yYWdlVGV4dHVyZT86IEdQVVN0b3JhZ2VUZXh0dXJlQmluZGluZ0xheW91dDtcclxuICBleHRlcm5hbFRleHR1cmU/OiBHUFVFeHRlcm5hbFRleHR1cmVCaW5kaW5nTGF5b3V0O1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJpbmRHcm91cExheW91dEVudHJ5VHlwZSkge1xyXG4gICAgdGhpcy5iaW5kaW5nID0gb3B0aW9ucy5iaW5kaW5nO1xyXG4gICAgdGhpcy52aXNpYmlsaXR5ID0gb3B0aW9ucy52aXNpYmlsaXR5O1xyXG4gICAgdGhpcy5idWZmZXIgPSBvcHRpb25zLmJ1ZmZlcjtcclxuICAgIHRoaXMuc2FtcGxlciA9IG9wdGlvbnMuc2FtcGxlcjtcclxuICAgIHRoaXMudGV4dHVyZSA9IG9wdGlvbnMudGV4dHVyZTtcclxuICAgIHRoaXMuc3RvcmFnZVRleHR1cmUgPSBvcHRpb25zLnN0b3JhZ2VUZXh0dXJlO1xyXG4gICAgdGhpcy5leHRlcm5hbFRleHR1cmUgPSBvcHRpb25zLnN0b3JhZ2VUZXh0dXJlO1xyXG4gIH1cclxuICBnZXRHUFVMYXlvdXRFbnRpdHkoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBiaW5kaW5nOiB0aGlzLmJpbmRpbmcsXHJcbiAgICAgIHZpc2liaWxpdHk6IHRoaXMudmlzaWJpbGl0eSxcclxuICAgICAgYnVmZmVyOiB0aGlzLmJ1ZmZlcixcclxuICAgICAgc2FtcGxlcjogdGhpcy5zYW1wbGVyLFxyXG4gICAgICB0ZXh0dXJlOiB0aGlzLnRleHR1cmUsXHJcbiAgICAgIHN0b3JhZ2VUZXh0dXJlOiB0aGlzLnN0b3JhZ2VUZXh0dXJlLFxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IGRlZmF1bHRWYWx1ZSBmcm9tIFwiLi4vdXRpbHMvZGVmYXVsdFZhbHVlXCI7XHJcbmltcG9ydCBCaW5kR3JvdXAgZnJvbSBcIi4vQmluZEdyb3VwXCI7XHJcbmltcG9ydCBCaW5kR3JvdXBFbnRpdHkgZnJvbSBcIi4vQmluZEdyb3VwRW50aXR5XCI7XHJcbmltcG9ydCBCaW5kR3JvdXBMYXlvdXQgZnJvbSBcIi4vQmluZEdyb3VwTGF5b3V0XCI7XHJcbmltcG9ydCBCaW5kR3JvdXBMYXlvdXRFbnRyeSBmcm9tIFwiLi9CaW5kR3JvdXBMYXlvdXRFbnRyeVwiO1xyXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi9Db250ZXh0XCI7XHJcbmltcG9ydCBTYW1wbGVyIGZyb20gXCIuL1NhbXBsZXJcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4vVGV4dHVyZVwiO1xyXG5pbXBvcnQgVW5pZm9ybUJ1ZmZlciBmcm9tIFwiLi9Vbmlmb3JtQnVmZmVyXCI7XHJcbmltcG9ydCB7IFVuaWZvcm1TYW1wbGVyLCBVbmlmb3JtVGV4dHVyZSB9IGZyb20gXCIuL1VuaWZvcm1zXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYWRlckRhdGEge1xyXG5cdGN1cnJlbnRCaW5kaW5nOiBudW1iZXI7XHJcblxyXG5cdGRlZmluZXM6IHsgW3Byb3A6IHN0cmluZ106IGJvb2xlYW4gfCBudW1iZXIgfTtcclxuXHJcblx0ZGVmaW5lRGlydHk6IGJvb2xlYW47XHJcblxyXG5cdGxhYmVsOiBzdHJpbmc7XHJcblxyXG5cdGJpbmRHcm91cDogQmluZEdyb3VwO1xyXG5cclxuXHRncm91cExheW91dDogQmluZEdyb3VwTGF5b3V0O1xyXG5cclxuXHRsYXlvdXRJbmRleDogbnVtYmVyO1xyXG5cclxuXHRncm91cEluZGV4OiBudW1iZXI7XHJcblxyXG5cdHByb3RlY3RlZCBfdW5pZm9ybXM6IE1hcDxzdHJpbmcsIGFueT47XHJcblxyXG5cdGNvbnN0cnVjdG9yKGxhYmVsOiBzdHJpbmcsIHNpemU/OiBudW1iZXIsIGxheW91dEluZGV4PzogbnVtYmVyLCBncm91cEluZGV4Pykge1xyXG5cdFx0dGhpcy5sYWJlbCA9IGxhYmVsO1xyXG5cdFx0dGhpcy5jdXJyZW50QmluZGluZyA9IDA7XHJcblx0XHR0aGlzLmRlZmluZURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuZGVmaW5lcyA9IHt9O1xyXG5cdFx0dGhpcy5fdW5pZm9ybXMgPSBuZXcgTWFwKCk7XHJcblx0XHR0aGlzLmdyb3VwSW5kZXggPSBkZWZhdWx0VmFsdWUoZ3JvdXBJbmRleCwgMCk7XHJcblx0XHR0aGlzLmxheW91dEluZGV4ID0gZGVmYXVsdFZhbHVlKGxheW91dEluZGV4LCAwKTtcclxuXHR9XHJcblx0Z2V0VW5pZm9ybUJ1ZmZlcihuYW1lOiBzdHJpbmcpOiBVbmlmb3JtQnVmZmVyIHtcclxuXHRcdHJldHVybiB0aGlzLl91bmlmb3Jtcy5nZXQobmFtZSk7XHJcblx0fVxyXG5cdHNldFVuaWZvcm1CdWZmZXIobmFtZTogc3RyaW5nLCB1bmlmb3JtQnVmZmVyOiBVbmlmb3JtQnVmZmVyKSB7XHJcblx0XHRpZiAodGhpcy5fdW5pZm9ybXMuZ2V0KG5hbWUpKSByZXR1cm47XHJcblx0XHR1bmlmb3JtQnVmZmVyLmJpbmRpbmcgPSB0aGlzLmN1cnJlbnRCaW5kaW5nO1xyXG5cdFx0dGhpcy5zZXREZWZpbmUobmFtZS5jb25jYXQoXCJCaW5kaW5nXCIpLCB0aGlzLmN1cnJlbnRCaW5kaW5nKTtcclxuXHRcdHRoaXMuY3VycmVudEJpbmRpbmcgKz0gMTtcclxuXHRcdHRoaXMuX3VuaWZvcm1zLnNldChuYW1lLCB1bmlmb3JtQnVmZmVyKTtcclxuXHR9XHJcblx0c2V0VGV4dHVyZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBGdW5jdGlvbiB8IFRleHR1cmUsIGJpbmRpbmc/OiBudW1iZXIpIHtcclxuXHRcdGlmICh0aGlzLl91bmlmb3Jtcy5nZXQobmFtZSkpIHJldHVybjtcclxuXHRcdGNvbnN0IHVuaWZvcm0gPSBuZXcgVW5pZm9ybVRleHR1cmUobmFtZSwgdGhpcy5jdXJyZW50QmluZGluZywgdmFsdWUpO1xyXG5cdFx0dGhpcy5zZXREZWZpbmUobmFtZS5jb25jYXQoXCJCaW5kaW5nXCIpLCB0aGlzLmN1cnJlbnRCaW5kaW5nKTtcclxuXHRcdHRoaXMuY3VycmVudEJpbmRpbmcgKz0gMTtcclxuXHRcdHRoaXMuX3VuaWZvcm1zLnNldChuYW1lLCB1bmlmb3JtKTtcclxuXHR9XHJcblx0c2V0U2FtcGxlcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBGdW5jdGlvbiB8IFNhbXBsZXIsIGJpbmRpbmc/OiBudW1iZXIpIHtcclxuXHRcdGlmICh0aGlzLl91bmlmb3Jtcy5nZXQobmFtZSkpIHJldHVybjtcclxuXHRcdGNvbnN0IHVuaWZvcm0gPSBuZXcgVW5pZm9ybVNhbXBsZXIobmFtZSwgdGhpcy5jdXJyZW50QmluZGluZywgdmFsdWUpO1xyXG5cdFx0dGhpcy5zZXREZWZpbmUobmFtZS5jb25jYXQoXCJCaW5kaW5nXCIpLCB0aGlzLmN1cnJlbnRCaW5kaW5nKTtcclxuXHRcdHRoaXMuY3VycmVudEJpbmRpbmcgKz0gMTtcclxuXHRcdHRoaXMuX3VuaWZvcm1zLnNldChuYW1lLCB1bmlmb3JtKTtcclxuXHR9XHJcblx0c2V0RGVmaW5lKG5hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4gfCBudW1iZXIpIHtcclxuXHRcdGlmICh0aGlzLmRlZmluZXNbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aGlzLmRlZmluZURpcnR5ID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5kZWZpbmVzW25hbWVdID0gdmFsdWU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAodGhpcy5kZWZpbmVzW25hbWVdID09PSB2YWx1ZSkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmRlZmluZURpcnR5ID0gdHJ1ZTtcclxuXHRcdFx0XHR0aGlzLmRlZmluZXNbbmFtZV0gPSB2YWx1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXBsYWNlVW5pZm9ybUJ1ZmZlclZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0KSB7XHJcblx0XHR0aGlzLl91bmlmb3Jtcy5mb3JFYWNoKCh1bmlmb3JtKSA9PiB7XHJcblx0XHRcdGlmICh1bmlmb3JtPy5pc1VuaWZvcm1CdWZmZXIpIHtcclxuXHRcdFx0XHR1bmlmb3JtLnJlcGxhY2VVbmlmb3JtVmFsdWUobmFtZSwgdmFsdWUpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblx0YmluZChjb250ZXh0OiBDb250ZXh0LCBwYXNzRW5jb2RlcjogR1BVUmVuZGVyUGFzc0VuY29kZXIpIHtcclxuXHRcdHRoaXMudXBsb2FkVW5pZm9ybShjb250ZXh0KTtcclxuXHRcdGlmICghdGhpcy5ncm91cExheW91dClcclxuXHRcdFx0dGhpcy5ncm91cExheW91dCA9IHRoaXMuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGNvbnRleHQuZGV2aWNlLCB0aGlzLmxhYmVsLCB0aGlzLmxheW91dEluZGV4KTtcclxuXHRcdGlmICghdGhpcy5iaW5kR3JvdXApIHRoaXMuYmluZEdyb3VwID0gdGhpcy5jcmVhdGVCaW5kR3JvdXAoY29udGV4dC5kZXZpY2UsIHRoaXMubGFiZWwsIHRoaXMuZ3JvdXBJbmRleCk7XHJcblx0XHR0aGlzLmJpbmRHcm91cC5iaW5kKHBhc3NFbmNvZGVyKTtcclxuXHR9XHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXMuX3VuaWZvcm1zLmZvckVhY2goKHVuaWZvcm0pID0+IHtcclxuXHRcdFx0aWYgKHVuaWZvcm0uZGVzdHJveSkgdW5pZm9ybT8uZGVzdHJveSgpO1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmxhYmVsID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5jdXJyZW50QmluZGluZyA9IDE7XHJcblx0XHR0aGlzLmRlZmluZURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuZGVmaW5lcyA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX3VuaWZvcm1zLmNsZWFyKCk7XHJcblx0XHRCaW5kR3JvdXBMYXlvdXQucmVtb3ZlQmluZEdyb3VwTGF5b3V0RnJvbUNhY2hlKHRoaXMuZ3JvdXBMYXlvdXQpO1xyXG5cdFx0dGhpcy5iaW5kR3JvdXAgPSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cdHByaXZhdGUgY3JlYXRlQmluZEdyb3VwKGRldmljZTogR1BVRGV2aWNlLCBsYWJlbDogc3RyaW5nLCBncm91cEluZGV4PzogbnVtYmVyKSB7XHJcblx0XHRjb25zdCB7IGVudGl0aWVzLCBkeW5hbWljLCBhbGlnbmVkU2l6ZSwgbWF4T2Zmc2V0IH0gPSB0aGlzLmNyZWF0ZUJpbmRHcm91cEVudGl0eSgpO1xyXG5cdFx0Y29uc3QgYmluZEdyb3VwID0gbmV3IEJpbmRHcm91cCh7XHJcblx0XHRcdGxhYmVsOiBsYWJlbCxcclxuXHRcdFx0ZW50aXJlczogZW50aXRpZXMsXHJcblx0XHRcdGRldmljZTogZGV2aWNlLFxyXG5cdFx0XHRsYXlvdXQ6IHRoaXMuZ3JvdXBMYXlvdXQsXHJcblx0XHRcdGluZGV4OiBncm91cEluZGV4IHx8IDAsIC8vIOWQjue7reaUueaIkGdyb3VwSW5kZXhcclxuXHRcdFx0ZHluYW1pYyxcclxuXHRcdFx0YWxpZ25lZFNpemUsXHJcblx0XHRcdG1heE9mZnNldFxyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gYmluZEdyb3VwO1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZUJpbmRHcm91cExheW91dChkZXZpY2U6IEdQVURldmljZSwgbGFiZWw6IHN0cmluZywgbGF5b3V0SW5kZXg/OiBudW1iZXIpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuY3JlYXRlQmluZEdyb3VwTGF5b3V0RW50cnkoKTtcclxuXHRcdGNvbnN0IGdyb3VwTGF5b3V0ID0gQmluZEdyb3VwTGF5b3V0LmdldEJpbmRHcm91cExheW91dEZyb21DYWNoZShcclxuXHRcdFx0ZGV2aWNlLFxyXG5cdFx0XHRsYWJlbCArIFwiLVwiICsgcmVzdWx0LnVpZCxcclxuXHRcdFx0cmVzdWx0LmxheW91dHMsXHJcblx0XHRcdGxheW91dEluZGV4IHx8IDBcclxuXHRcdCk7XHJcblx0XHRyZXR1cm4gZ3JvdXBMYXlvdXQ7XHJcblx0fVxyXG5cdHByb3RlY3RlZCB1cGxvYWRVbmlmb3JtKGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdHRoaXMuX3VuaWZvcm1zLmZvckVhY2goKHVuaWZvcm0pID0+IHtcclxuXHRcdFx0dW5pZm9ybS5iaW5kKGNvbnRleHQpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgY3JlYXRlQmluZEdyb3VwTGF5b3V0RW50cnkoKSB7XHJcblx0XHRsZXQgdWlkID0gXCJcIjtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcclxuXHRcdHRoaXMuX3VuaWZvcm1zLmZvckVhY2goKHVuaWZvcm0pID0+IHtcclxuXHRcdFx0aWYgKCFyZXN1bHQuaGFzKHVuaWZvcm0ubmFtZSkpIHtcclxuXHRcdFx0XHR1aWQgPSB1aWQgPT09IFwiXCIgPyB1aWQuY29uY2F0KHVuaWZvcm0ubmFtZSkgOiB1aWQuY29uY2F0KFwiLCBcIikuY29uY2F0KHVuaWZvcm0ubmFtZSk7XHJcblx0XHRcdFx0cmVzdWx0LnNldCh1bmlmb3JtLm5hbWUsIHRoaXMuY3JlYXRlT25lTGF5b3V0RW50cnkodW5pZm9ybSkpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHVpZCA9IGB1bmlmb3Jtc1ske3VpZH1dYDtcclxuXHRcdHJldHVybiB7IHVpZCwgbGF5b3V0czogWy4uLnJlc3VsdC52YWx1ZXMoKV0gfTtcclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVhdGVCaW5kR3JvdXBFbnRpdHkoKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XHJcblx0XHRsZXQgZHluYW1pYyA9IGZhbHNlLFxyXG5cdFx0XHRhbGlnbmVkU2l6ZSA9IDAsXHJcblx0XHRcdG1heE9mZnNldCA9IDA7XHJcblx0XHR0aGlzLl91bmlmb3Jtcy5mb3JFYWNoKCh1bmlmb3JtKSA9PiB7XHJcblx0XHRcdGlmICghcmVzdWx0Lmhhcyh1bmlmb3JtLm5hbWUpKSB7XHJcblx0XHRcdFx0aWYgKHVuaWZvcm0/Lmhhc0R5bmFtaWNPZmZzZXQpIHtcclxuXHRcdFx0XHRcdGR5bmFtaWMgPSB0cnVlO1xyXG5cdFx0XHRcdFx0bWF4T2Zmc2V0ID0gdW5pZm9ybS5tYXhPZmZzZXQ7XHJcblx0XHRcdFx0XHRhbGlnbmVkU2l6ZSA9IE1hdGguY2VpbCh1bmlmb3JtLnVuaWZvcm1zU2l6ZSAvICg0ICogMjU2KSkgKiAyNTY7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJlc3VsdC5zZXQodW5pZm9ybS5uYW1lLCB0aGlzLmNyZWF5ZU9uZUdyb3VwRW50aXR5KHVuaWZvcm0pKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRlbnRpdGllczogWy4uLnJlc3VsdC52YWx1ZXMoKV0sXHJcblx0XHRcdGR5bmFtaWMsXHJcblx0XHRcdGFsaWduZWRTaXplLFxyXG5cdFx0XHRtYXhPZmZzZXRcclxuXHRcdH07XHJcblx0fVxyXG5cdHByaXZhdGUgY3JlYXRlT25lTGF5b3V0RW50cnkodW5pZm9ybSkge1xyXG5cdFx0bGV0IGxheW91dEVudGl0eTtcclxuXHRcdGlmICh1bmlmb3JtLmlzVW5pZm9ybUJ1ZmZlcikge1xyXG5cdFx0XHRsYXlvdXRFbnRpdHkgPSBuZXcgQmluZEdyb3VwTGF5b3V0RW50cnkoe1xyXG5cdFx0XHRcdGJpbmRpbmc6IHVuaWZvcm0uYmluZGluZyxcclxuXHRcdFx0XHRidWZmZXI6IHVuaWZvcm0ubGF5b3V0VHlwZSxcclxuXHRcdFx0XHR2aXNpYmlsaXR5OiB1bmlmb3JtLnZpc2liaWxpdHlcclxuXHRcdFx0fSk7XHJcblx0XHR9IGVsc2UgaWYgKHVuaWZvcm0uaXNUZXh0dXJlKSB7XHJcblx0XHRcdGxheW91dEVudGl0eSA9IG5ldyBCaW5kR3JvdXBMYXlvdXRFbnRyeSh7XHJcblx0XHRcdFx0YmluZGluZzogdW5pZm9ybS5iaW5kaW5nLFxyXG5cdFx0XHRcdHZpc2liaWxpdHk6IHVuaWZvcm0udmlzaWJpbGl0eSxcclxuXHRcdFx0XHR0ZXh0dXJlOiB1bmlmb3JtLmxheW91dFR5cGVcclxuXHRcdFx0fSk7XHJcblx0XHR9IGVsc2UgaWYgKHVuaWZvcm0uaXNTYW1wbGVyKSB7XHJcblx0XHRcdGxheW91dEVudGl0eSA9IG5ldyBCaW5kR3JvdXBMYXlvdXRFbnRyeSh7XHJcblx0XHRcdFx0YmluZGluZzogdW5pZm9ybS5iaW5kaW5nLFxyXG5cdFx0XHRcdHZpc2liaWxpdHk6IHVuaWZvcm0udmlzaWJpbGl0eSxcclxuXHRcdFx0XHRzYW1wbGVyOiB1bmlmb3JtLmxheW91dFR5cGVcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbGF5b3V0RW50aXR5O1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF5ZU9uZUdyb3VwRW50aXR5KHVuaWZvcm0pIHtcclxuXHRcdGxldCBncm91cEVudGl0eTtcclxuXHRcdGlmICh1bmlmb3JtLmlzVW5pZm9ybUJ1ZmZlcikge1xyXG5cdFx0XHRncm91cEVudGl0eSA9IG5ldyBCaW5kR3JvdXBFbnRpdHkoe1xyXG5cdFx0XHRcdGJpbmRpbmc6IHVuaWZvcm0uYmluZGluZyxcclxuXHRcdFx0XHRyZXNvdXJjZToge1xyXG5cdFx0XHRcdFx0YnVmZmVyOiB1bmlmb3JtLmJ1ZmZlci5ncHVCdWZmZXIsXHJcblx0XHRcdFx0XHRvZmZzZXQ6IHVuaWZvcm0ub2Zmc2V0LFxyXG5cdFx0XHRcdFx0c2l6ZTogdW5pZm9ybS5idWZmZXJTaXplXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0gZWxzZSBpZiAodW5pZm9ybS5pc1RleHR1cmUpIHtcclxuXHRcdFx0Z3JvdXBFbnRpdHkgPSBuZXcgQmluZEdyb3VwRW50aXR5KHtcclxuXHRcdFx0XHRiaW5kaW5nOiB1bmlmb3JtLmJpbmRpbmcsXHJcblx0XHRcdFx0cmVzb3VyY2U6IHVuaWZvcm0udGV4dHVyZS50ZXh0dXJlVmlld1xyXG5cdFx0XHR9KTtcclxuXHRcdH0gZWxzZSBpZiAodW5pZm9ybS5pc1NhbXBsZXIpIHtcclxuXHRcdFx0Z3JvdXBFbnRpdHkgPSBuZXcgQmluZEdyb3VwRW50aXR5KHtcclxuXHRcdFx0XHRiaW5kaW5nOiB1bmlmb3JtLmJpbmRpbmcsXHJcblx0XHRcdFx0cmVzb3VyY2U6IHVuaWZvcm0uc2FtcGxlci5ncHVTYW1wbGVyXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGdyb3VwRW50aXR5O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xyXG5pbXBvcnQgeyBDdWxsTW9kZSwgUHJpbWl0aXZlVG9wb2xvZ3kgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xyXG5pbXBvcnQgQ29sb3IgZnJvbSBcIi4uL21hdGgvQ29sb3JcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcclxuaW1wb3J0IHsgRGVwdGhTdGVuY2lsLCBSZW5kZXJTdGF0ZSwgVGFyZ2V0LCBQcmltaXRpdmUgfSBmcm9tIFwiLi4vcmVuZGVyL1JlbmRlclN0YXRlXCI7XHJcbmltcG9ydCBTYW1wbGVyIGZyb20gXCIuLi9yZW5kZXIvU2FtcGxlclwiO1xyXG5pbXBvcnQgU2hhZGVyRGF0YSBmcm9tIFwiLi4vcmVuZGVyL1NoYWRlckRhdGFcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcbmltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbCB7XHJcblx0cHVibGljIHNoYWRlckRhdGE6IFNoYWRlckRhdGE7XHJcblxyXG5cdGNvbG9yPzogQ29sb3I7XHJcblxyXG5cdGJhc2VTYW1wbGVyPzogU2FtcGxlcjtcclxuXHJcblx0YmFzZVRleHR1cmU/OiBUZXh0dXJlO1xyXG5cclxuXHR0eXBlOiBzdHJpbmc7XHJcblxyXG5cdGxhYmVsOiBzdHJpbmc7XHJcblxyXG5cdHNoYWRlclNvdXJjZTogU2hhZGVyU291cmNlO1xyXG5cclxuXHR0cmFuc3BhcmVudDogYm9vbGVhbjtcclxuXHJcblx0ZGlydHk6IGJvb2xlYW47XHJcblxyXG5cdGxpZ2h0OiBib29sZWFuO1xyXG5cclxuXHRyZWFkeTogYm9vbGVhbjtcclxuXHJcblx0cHJpdmF0ZSBfZW1pc3NpdmU6IENvbG9yO1xyXG5cclxuXHRwcml2YXRlIF9vcGFjaXR5OiBudW1iZXI7XHJcblxyXG5cdHByaXZhdGUgX2VtaXNzaXZlSW50ZW5zaXR5OiBudW1iZXI7XHJcblxyXG5cdHByaXZhdGUgX2RpZmZ1c2U6IENvbG9yO1xyXG5cclxuXHRwcml2YXRlIF9yZW5kZXJTdGF0ZTogUmVuZGVyU3RhdGU7XHJcblxyXG5cdHByaXZhdGUgX2RvdWJsZVNpZGVkOiBib29sZWFuO1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHRoaXMubGFiZWwgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLnR5cGUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLmJhc2VUZXh0dXJlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5iYXNlU2FtcGxlciA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX2RpZmZ1c2UgPSBuZXcgQ29sb3IoMC4wLCAwLjAsIDAuMCk7XHJcblx0XHR0aGlzLl9vcGFjaXR5ID0gMS4wO1xyXG5cdFx0Ly8gQnVmZmVyXHJcblx0XHR0aGlzLnNoYWRlckRhdGEgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLnNoYWRlclNvdXJjZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fZW1pc3NpdmUgPSBuZXcgQ29sb3IoMC4wLCAwLjAsIDApO1xyXG5cdFx0dGhpcy5fZW1pc3NpdmVJbnRlbnNpdHkgPSAxLjA7XHJcblx0XHR0aGlzLl9kb3VibGVTaWRlZCA9IHRydWU7XHJcblx0XHR0aGlzLmxpZ2h0ID0gZmFsc2U7XHJcblx0XHR0aGlzLnJlYWR5ID0gZmFsc2U7XHJcblx0XHR0aGlzLmluaXQoKTtcclxuXHR9XHJcblx0cHVibGljIHNldCB3aXJlZnJhbWUodmFsdWU6IGJvb2xlYW4pIHtcclxuXHRcdHRoaXMucmVuZGVyU3RhdGUucHJpbWl0aXZlLnRvcG9sb2d5ID0gdmFsdWUgPyBQcmltaXRpdmVUb3BvbG9neS5MaW5lTGlzdCA6IFByaW1pdGl2ZVRvcG9sb2d5LlRyaWFuZ2xlTGlzdDtcclxuXHR9XHJcblx0cHVibGljIGdldCBkb3VibGVTaWRlZCgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9kb3VibGVTaWRlZDtcclxuXHR9XHJcblx0cHVibGljIHNldCBkb3VibGVTaWRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG5cdFx0dGhpcy5fcmVuZGVyU3RhdGUucHJpbWl0aXZlLmN1bGxNb2RlID0gdmFsdWUgPyBDdWxsTW9kZS5Ob25lIDogQ3VsbE1vZGUuQmFjaztcclxuXHRcdHRoaXMuX2RvdWJsZVNpZGVkID0gdmFsdWU7XHJcblx0fVxyXG5cdHB1YmxpYyBnZXQgcmVuZGVyU3RhdGUoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fcmVuZGVyU3RhdGU7XHJcblx0fVxyXG5cdHB1YmxpYyBzZXQgcmVuZGVyU3RhdGUodmFsdWU6IFJlbmRlclN0YXRlKSB7XHJcblx0XHR0aGlzLl9yZW5kZXJTdGF0ZSA9IHZhbHVlO1xyXG5cdH1cclxuXHRwdWJsaWMgZ2V0IGRpZmZ1c2UoKTogQ29sb3Ige1xyXG5cdFx0cmV0dXJuIHRoaXMuX2RpZmZ1c2U7XHJcblx0fVxyXG5cdHB1YmxpYyBzZXQgZGlmZnVzZSh2OiBDb2xvcikge1xyXG5cdFx0dGhpcy5fZGlmZnVzZSA9IHY7XHJcblx0fVxyXG5cdHB1YmxpYyBnZXQgZW1pc3NpdmUoKTogQ29sb3Ige1xyXG5cdFx0cmV0dXJuIHRoaXMuX2VtaXNzaXZlO1xyXG5cdH1cclxuXHRwdWJsaWMgc2V0IGVtaXNzaXZlKHY6IENvbG9yKSB7XHJcblx0XHR0aGlzLl9lbWlzc2l2ZSA9IHY7XHJcblx0fVxyXG5cdHB1YmxpYyBnZXQgZW1pc3NpdmVJbnRlbnNpdHkoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzLl9lbWlzc2l2ZUludGVuc2l0eTtcclxuXHR9XHJcblx0cHVibGljIHNldCBlbWlzc2l2ZUludGVuc2l0eSh2OiBudW1iZXIpIHtcclxuXHRcdHRoaXMuX2VtaXNzaXZlSW50ZW5zaXR5ID0gdjtcclxuXHR9XHJcblx0cHVibGljIGdldCBvcGFjaXR5KCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5fb3BhY2l0eTtcclxuXHR9XHJcblx0cHVibGljIHNldCBvcGFjaXR5KHY6IG51bWJlcikge1xyXG5cdFx0dGhpcy5fb3BhY2l0eSA9IHY7XHJcblx0fVxyXG5cdG9uQmVmb3JlUmVuZGVyKCkge31cclxuXHJcblx0b25CZWZvcmVDb21waWxlKCkge31cclxuXHRjbG9uZSgpOiBNYXRlcmlhbCB7XHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblx0dXBkYXRlKGZyYW1lU3RhdGU/OiBGcmFtZVN0YXRlLCBtZXNoPzogTWVzaCkge31cclxuXHRwcm90ZWN0ZWQgY3JlYXRlU2hhZGVyRGF0YShtZXNoOiBNZXNoLCBmcmFtZVN0YXRlPzogRnJhbWVTdGF0ZSkge1xyXG5cdFx0aWYgKHRoaXMuc2hhZGVyRGF0YSkgdGhpcy5zaGFkZXJEYXRhLmRlc3Ryb3koKTtcclxuXHRcdHRoaXMuc2hhZGVyRGF0YSA9IG5ldyBTaGFkZXJEYXRhKHRoaXMudHlwZSwgMCk7XHJcblx0XHR0aGlzLnJlYWR5ID0gdHJ1ZTtcclxuXHR9XHJcblx0cHJpdmF0ZSBpbml0KCkge1xyXG5cdFx0Ly8g6buY6K6k5riy5p+T54q25oCBXHJcblx0XHRjb25zdCBwcmltaXRpdmUgPSBuZXcgUHJpbWl0aXZlKCk7XHJcblx0XHRjb25zdCB0YXJnZXQgPSBuZXcgVGFyZ2V0KCk7XHJcblx0XHRjb25zdCBkZXB0aFN0ZW5jaWwgPSBuZXcgRGVwdGhTdGVuY2lsKCk7XHJcblx0XHR0aGlzLl9yZW5kZXJTdGF0ZSA9IG5ldyBSZW5kZXJTdGF0ZSgpO1xyXG5cdFx0dGhpcy5fcmVuZGVyU3RhdGUucHJpbWl0aXZlID0gcHJpbWl0aXZlO1xyXG5cdFx0dGhpcy5fcmVuZGVyU3RhdGUudGFyZ2V0cyA9IFt0YXJnZXRdO1xyXG5cdFx0dGhpcy5fcmVuZGVyU3RhdGUuZGVwdGhTdGVuY2lsID0gZGVwdGhTdGVuY2lsO1xyXG5cdH1cclxuXHRwdWJsaWMgZGVzdHJveSgpIHtcclxuXHRcdHRoaXMubGFiZWwgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLnR5cGUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLmJhc2VUZXh0dXJlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5iYXNlU2FtcGxlciA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuY29sb3IgPSB1bmRlZmluZWQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XHJcbmltcG9ydCB7IEJ1ZmZlckJpbmRpbmdUeXBlLCBCdWZmZXJVc2FnZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCB7IFNoYWRlck1hdGVyaWFsUGFybXMsIFVuaWZvcm1zIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcclxuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XHJcbmltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XHJcbmltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xyXG5pbXBvcnQgeyBhZGRVbmlmb3JtVG9TaGFkZXJEYXRhLCBjaGVja0NvbnRhaW5GbG9hdFR5cGUgfSBmcm9tIFwiLi4vdXRpbHMvdW5pZm9ybVV0aWxzXCI7XHJcbmltcG9ydCB7IE1hdGVyaWFsIH0gZnJvbSBcIi4vTWF0ZXJpYWxcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYWRlck1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xyXG5cdHVuaWZvcm1zOiBVbmlmb3JtcztcclxuXHR1bmlmb3JtQnVmZmVyOiBVbmlmb3JtQnVmZmVyO1xyXG5cdHByaXZhdGUgc2hhZGVyTWF0ZXJpYWxQYXJtczogU2hhZGVyTWF0ZXJpYWxQYXJtcztcclxuXHRjb25zdHJ1Y3RvcihvcHRpb25zOiBTaGFkZXJNYXRlcmlhbFBhcm1zKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0Y29uc3QgeyB0eXBlLCBmcmFnLCB2ZXJ0LCBkZWZpbmVzLCBsaWdodCB9ID0gb3B0aW9ucztcclxuXHRcdHRoaXMudHlwZSA9IHR5cGU7XHJcblx0XHR0aGlzLnNoYWRlck1hdGVyaWFsUGFybXMgPSBvcHRpb25zO1xyXG5cdFx0dGhpcy5zaGFkZXJTb3VyY2UgPSBuZXcgU2hhZGVyU291cmNlKHtcclxuXHRcdFx0dHlwZSxcclxuXHRcdFx0ZnJhZyxcclxuXHRcdFx0dmVydCxcclxuXHRcdFx0Y3VzdG9tOiB0cnVlLFxyXG5cdFx0XHRkZWZpbmVzOiBkZWZhdWx0VmFsdWUoZGVmaW5lcywge30pLFxyXG5cdFx0XHRyZW5kZXI6IHRydWVcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy51bmlmb3JtcyA9IG9wdGlvbnMudW5pZm9ybXM7XHJcblx0XHR0aGlzLnVuaWZvcm1CdWZmZXIgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLmxpZ2h0ID0gbGlnaHQgfHwgZmFsc2U7XHJcblx0fVxyXG5cdHVwZGF0ZShmcmFtZVN0YXRlPzogRnJhbWVTdGF0ZSwgbWVzaD86IE1lc2gpIHtcclxuXHRcdGlmICghdGhpcy5zaGFkZXJEYXRhIHx8IHRoaXMuZGlydHkpIHRoaXMuY3JlYXRlU2hhZGVyRGF0YShtZXNoKTtcclxuXHR9XHJcblx0Y2xvbmUoKSB7XHJcblx0XHRyZXR1cm4gbmV3IFNoYWRlck1hdGVyaWFsKHRoaXMuc2hhZGVyTWF0ZXJpYWxQYXJtcyk7XHJcblx0fVxyXG5cdHByb3RlY3RlZCBjcmVhdGVTaGFkZXJEYXRhKG1lc2g/OiBNZXNoKSB7XHJcblx0XHRzdXBlci5jcmVhdGVTaGFkZXJEYXRhKG1lc2gpO1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gY2hlY2tDb250YWluRmxvYXRUeXBlKHRoaXMudW5pZm9ybXMpO1xyXG5cdFx0aWYgKHJlc3VsdC5oYXNGbG9hdCkge1xyXG5cdFx0XHR0aGlzLnVuaWZvcm1CdWZmZXIgPSByZXN1bHQuaGFzQXJyYXl0eXBlXHJcblx0XHRcdFx0PyBuZXcgVW5pZm9ybUJ1ZmZlcih7XHJcblx0XHRcdFx0XHRcdGxhYmVsOiB0aGlzLnR5cGUgKyBcIlVuaWZvcm1CdWZmZXJcIixcclxuXHRcdFx0XHRcdFx0dHlwZTogQnVmZmVyQmluZGluZ1R5cGUuUmVhZE9ubHlTdG9yYWdlLFxyXG5cdFx0XHRcdFx0XHR1c2FnZTogQnVmZmVyVXNhZ2UuU3RvcmFnZSB8IEJ1ZmZlclVzYWdlLkNvcHlEc3RcclxuXHRcdFx0XHQgIH0pXHJcblx0XHRcdFx0OiBuZXcgVW5pZm9ybUJ1ZmZlcih7IGxhYmVsOiB0aGlzLnR5cGUgKyBcIlVuaWZvcm1CdWZmZXJcIiB9KTtcclxuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFVuaWZvcm1CdWZmZXIodGhpcy50eXBlLCB0aGlzLnVuaWZvcm1CdWZmZXIpO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgdW5pZm9ybXNOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMudW5pZm9ybXMpO1xyXG5cdFx0dW5pZm9ybXNOYW1lcy5tYXAoKHVuaWZvcm1zTmFtZSkgPT4ge1xyXG5cdFx0XHRhZGRVbmlmb3JtVG9TaGFkZXJEYXRhKFxyXG5cdFx0XHRcdHVuaWZvcm1zTmFtZSxcclxuXHRcdFx0XHR0aGlzLnVuaWZvcm1zW3VuaWZvcm1zTmFtZV0sXHJcblx0XHRcdFx0dGhpcy51bmlmb3JtcyxcclxuXHRcdFx0XHR0aGlzLnNoYWRlckRhdGEsXHJcblx0XHRcdFx0dGhpcy51bmlmb3JtQnVmZmVyXHJcblx0XHRcdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuIiwiZnVuY3Rpb24gY3JlYXRlR3VpZCgpIHtcclxuICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWluLWphdmFzY3JpcHRcclxuICByZXR1cm4gXCJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHhcIi5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICBjb25zdCByID0gKE1hdGgucmFuZG9tKCkgKiAxNikgfCAwO1xyXG4gICAgY29uc3QgdiA9IGMgPT09IFwieFwiID8gciA6IChyICYgMHgzKSB8IDB4ODtcclxuICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICB9KTtcclxufVxyXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVHdWlkO1xyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XG5pbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xuaW1wb3J0IExpZ2h0TWFuZ2VyIGZyb20gXCIuLi9jb3JlL0xpZ2h0TWFuZ2VyXCI7XG5pbXBvcnQgUmVuZGVyT2JqZWN0IGZyb20gXCIuLi9jb3JlL1JlbmRlck9iamVjdFwiO1xuaW1wb3J0IHsgQ29tbWFuZFN1YlR5cGUsIEludGVyc2VjdCB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XG5pbXBvcnQgeyBSZW5kZXJPYmplY3RUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcbmltcG9ydCBHZW9tZXRyeSBmcm9tIFwiLi4vZ2VvbWV0cnkvR2VvbWV0cnlcIjtcbmltcG9ydCB7IE1hdGVyaWFsIH0gZnJvbSBcIi4uL21hdGVyaWFsL01hdGVyaWFsXCI7XG5pbXBvcnQgRHJhd0NvbW1hbmQgZnJvbSBcIi4uL3JlbmRlci9EcmF3Q29tbWFuZFwiO1xuaW1wb3J0IGNyZWF0ZUd1aWQgZnJvbSBcIi4uL3V0aWxzL2NyZWF0ZUd1aWRcIjtcbmV4cG9ydCBjbGFzcyBNZXNoIGV4dGVuZHMgUmVuZGVyT2JqZWN0IHtcblx0W3g6IHN0cmluZ106IGFueTtcblx0dWlkOiBzdHJpbmc7XG5cdGdlb21ldHJ5PzogR2VvbWV0cnk7XG5cdG1hdGVyaWFsPzogTWF0ZXJpYWw7XG5cdGluc3RhbmNlQ291bnQ/OiBudW1iZXI7XG5cdHByaW9yaXR5PzogbnVtYmVyO1xuXHRkcmF3Q29tbWFuZD86IERyYXdDb21tYW5kO1xuXHRzdWJDb21tYW5kczogeyBbcHJvcDogc3RyaW5nXTogRHJhd0NvbW1hbmQgfTtcblx0ZGlzdGFuY2VUb0NhbWVyYT86IG51bWJlcjtcblx0Y29uc3RydWN0b3IoZ2VvbWV0cnk/OiBHZW9tZXRyeSwgbWF0ZXJpYWw/OiBNYXRlcmlhbCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5nZW9tZXRyeSA9IGdlb21ldHJ5O1xuXHRcdHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbDtcblx0XHR0aGlzLnR5cGUgPSBSZW5kZXJPYmplY3RUeXBlLk1lc2g7XG5cdFx0dGhpcy51aWQgPSBjcmVhdGVHdWlkKCk7XG5cdFx0dGhpcy5zdWJDb21tYW5kcyA9IHt9O1xuXHR9XG5cdGdldCByZWFkeSgpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXRlcmlhbC5yZWFkeTtcblx0fVxuXHR1cGRhdGUoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSwgY2FtZXJhPzogQ2FtZXJhKSB7XG5cdFx0Ly8gdXBkYXRlIG1hdHJpeFxuXHRcdHRoaXMudXBkYXRlTWF0cml4KHRoaXM/LnBhcmVudD8ubW9kZWxNYXRyaXgpO1xuXHRcdC8vIGNyZWF0ZVxuXHRcdHRoaXMuZ2VvbWV0cnkudXBkYXRlKGZyYW1lU3RhdGUpO1xuXHRcdHRoaXMubWF0ZXJpYWwudXBkYXRlKGZyYW1lU3RhdGUsIHRoaXMpO1xuXHRcdC8vIHVwZGF0ZSBib3VuZGluZ1NwaGVyZVxuXHRcdHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUudXBkYXRlKHRoaXMubW9kZWxNYXRyaXgpO1xuXHRcdHRoaXMubWF0ZXJpYWwuc2hhZGVyU291cmNlLnNldERlZmluZXMoZnJhbWVTdGF0ZS5kZWZpbmVzKTtcblx0XHRpZiAodGhpcy50eXBlID09IFJlbmRlck9iamVjdFR5cGUuRGVidWcpIHtcblx0XHRcdGZyYW1lU3RhdGUucmVuZGVyUXVldWUuZGVidWdRdWV1ZS5wdXNoKHRoaXMpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmRpc3RhbmNlVG9DYW1lcmEgPSB0aGlzLmdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlLmRpc3RhbmNlVG9DYW1lcmEoY2FtZXJhKTtcblxuXHRcdGNvbnN0IHZpc2liaWxpdHkgPSBmcmFtZVN0YXRlLmN1bGxpbmdWb2x1bWUuY29tcHV0ZVZpc2liaWxpdHkodGhpcy5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSk7XG5cdFx0Ly8g6KeG6ZSl5YmU6ZmkXG5cdFx0aWYgKHZpc2liaWxpdHkgPT09IEludGVyc2VjdC5PVVRTSURFKSByZXR1cm47XG5cdFx0aWYgKHRoaXMubWF0ZXJpYWwudHJhbnNwYXJlbnQpIHtcblx0XHRcdGZyYW1lU3RhdGUucmVuZGVyUXVldWUudHJhbnNwYXJlbnQucHVzaCh0aGlzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZnJhbWVTdGF0ZS5yZW5kZXJRdWV1ZS5vcGFxdWUucHVzaCh0aGlzKTtcblx0XHR9XG5cdH1cblx0YmVmb3JlUmVuZGVyKCkge31cblx0YWZ0ZXJSZW5kZXIoKSB7fVxuXHRwdWJsaWMgZ2V0RHJhd0NvbW1hbmQob3ZlcnJpZGVNYXRlcmlhbD86IE1hdGVyaWFsLCBjb21tYW5kU3ViVHlwZT86IENvbW1hbmRTdWJUeXBlLCBsaWdodE1hbmdlcj86IExpZ2h0TWFuZ2VyKSB7XG5cdFx0aWYgKCF0aGlzLmRyYXdDb21tYW5kIHx8IHRoaXMubWF0ZXJpYWwuZGlydHkpIHtcblx0XHRcdHRoaXMubWF0ZXJpYWwuc2hhZGVyU291cmNlLnNldERlZmluZXMoXG5cdFx0XHRcdE9iamVjdC5hc3NpZ24odGhpcy5tYXRlcmlhbC5zaGFkZXJEYXRhLmRlZmluZXMsIHRoaXMuZ2VvbWV0cnkuZGVmaW5lcylcblx0XHRcdCk7XG5cdFx0XHRpZiAodGhpcy5tYXRlcmlhbC5kaXJ0eSkgdGhpcy5tYXRlcmlhbC5kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5kcmF3Q29tbWFuZCA9IG5ldyBEcmF3Q29tbWFuZCh7XG5cdFx0XHRcdHZlcnRleEJ1ZmZlcjogdGhpcy5nZW9tZXRyeS52ZXJ0QnVmZmVyLFxuXHRcdFx0XHRpbmRleEJ1ZmZlcjogdGhpcy5nZW9tZXRyeS5pbmRleEJ1ZmZlcixcblx0XHRcdFx0c2hhZGVyRGF0YTogdGhpcy5tYXRlcmlhbC5zaGFkZXJEYXRhLFxuXHRcdFx0XHRpbnN0YW5jZXM6IHRoaXMuaW5zdGFuY2VDb3VudCxcblx0XHRcdFx0Y291bnQ6IHRoaXMuZ2VvbWV0cnkuY291bnQsXG5cdFx0XHRcdHJlbmRlclN0YXRlOiB0aGlzLm1hdGVyaWFsLnJlbmRlclN0YXRlLFxuXHRcdFx0XHRzaGFkZXJTb3VyY2U6IHRoaXMubWF0ZXJpYWwuc2hhZGVyU291cmNlLFxuXHRcdFx0XHR0eXBlOiBcInJlbmRlclwiLFxuXHRcdFx0XHRsaWdodDogdGhpcy5tYXRlcmlhbC5saWdodCxcblx0XHRcdFx0bW9kZWxNYXRyaXg6IHRoaXMubW9kZWxNYXRyaXgsXG5cdFx0XHRcdGxpZ2h0U2hhZGVyRGF0YTogdGhpcy5tYXRlcmlhbC5saWdodCA/IGxpZ2h0TWFuZ2VyPy5saWdodFNoYWRlckRhdGEgOiB1bmRlZmluZWRcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAob3ZlcnJpZGVNYXRlcmlhbCkge1xuXHRcdFx0aWYgKCF0aGlzLnN1YkNvbW1hbmRzW2NvbW1hbmRTdWJUeXBlXSkge1xuXHRcdFx0XHRjb25zdCBjb3B5TWF0ID0gb3ZlcnJpZGVNYXRlcmlhbC5jbG9uZSgpO1xuXHRcdFx0XHRvdmVycmlkZU1hdGVyaWFsLnVwZGF0ZSgpO1xuXHRcdFx0XHRjb3B5TWF0LnVwZGF0ZSgpO1xuXHRcdFx0XHRpZiAoY29weU1hdC5kaXJ0eSkgY29weU1hdC5kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0XHR0aGlzLnN1YkNvbW1hbmRzW2NvbW1hbmRTdWJUeXBlXSA9IHRoaXMuZHJhd0NvbW1hbmQuc2hhbGxvd0Nsb25lKGNvcHlNYXQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuc3ViQ29tbWFuZHNbY29tbWFuZFN1YlR5cGVdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5kcmF3Q29tbWFuZDtcblx0fVxuXHRkZXN0cm95KCkge1xuXHRcdHRoaXMuZ2VvbWV0cnkuZGVzdHJveSgpO1xuXHRcdHRoaXMubWF0ZXJpYWwuZGVzdHJveSgpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBSZW5kZXJPYmplY3RUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuLi9nZW9tZXRyeS9HZW9tZXRyeVwiO1xyXG5pbXBvcnQgUGxhbmVHZW9tZXRyeSBmcm9tIFwiLi4vZ2VvbWV0cnkvUGxhbmVHZW9tZXRyeVwiO1xyXG5pbXBvcnQgeyBMaWdodCB9IGZyb20gXCIuLi9saWdodC9MaWdodFwiO1xyXG5pbXBvcnQgU2hhZGVyTWF0ZXJpYWwgZnJvbSBcIi4uL21hdGVyaWFsL1NoYWRlck1hdGVyaWFsXCI7XHJcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi4vbWVzaC9NZXNoXCI7XHJcbmltcG9ydCB7IFZpZXdQb3J0IH0gZnJvbSBcIi4uL3JlbmRlci9SZW5kZXJTdGF0ZVwiO1xyXG5pbXBvcnQgU2FtcGxlciBmcm9tIFwiLi4vcmVuZGVyL1NhbXBsZXJcIjtcclxuaW1wb3J0IHsgU2NlbmUgfSBmcm9tIFwiLi4vU2NlbmVcIjtcclxuaW1wb3J0IGdldFZlcnRGcmFnIGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNoYWRvd01hcERlYnVnZ2VyIHtcclxuXHRwcml2YXRlIG1lc2g6IE1lc2g7XHJcblx0cHJpdmF0ZSBkZWJ1Z2dlclNpemU6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfTtcclxuXHRwdWJsaWMgbGlnaHQ6IExpZ2h0O1xyXG5cdHByaXZhdGUgZ2VvbWV0cnk6IEdlb21ldHJ5O1xyXG5cdHByaXZhdGUgbWF0ZXJpYWw6IFNoYWRlck1hdGVyaWFsO1xyXG5cdHByaXZhdGUgc2NlbmU6IFNjZW5lO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihsaWdodDogTGlnaHQsIHNjZW5lOiBTY2VuZSkge1xyXG5cdFx0aWYgKCFsaWdodCB8fCAhKGxpZ2h0IGluc3RhbmNlb2YgTGlnaHQpKSB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyIG11c3QgYmUgTGlnaHQgaW5zdGFuY2VcIik7XHJcblxyXG5cdFx0dGhpcy5saWdodCA9IGxpZ2h0O1xyXG5cdFx0dGhpcy5zY2VuZSA9IHNjZW5lO1xyXG5cdFx0dGhpcy5kZWJ1Z2dlclNpemUgPSB7XHJcblx0XHRcdHdpZHRoOiAyNTYsXHJcblx0XHRcdGhlaWdodDogMjU2XHJcblx0XHR9O1xyXG5cclxuXHRcdHRoaXMubWVzaCA9IHRoaXMuX2NyZWF0ZVNoYWRvd01hcE1lc2goKTtcclxuXHRcdGNvbnN0IHNoYWRvd01hcCA9IHRoaXMubGlnaHQuc2hhZG93LmdldFNoYWRvd01hcFRleHR1cmUoKTtcclxuXHRcdHRoaXMubWF0ZXJpYWwudW5pZm9ybXMudGV4dHVyZS52YWx1ZSA9IHNoYWRvd01hcDtcclxuXHRcdHRoaXMubWVzaC50eXBlID0gUmVuZGVyT2JqZWN0VHlwZS5EZWJ1ZztcclxuXHRcdHRoaXMuc2NlbmUuYWRkKHRoaXMubWVzaCk7XHJcblx0fVxyXG5cclxuXHRfY3JlYXRlU2hhZG93TWFwTWVzaCgpIHtcclxuXHRcdGNvbnN0IHNoYWRlciA9IGdldFZlcnRGcmFnKFwic2hhZG93TWFwRGVidWdnZXJcIiwge1xyXG5cdFx0XHRwb3NpdGlvbkxvY2F0aW9uOiAwXHJcblx0XHR9KTtcclxuXHRcdHRoaXMuZ2VvbWV0cnkgPSBuZXcgUGxhbmVHZW9tZXRyeSgyLCAyKTtcclxuXHRcdHRoaXMubWF0ZXJpYWwgPSBuZXcgU2hhZGVyTWF0ZXJpYWwoe1xyXG5cdFx0XHR0eXBlOiBcInNoYWRvd01hcERlYnVnZ2VyXCIsXHJcblx0XHRcdGZyYWc6IHNoYWRlci5mcmFnLFxyXG5cdFx0XHR2ZXJ0OiBzaGFkZXIudmVydCxcclxuXHRcdFx0dW5pZm9ybXM6IHtcclxuXHRcdFx0XHR0ZXh0dXJlOiB7XHJcblx0XHRcdFx0XHR0eXBlOiBcInRleHR1cmVcIixcclxuXHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWRcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHNhbXBsZXI6IHtcclxuXHRcdFx0XHRcdHR5cGU6IFwic2FtcGxlclwiLFxyXG5cdFx0XHRcdFx0dmFsdWU6IG5ldyBTYW1wbGVyKHtcclxuXHRcdFx0XHRcdFx0bWFnRmlsdGVyOiBcImxpbmVhclwiLFxyXG5cdFx0XHRcdFx0XHRtaW5GaWx0ZXI6IFwibGluZWFyXCJcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMubWF0ZXJpYWwucmVuZGVyU3RhdGUudmlld3BvcnQgPSBuZXcgVmlld1BvcnQoMCwgMCwgdGhpcy5kZWJ1Z2dlclNpemUud2lkdGgsIHRoaXMuZGVidWdnZXJTaXplLmhlaWdodCk7XHJcblx0XHRyZXR1cm4gbmV3IE1lc2godGhpcy5nZW9tZXRyeSwgdGhpcy5tYXRlcmlhbCk7XHJcblx0fVxyXG5cclxuXHRzZXRTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XHJcblx0XHRpZiAoIXdpZHRoIHx8ICFoZWlnaHQpIHJldHVybjtcclxuXHRcdHRoaXMuZGVidWdnZXJTaXplLndpZHRoID0gd2lkdGg7XHJcblx0XHR0aGlzLmRlYnVnZ2VyU2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XHJcblx0XHR0aGlzLnVwZGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlKCkge1xyXG5cdFx0dGhpcy5tYXRlcmlhbC5yZW5kZXJTdGF0ZS52aWV3cG9ydCA9IG5ldyBWaWV3UG9ydCgwLCAwLCB0aGlzLmRlYnVnZ2VyU2l6ZS53aWR0aCwgdGhpcy5kZWJ1Z2dlclNpemUuaGVpZ2h0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0ZyYW1lU3RhdGVcIjtcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi4vbWVzaC9NZXNoXCI7XG5pbXBvcnQgVW5pZm9ybUJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1CdWZmZXJcIjtcbmltcG9ydCB7IFVuaWZvcm1FbnVtIH0gZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3Jtc1wiO1xuaW1wb3J0IHsgU2hhZGVyU291cmNlIH0gZnJvbSBcIi4uL3NoYWRlci9TaGFkZXJTb3VyY2VcIjtcbmltcG9ydCB7IE1hdGVyaWFsIH0gZnJvbSBcIi4vTWF0ZXJpYWxcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbG9yTWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gXCJjb2xvclwiO1xuXHRcdHRoaXMuc2hhZGVyU291cmNlID0gbmV3IFNoYWRlclNvdXJjZSh7XG5cdFx0XHR0eXBlOiB0aGlzLnR5cGUsXG5cdFx0XHRyZW5kZXI6IHRydWUsXG5cdFx0XHRkZWZpbmVzOiB7fVxuXHRcdH0pO1xuXHR9XG5cdHVwZGF0ZShmcmFtZVN0YXRlOiBGcmFtZVN0YXRlLCBtZXNoOiBNZXNoKSB7XG5cdFx0aWYgKCF0aGlzLnNoYWRlckRhdGEgfHwgdGhpcy5kaXJ0eSkgdGhpcy5jcmVhdGVTaGFkZXJEYXRhKG1lc2gpO1xuXHRcdGNvbnN0IHVuaWZvcm1CdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7IGxhYmVsOiBcImNvbG9yXCIgfSk7XG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxuXHRcdFx0XCJtb2RlbE1hdHJpeFwiLFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH0sXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0XG5cdFx0KTtcblx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcihcImNvbG9yXCIsIHVuaWZvcm1CdWZmZXIpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xyXG5pbXBvcnQgeyBSZW5kZXJPYmplY3RUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuLi9nZW9tZXRyeS9HZW9tZXRyeVwiO1xyXG5pbXBvcnQgQ29sb3JNYXRlcmlhbCBmcm9tIFwiLi4vbWF0ZXJpYWwvQ29sb3JNYXRlcmlhbFwiO1xyXG5pbXBvcnQgeyBGbG9hdDMyQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuL01lc2hcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXhlcyBleHRlbmRzIE1lc2gge1xyXG5cdG1hdGVyaWFsOiBDb2xvck1hdGVyaWFsO1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHRcdHRoaXMudHlwZSA9IFJlbmRlck9iamVjdFR5cGUuQXhlcztcclxuXHRcdHRoaXMuZGlzdGFuY2VUb0NhbWVyYSA9IDEwO1xyXG5cdFx0dGhpcy5tYXRlcmlhbCA9IG5ldyBDb2xvck1hdGVyaWFsKCk7XHJcblx0XHR0aGlzLm1hdGVyaWFsLndpcmVmcmFtZSA9IHRydWU7XHJcblx0XHR0aGlzLmluaXQoKTtcclxuXHR9XHJcblx0dXBkYXRlKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUpIHtcclxuXHRcdHRoaXMudXBkYXRlTWF0cml4KCk7XHJcblx0XHR0aGlzLm1hdGVyaWFsLnVwZGF0ZShmcmFtZVN0YXRlLCB0aGlzKTtcclxuXHRcdGZyYW1lU3RhdGUucmVuZGVyUXVldWUub3BhcXVlLnB1c2godGhpcyk7XHJcblx0fVxyXG5cdHByaXZhdGUgaW5pdCgpIHtcclxuXHRcdGNvbnN0IHBvc2l0aW9uID0gWzAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDFdO1xyXG5cdFx0Y29uc3QgY29sb3JzID0gWzEsIDAsIDAsIDEsIDEsIDAuNSwgMC41LCAxLCAwLCAxLCAwLCAxLCAwLjUsIDEsIDAuNSwgMSwgMCwgMCwgMSwgMSwgMC41LCAwLjUsIDEsIDFdO1xyXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFswLCAxLCAyLCAzLCA0LCA1XTtcclxuXHRcdHRoaXMuZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe30pO1xyXG5cdFx0dGhpcy5nZW9tZXRyeS5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJwb3NpdGlvblwiLCBwb3NpdGlvbiwgMykpO1xyXG5cdFx0dGhpcy5nZW9tZXRyeS5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJjb2xvclwiLCBjb2xvcnMsIDQpKTtcclxuXHRcdHRoaXMuZ2VvbWV0cnkuc2V0SW5kaWNlKGluZGljZXMpO1xyXG5cdFx0dGhpcy5nZW9tZXRyeS5jb3VudCA9IGluZGljZXMubGVuZ3RoO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBGbG9hdDMyQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuL0dlb21ldHJ5XCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNreUJveEdlb21ldHJ5IGV4dGVuZHMgR2VvbWV0cnkge1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoe1xyXG5cdFx0XHR0eXBlOiBcInNreUJveEdlb21ldHJ5XCJcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5pbml0KCk7XHJcblx0fVxyXG5cdHB1YmxpYyB1cGRhdGUoZnJhbWVTdGF0ZSkge1xyXG5cdFx0Y29uc3QgeyBkZXZpY2UgfSA9IGZyYW1lU3RhdGUuY29udGV4dDtcclxuXHR9XHJcblx0cHVibGljIGluaXQoKSB7XHJcblx0XHRjb25zdCBwb3NpdGlvbnMgPSBbXHJcblx0XHRcdDEuMCxcclxuXHRcdFx0MS4wLFxyXG5cdFx0XHQxLjAsIC8vIDBcclxuXHRcdFx0LTEuMCxcclxuXHRcdFx0MS4wLFxyXG5cdFx0XHQxLjAsIC8vIDFcclxuXHRcdFx0MS4wLFxyXG5cdFx0XHQtMS4wLFxyXG5cdFx0XHQxLjAsIC8vIDJcclxuXHRcdFx0LTEuMCxcclxuXHRcdFx0LTEuMCxcclxuXHRcdFx0MS4wLCAvLyAzXHJcblx0XHRcdDEuMCxcclxuXHRcdFx0MS4wLFxyXG5cdFx0XHQtMS4wLCAvLyA0XHJcblx0XHRcdC0xLjAsXHJcblx0XHRcdDEuMCxcclxuXHRcdFx0LTEuMCwgLy8gNVxyXG5cdFx0XHQxLjAsXHJcblx0XHRcdC0xLjAsXHJcblx0XHRcdC0xLjAsIC8vIDZcclxuXHRcdFx0LTEuMCxcclxuXHRcdFx0LTEuMCxcclxuXHRcdFx0LTEuMCAvLyA3XHJcblx0XHRdO1xyXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtcclxuXHRcdFx0Ly8gUG9zWCAoUmlnaHQpXHJcblx0XHRcdDAsIDIsIDQsIDYsIDQsIDIsXHJcblxyXG5cdFx0XHQvLyBOZWdYIChMZWZ0KVxyXG5cdFx0XHQ1LCAzLCAxLCAzLCA1LCA3LFxyXG5cclxuXHRcdFx0Ly8gUG9zWSAoVG9wKVxyXG5cdFx0XHQ0LCAxLCAwLCAxLCA0LCA1LFxyXG5cclxuXHRcdFx0Ly8gTmVnWSAoQm90dG9tKVxyXG5cdFx0XHQyLCAzLCA2LCA3LCA2LCAzLFxyXG5cclxuXHRcdFx0Ly8gUG9zWiAoRnJvbnQpXHJcblx0XHRcdDAsIDEsIDIsIDMsIDIsIDEsXHJcblxyXG5cdFx0XHQvLyBOZWdaIChCYWNrKVxyXG5cdFx0XHQ2LCA1LCA0LCA1LCA2LCA3XHJcblx0XHRdO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJwb3NpdGlvblwiLCBwb3NpdGlvbnMsIDMpKTtcclxuXHRcdHRoaXMuc2V0SW5kaWNlKGluZGljZXMpO1xyXG5cdFx0dGhpcy5jb3VudCA9IGluZGljZXMubGVuZ3RoO1xyXG5cdH1cclxufVxyXG4iLCJmdW5jdGlvbiByZXR1cm5UcnVlKCkge1xyXG5cdHJldHVybiB0cnVlO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95T2JqZWN0KG9iamVjdCkge1xyXG5cdC8vIG1lc3NhZ2UgPW1lc3NhZ2V8fFwiVGhpcyBvYmplY3Qgd2FzIGRlc3Ryb3llZCwgaS5lLiwgZGVzdHJveSgpIHdhcyBjYWxsZWQuXCI7XHJcblxyXG5cdGZ1bmN0aW9uIHRocm93T25EZXN0cm95ZWQoKSB7XHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG9iamVjdCB3YXMgZGVzdHJveWVkLCBpLmUuLCBkZXN0cm95KCkgd2FzIGNhbGxlZC5cIik7XHJcblx0fVxyXG5cclxuXHRmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcclxuXHRcdGlmICh0eXBlb2Ygb2JqZWN0W2tleV0gPT09IFwiZnVuY3Rpb25cIikge1xyXG5cdFx0XHRvYmplY3Rba2V5XSA9IHRocm93T25EZXN0cm95ZWQ7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRvYmplY3QuaXNEZXN0cm95ZWQgPSByZXR1cm5UcnVlO1xyXG5cclxuXHRyZXR1cm4gdW5kZWZpbmVkO1xyXG59XHJcbiIsImltcG9ydCBTYW1wbGVyIGZyb20gXCIuLi9yZW5kZXIvU2FtcGxlclwiO1xuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XG5pbXBvcnQgZGVmaW5lZCBmcm9tIFwiLi4vdXRpbHMvZGVmaW5lZFwiO1xuaW1wb3J0IHsgZGVzdHJveU9iamVjdCB9IGZyb20gXCIuLi91dGlscy9kZXN0cm95T2JqZWN0XCI7XG50eXBlIFRleHR1cmVDYWNoZVByb3AgPSB7XG5cdHRleHR1cmU6IFRleHR1cmU7XG5cdGNvdW50OiBudW1iZXI7XG59O1xuY2xhc3MgVGV4dHVyZUNhY2hlIHtcblx0cHVibGljIGRlZmF1bHRTYW1wbGVyOiBTYW1wbGVyO1xuXHRwcml2YXRlIF9udW1iZXJPZlRleHR1cmVzOiBudW1iZXI7XG5cdHByaXZhdGUgX3RleHR1cmVzOiBNYXA8c3RyaW5nLCBUZXh0dXJlQ2FjaGVQcm9wPjtcblx0cHJpdmF0ZSBfdGV4dHVyZXNUb1JlbGVhc2U6IE1hcDxzdHJpbmcsIFRleHR1cmVDYWNoZVByb3A+O1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLl9udW1iZXJPZlRleHR1cmVzID0gMDtcblx0XHR0aGlzLl90ZXh0dXJlcyA9IG5ldyBNYXAoKTtcblx0XHR0aGlzLl9udW1iZXJPZlRleHR1cmVzID0gMDtcblx0XHR0aGlzLl90ZXh0dXJlc1RvUmVsZWFzZSA9IG5ldyBNYXAoKTtcblx0XHR0aGlzLmRlZmF1bHRTYW1wbGVyID0gbmV3IFNhbXBsZXIoe1xuXHRcdFx0bWFnRmlsdGVyOiBcImxpbmVhclwiLFxuXHRcdFx0bWluRmlsdGVyOiBcImxpbmVhclwiLFxuXHRcdFx0YWRkcmVzc01vZGVVOiBcInJlcGVhdFwiLFxuXHRcdFx0YWRkcmVzc01vZGVWOiBcInJlcGVhdFwiXG5cdFx0fSk7XG5cdH1cblx0Z2V0IG51bWJlck9mVGV4dHVyZXMoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fbnVtYmVyT2ZUZXh0dXJlcztcblx0fVxuXHRnZXRUZXh0dXJlKGtleXdvcmQpIHtcblx0XHRjb25zdCBjYWNoZWRUZXh0dXJlID0gdGhpcy5fdGV4dHVyZXMuZ2V0KGtleXdvcmQpO1xuXHRcdGlmICghZGVmaW5lZChjYWNoZWRUZXh0dXJlKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Ly8gTm8gbG9uZ2VyIHdhbnQgdG8gcmVsZWFzZSB0aGlzIGlmIGl0IHdhcyBwcmV2aW91c2x5IHJlbGVhc2VkLlxuXHRcdGRlbGV0ZSB0aGlzLl90ZXh0dXJlc1RvUmVsZWFzZVtrZXl3b3JkXTtcblxuXHRcdCsrY2FjaGVkVGV4dHVyZS5jb3VudDtcblx0XHRyZXR1cm4gY2FjaGVkVGV4dHVyZS50ZXh0dXJlO1xuXHR9XG5cdGFkZFRleHR1cmUoa2V5d29yZCwgdGV4dHVyZSkge1xuXHRcdGNvbnN0IGNhY2hlZFRleHR1cmUgPSB7XG5cdFx0XHR0ZXh0dXJlOiB0ZXh0dXJlLFxuXHRcdFx0Y291bnQ6IDFcblx0XHR9O1xuXG5cdFx0dGV4dHVyZS5maW5hbERlc3Ryb3kgPSB0ZXh0dXJlLmRlc3Ryb3k7XG5cblx0XHQvLyBjb25zdCB0aGF0ID0gdGhpcztcblx0XHR0ZXh0dXJlLmRlc3Ryb3kgPSAoKSA9PiB7XG5cdFx0XHRpZiAoLS1jYWNoZWRUZXh0dXJlLmNvdW50ID09PSAwKSB7XG5cdFx0XHRcdHRoaXMuX3RleHR1cmVzVG9SZWxlYXNlLnNldChrZXl3b3JkLCBjYWNoZWRUZXh0dXJlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dGhpcy5fdGV4dHVyZXMuc2V0KGtleXdvcmQsIGNhY2hlZFRleHR1cmUpO1xuXHRcdCsrdGhpcy5fbnVtYmVyT2ZUZXh0dXJlcztcblx0fVxuXHRyZWxlYXNlZFRleHR1cmVzKCkge1xuXHRcdHRoaXMuX3RleHR1cmVzVG9SZWxlYXNlLmZvckVhY2goKGNhY2hlVGV4dHVyZSkgPT4ge1xuXHRcdFx0Y2FjaGVUZXh0dXJlLnRleHR1cmU/LmZpbmFsRGVzdHJveSgpO1xuXHRcdFx0LS10aGlzLl9udW1iZXJPZlRleHR1cmVzO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5fdGV4dHVyZXNUb1JlbGVhc2UuY2xlYXIoKTtcblx0fVxuXHRkZXN0cm95KCkge1xuXHRcdHRoaXMuX3RleHR1cmVzLmZvckVhY2goKGNhY2hlZFRleHR1cmUpID0+IHtcblx0XHRcdGNhY2hlZFRleHR1cmUudGV4dHVyZT8uZmluYWxEZXN0cm95KCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGRlc3Ryb3lPYmplY3QodGhpcyk7XG5cdH1cbn1cbmNvbnN0IHRleHR1cmVDYWNoZSA9IG5ldyBUZXh0dXJlQ2FjaGUoKTtcbmV4cG9ydCBkZWZhdWx0IHRleHR1cmVDYWNoZTtcbiIsImltcG9ydCBTYW1wbGVyIGZyb20gXCIuLi9yZW5kZXIvU2FtcGxlclwiO1xuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIEN1YmVUZXh0dXJlTG9hZGVyKHVybHMpIHtcblx0Y29uc3QgcHJvbWlzZXMgPSB1cmxzLm1hcCgoc3JjKSA9PiB7XG5cdFx0Y29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcblx0XHRpbWcuc3JjID0gc3JjO1xuXHRcdHJldHVybiBpbWcuZGVjb2RlKCkudGhlbigoKSA9PiBjcmVhdGVJbWFnZUJpdG1hcChpbWcpKTtcblx0fSk7XG5cdGNvbnN0IGltYWdlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0YXdhaXQgUHJvbWlzZS5hbGwoaW1hZ2VzKTtcblx0Y29uc3QgYmFzZVNhbXBsZXIgPSBuZXcgU2FtcGxlcih7XG5cdFx0bWFnRmlsdGVyOiBcImxpbmVhclwiLFxuXHRcdG1pbkZpbHRlcjogXCJsaW5lYXJcIlxuXHR9KTtcblx0Y29uc3QgZGF0YSA9IGltYWdlcy5tYXAoKGltYWdlLCBpKSA9PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNvdXJjZTogaW1hZ2UsXG5cdFx0XHR3aWR0aDogaW1hZ2Uud2lkdGgsXG5cdFx0XHRoZWlnaHQ6IGltYWdlLmhlaWdodCxcblx0XHRcdGRlcHRoOiAxLFxuXHRcdFx0eDogMCxcblx0XHRcdHk6IDAsXG5cdFx0XHR6OiBpXG5cdFx0fTtcblx0fSk7XG5cdGNvbnN0IGJhc2VUZXh0dXJlID0gbmV3IFRleHR1cmUoe1xuXHRcdHNpemU6IHtcblx0XHRcdHdpZHRoOiBpbWFnZXNbMF0ud2lkdGgsXG5cdFx0XHRoZWlnaHQ6IGltYWdlc1swXS5oZWlnaHQsXG5cdFx0XHRkZXB0aDogNlxuXHRcdH0sXG5cdFx0Zm9ybWF0OiBcInJnYmE4dW5vcm1cIixcblx0XHR1c2FnZTogR1BVVGV4dHVyZVVzYWdlLlRFWFRVUkVfQklORElORyB8IEdQVVRleHR1cmVVc2FnZS5DT1BZX0RTVCB8IEdQVVRleHR1cmVVc2FnZS5SRU5ERVJfQVRUQUNITUVOVCxcblx0XHRzYW1wbGVyOiBiYXNlU2FtcGxlcixcblx0XHRkYXRhLFxuXHRcdHZpZXdGb3JtYXRzOiBcImN1YmVcIixcblx0XHRtaXBMZXZlbENvdW50OiA2LFxuXHRcdG5lZWRNaXBNYXA6IHRydWVcblx0fSk7XG5cdHJldHVybiB7XG5cdFx0dGV4dHVyZTogYmFzZVRleHR1cmUsXG5cdFx0c2FtcGxlcjogYmFzZVNhbXBsZXJcblx0fTtcbn1cbiIsImltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XHJcbmltcG9ydCB0ZXh0dXJlQ2FjaGUgZnJvbSBcIi4uL2NvcmUvVGV4dHVyZUNhY2hlXCI7XHJcbmltcG9ydCB7IENvbXBhcmVGdW5jdGlvbiB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCBDdWJlVGV4dHVyZUxvYWRlciBmcm9tIFwiLi4vbG9hZGVyL0N1YmVUZXh0dXJlTG9hZGVyXCI7XHJcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi4vbWVzaC9NZXNoXCI7XHJcbmltcG9ydCBVbmlmb3JtQnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybUJ1ZmZlclwiO1xyXG5pbXBvcnQgeyBVbmlmb3JtRW51bSB9IGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybXNcIjtcclxuaW1wb3J0IHsgU2hhZGVyU291cmNlIH0gZnJvbSBcIi4uL3NoYWRlci9TaGFkZXJTb3VyY2VcIjtcclxuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi9NYXRlcmlhbFwiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTa3lCb3hNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcclxuXHRsb2FkRmlzaDogYm9vbGVhbjtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHR0aGlzLnR5cGUgPSBcInNreWJveFwiO1xyXG5cdFx0dGhpcy5zaGFkZXJTb3VyY2UgPSBuZXcgU2hhZGVyU291cmNlKHtcclxuXHRcdFx0dHlwZTogdGhpcy50eXBlLFxyXG5cdFx0XHRyZW5kZXI6IHRydWUsXHJcblx0XHRcdGRlZmluZXM6IHt9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMubG9hZEZpc2ggPSBmYWxzZTtcclxuXHRcdHRoaXMucmVuZGVyU3RhdGUuZGVwdGhTdGVuY2lsLmRlcHRoV3JpdGVFbmFibGVkID0gZmFsc2U7XHJcblx0XHR0aGlzLnJlbmRlclN0YXRlLmRlcHRoU3RlbmNpbC5kZXB0aENvbXBhcmUgPSBDb21wYXJlRnVuY3Rpb24uTGVzc0VxdWFsO1xyXG5cdH1cclxuXHRhc3luYyBsb2FkVGV4dHVyZSh1cmxzKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCBDdWJlVGV4dHVyZUxvYWRlcih1cmxzKTtcclxuXHRcdHRoaXMubG9hZEZpc2ggPSB0cnVlO1xyXG5cdFx0dGV4dHVyZUNhY2hlLmFkZFRleHR1cmUoXCJzcGVjdWxhclwiLCByZXN1bHQudGV4dHVyZSk7XHJcblx0XHR0aGlzLmJhc2VUZXh0dXJlID0gcmVzdWx0LnRleHR1cmU7XHJcblx0XHR0aGlzLmJhc2VTYW1wbGVyID0gcmVzdWx0LnNhbXBsZXI7XHJcblx0fVxyXG5cdHVwZGF0ZShmcmFtZVN0YXRlOiBGcmFtZVN0YXRlLCBtZXNoOiBNZXNoKSB7XHJcblx0XHRpZiAoIXRoaXMubG9hZEZpc2gpIHJldHVybjtcclxuXHRcdGlmICghdGhpcy5zaGFkZXJEYXRhKSB7XHJcblx0XHRcdHRoaXMuY3JlYXRlU2hhZGVyRGF0YShtZXNoKTtcclxuXHRcdH1cclxuXHR9XHJcblx0cHJvdGVjdGVkIGNyZWF0ZVNoYWRlckRhdGEobWVzaDogTWVzaCkge1xyXG5cdFx0c3VwZXIuY3JlYXRlU2hhZGVyRGF0YShtZXNoKTtcclxuXHRcdGNvbnN0IHVuaWZvcm1CdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7IGxhYmVsOiBcInNreWJveFwiIH0pO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcIm1vZGVsTWF0cml4XCIsXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0fSxcclxuXHRcdFx0VW5pZm9ybUVudW0uTWF0NFxyXG5cdFx0KTtcclxuXHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwic2t5Ym94XCIsIHVuaWZvcm1CdWZmZXIpO1xyXG5cdFx0dGhpcy5zaGFkZXJEYXRhLnNldFRleHR1cmUoXCJiYXNlVGV4dHVyZVwiLCB0aGlzLmJhc2VUZXh0dXJlKTtcclxuXHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRTYW1wbGVyKFwiYmFzZVNhbXBsZXJcIiwgdGhpcy5iYXNlU2FtcGxlcik7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XHJcbmltcG9ydCB7IFJlbmRlck9iamVjdFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgU2t5Qm94R2VvbWV0cnkgZnJvbSBcIi4uL2dlb21ldHJ5L1NreUJveEdlb21ldHJ5XCI7XHJcbmltcG9ydCBTa3lCb3hNYXRlcmlhbCBmcm9tIFwiLi4vbWF0ZXJpYWwvU2t5Qm94TWF0ZXJpYWxcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuL01lc2hcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2t5Qm94IGV4dGVuZHMgTWVzaCB7XHJcblx0bWF0ZXJpYWw6IFNreUJveE1hdGVyaWFsO1xyXG5cdHB1YmxpYyB2aXNpYmlsaXR5OiBib29sZWFuO1xyXG5cdGNvbnN0cnVjdG9yKHVybHM/OiBBcnJheTxzdHJpbmc+KSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0dGhpcy50eXBlID0gUmVuZGVyT2JqZWN0VHlwZS5Ta3lib3g7XHJcblx0XHR0aGlzLnZpc2liaWxpdHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5tYXRlcmlhbCA9IG5ldyBTa3lCb3hNYXRlcmlhbCgpO1xyXG5cdFx0aWYgKHVybHMpIHRoaXMubWF0ZXJpYWwubG9hZFRleHR1cmUodXJscyk7XHJcblx0XHR0aGlzLmdlb21ldHJ5ID0gbmV3IFNreUJveEdlb21ldHJ5KCk7XHJcblx0XHR0aGlzLmlzU2t5Qm94ID0gdHJ1ZTtcclxuXHR9XHJcblx0dXBkYXRlKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUpIHtcclxuXHRcdHRoaXMudXBkYXRlTWF0cml4KCk7XHJcblx0XHR0aGlzLmdlb21ldHJ5LnVwZGF0ZShmcmFtZVN0YXRlKTtcclxuXHRcdHRoaXMubWF0ZXJpYWwudXBkYXRlKGZyYW1lU3RhdGUsIHRoaXMpO1xyXG5cdFx0aWYgKHRoaXMudmlzaWJpbGl0eSkgZnJhbWVTdGF0ZS5yZW5kZXJRdWV1ZS5wcmUucHVzaCh0aGlzKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IFJlbmRlck9iamVjdCBmcm9tIFwiLi4vY29yZS9SZW5kZXJPYmplY3RcIjtcbmltcG9ydCBNYXRyaXg0IGZyb20gXCIuLi9tYXRoL01hdHJpeDRcIjtcbmltcG9ydCBjcmVhdGVHdWlkIGZyb20gXCIuLi91dGlscy9jcmVhdGVHdWlkXCI7XG5cbmV4cG9ydCBjbGFzcyBJbnN0YW5jZSBleHRlbmRzIFJlbmRlck9iamVjdCB7XG5cdHB1YmxpYyBpZDogc3RyaW5nIHwgbnVtYmVyO1xuXHRwdWJsaWMgdmlzaWJsaXR5OiBib29sZWFuO1xuXHRwcml2YXRlIF9ub3RVcGRhdGVNYXRyaXg6IGJvb2xlYW47XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5fbm90VXBkYXRlTWF0cml4ID0gZmFsc2U7XG5cdFx0dGhpcy52aXNpYmxpdHkgPSBmYWxzZTtcblx0XHR0aGlzLmlkID0gY3JlYXRlR3VpZCgpO1xuXHR9XG5cdHNldE1hdHJpeDQobWF0NDogTWF0cml4NCkge1xuXHRcdHRoaXMubW9kZWxNYXRyaXguc2V0KG1hdDQpO1xuXHRcdHRoaXMuX25vdFVwZGF0ZU1hdHJpeCA9IHRydWU7XG5cdH1cblx0dXBkYXRlTWF0cml4KG1hdHJpeD86IE1hdHJpeDQpIHtcblx0XHRpZiAodGhpcy5fbm90VXBkYXRlTWF0cml4KSByZXR1cm47XG5cdFx0c3VwZXIudXBkYXRlTWF0cml4KG1hdHJpeCk7XG5cdH1cbn1cbiIsImltcG9ydCBDYW1lcmEgZnJvbSBcIi4uL2NhbWVyYS9DYW1lcmFcIjtcbmltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XG5pbXBvcnQgeyBCdWZmZXJCaW5kaW5nVHlwZSwgQnVmZmVyVXNhZ2UsIEludGVyc2VjdCB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XG5pbXBvcnQgR2VvbWV0cnkgZnJvbSBcIi4uL2dlb21ldHJ5L0dlb21ldHJ5XCI7XG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCIuLi9tYXRlcmlhbC9NYXRlcmlhbFwiO1xuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XG5pbXBvcnQgeyBVbmlmb3JtRW51bSB9IGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybXNcIjtcbmltcG9ydCB7IEluc3RhbmNlIH0gZnJvbSBcIi4vSW5zdGFuY2VcIjtcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi9NZXNoXCI7XG5cbmV4cG9ydCBjbGFzcyBJbnN0YW5jZU1lc2ggZXh0ZW5kcyBNZXNoIHtcblx0cHJpdmF0ZSBpbnN0YW5jZXM6IE1hcDxzdHJpbmcgfCBudW1iZXIsIEluc3RhbmNlPjtcblx0cHJpdmF0ZSByZW5kZXJJbnN0YW5jZXM6IEFycmF5PEluc3RhbmNlPjtcblx0cHJpdmF0ZSBoYXNBZGRJbnN0YW5jZXM6IGJvb2xlYW47XG5cdGNvbnN0cnVjdG9yKGdlbzogR2VvbWV0cnksIG1hdDogTWF0ZXJpYWwpIHtcblx0XHRzdXBlcihnZW8sIG1hdCk7XG5cdFx0dGhpcy5pbnN0YW5jZXMgPSBuZXcgTWFwKCk7XG5cdFx0dGhpcy5yZW5kZXJJbnN0YW5jZXMgPSBbXTtcblx0XHR0aGlzLmhhc0FkZEluc3RhbmNlcyA9IGZhbHNlO1xuXHR9XG5cdHVwZGF0ZShmcmFtZVN0YXRlOiBGcmFtZVN0YXRlLCBjYW1lcmE/OiBDYW1lcmEpIHtcblx0XHQvLyBjcmVhdGVcblx0XHR0aGlzLmdlb21ldHJ5LnVwZGF0ZShmcmFtZVN0YXRlKTtcblx0XHR0aGlzLm1hdGVyaWFsLnVwZGF0ZShmcmFtZVN0YXRlLCB0aGlzKTtcblx0XHQvLyB1cGRhdGUgaW5zdGFuY2VzIHZpc2libGl0eVxuXHRcdHRoaXMuY2hlY2tJbnN0YW5jZXNWaXNpYmxpdHkoeyBmcmFtZVN0YXRlLCBjYW1lcmEgfSk7XG5cdFx0aWYgKCF0aGlzLmhhc0FkZEluc3RhbmNlcykgdGhpcy5hZGRVbmlmb3Jtc1RvTWF0ZXJpYWwoKTtcblx0XHR0aGlzLmluc3RhbmNlQ291bnQgPSB0aGlzLnJlbmRlckluc3RhbmNlcy5sZW5ndGg7XG5cdFx0aWYgKHRoaXMucmVuZGVySW5zdGFuY2VzLmxlbmd0aCA8IDEpIHJldHVybjtcblx0XHRpZiAodGhpcy5tYXRlcmlhbC50cmFuc3BhcmVudCkge1xuXHRcdFx0ZnJhbWVTdGF0ZS5yZW5kZXJRdWV1ZS50cmFuc3BhcmVudC5wdXNoKHRoaXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmcmFtZVN0YXRlLnJlbmRlclF1ZXVlLm9wYXF1ZS5wdXNoKHRoaXMpO1xuXHRcdH1cblx0fVxuXHRhZGRJbnN0YW5jZShpbnN0YW5jZTogSW5zdGFuY2UpIHtcblx0XHRpZiAodGhpcy5pbnN0YW5jZXMuZ2V0KGluc3RhbmNlLmlkKSkgcmV0dXJuO1xuXHRcdHRoaXMuaW5zdGFuY2VzLnNldChpbnN0YW5jZS5pZCwgaW5zdGFuY2UpO1xuXHR9XG5cdHJlbW92ZUluc3RhbmNlKGtleTogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW5zdGFuY2VzLmRlbGV0ZShrZXkpO1xuXHR9XG5cdGdldEluc3RhbmNlKGtleTogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW5zdGFuY2VzLmdldChrZXkpO1xuXHR9XG5cdHByaXZhdGUgY2hlY2tJbnN0YW5jZXNWaXNpYmxpdHkob3B0aW9uczogeyBmcmFtZVN0YXRlOiBGcmFtZVN0YXRlOyBjYW1lcmE6IENhbWVyYSB9KSB7XG5cdFx0Y29uc3QgeyBmcmFtZVN0YXRlLCBjYW1lcmEgfSA9IG9wdGlvbnM7XG5cdFx0dGhpcy5pbnN0YW5jZXMuZm9yRWFjaCgoaW5zdGFuY2U6IEluc3RhbmNlKSA9PiB7XG5cdFx0XHRpbnN0YW5jZS51cGRhdGVNYXRyaXgodGhpcz8ucGFyZW50Py5tb2RlbE1hdHJpeCk7XG5cdFx0XHRpbnN0YW5jZS52aXNpYmxpdHkgPSB0aGlzLmdldEluc3RhbmNlVmlzaWJsaXR5KHsgaW5zdGFuY2UsIGZyYW1lU3RhdGUsIGNhbWVyYSB9KTtcblx0XHRcdGlmIChpbnN0YW5jZS52aXNpYmxpdHkpIHRoaXMucmVuZGVySW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO1xuXHRcdH0pO1xuXHR9XG5cdHByaXZhdGUgZ2V0SW5zdGFuY2VWaXNpYmxpdHkob3B0aW9uczogeyBpbnN0YW5jZTogSW5zdGFuY2U7IGZyYW1lU3RhdGU6IEZyYW1lU3RhdGU7IGNhbWVyYTogQ2FtZXJhIH0pOiBib29sZWFuIHtcblx0XHRjb25zdCB7IGluc3RhbmNlLCBmcmFtZVN0YXRlLCBjYW1lcmEgfSA9IG9wdGlvbnM7XG5cdFx0dGhpcy5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZS51cGRhdGUoaW5zdGFuY2UubW9kZWxNYXRyaXgpO1xuXHRcdHRoaXMuZGlzdGFuY2VUb0NhbWVyYSA9IHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUuZGlzdGFuY2VUb0NhbWVyYShjYW1lcmEpO1xuXHRcdGNvbnN0IHZpc2liaWxpdHkgPSBmcmFtZVN0YXRlLmN1bGxpbmdWb2x1bWUuY29tcHV0ZVZpc2liaWxpdHkodGhpcy5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSk7XG5cdFx0cmV0dXJuIHZpc2liaWxpdHkgPT09IEludGVyc2VjdC5JTlRFUlNFQ1RJTkcgfHwgdmlzaWJpbGl0eSA9PT0gSW50ZXJzZWN0LklOU0lERTtcblx0fVxuXHRwcml2YXRlIGFkZFVuaWZvcm1zVG9NYXRlcmlhbCgpIHtcblx0XHRpZiAoIXRoaXMubWF0ZXJpYWwuc2hhZGVyRGF0YSkgcmV0dXJuO1xuXHRcdHRoaXMuaGFzQWRkSW5zdGFuY2VzID0gdHJ1ZTtcblx0XHRjb25zdCBpbnN0YW5jZU1hdHJpeHNCdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7XG5cdFx0XHRsYWJlbDogXCJpbnN0YW5jZU1hdHJpeHNCdWZmZXJcIixcblx0XHRcdHR5cGU6IEJ1ZmZlckJpbmRpbmdUeXBlLlJlYWRPbmx5U3RvcmFnZSxcblx0XHRcdHVzYWdlOiBCdWZmZXJVc2FnZS5TdG9yYWdlIHwgQnVmZmVyVXNhZ2UuQ29weURzdCxcblx0XHRcdHNpemU6IHRoaXMuaW5zdGFuY2VzLnNpemUgKiA2NFxuXHRcdH0pO1xuXHRcdGluc3RhbmNlTWF0cml4c0J1ZmZlci5zZXRVbmlmb3JtKFxuXHRcdFx0XCJpbnN0YW5jZU1hdHJpeHNcIixcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXM/LnJlbmRlckluc3RhbmNlcz8ubWFwKChyZW5kZXJJbnN0YW5jZTogSW5zdGFuY2UpID0+IHJlbmRlckluc3RhbmNlLm1vZGVsTWF0cml4KTtcblx0XHRcdH0sXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0QXJyYXksXG5cdFx0XHR0aGlzPy5yZW5kZXJJbnN0YW5jZXM/Lmxlbmd0aFxuXHRcdCk7XG5cdFx0dGhpcy5tYXRlcmlhbC5zaGFkZXJEYXRhLnNldFVuaWZvcm1CdWZmZXIoXCJpbnN0YW5jZU1hdHJpeHNCdWZmZXJcIiwgaW5zdGFuY2VNYXRyaXhzQnVmZmVyKTtcblx0XHR0aGlzLm1hdGVyaWFsLnNoYWRlckRhdGEuc2V0RGVmaW5lKFwiVVNFX0lOU1RBTkNFXCIsIHRydWUpO1xuXHRcdHRoaXMubWF0ZXJpYWwuc2hhZGVyRGF0YS5zZXREZWZpbmUoXCJpbnN0YW5jZUNvdW50XCIsIHRoaXM/LnJlbmRlckluc3RhbmNlcz8ubGVuZ3RoKTtcblx0fVxufVxuIiwiLyoqXHJcbiAqIEVuc3VyZSBmaXJzdCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIHByaW1pdGl2ZSBmdW5jdGlvbnMgaXMgYW4gb2JqZWN0XHJcbiAqIEBwYXJhbSB7Li4uKn0gYXJnc1xyXG4gKi9cclxuZnVuY3Rpb24gY2hlY2tBcmd1bWVudHMoYXJncykge1xyXG5cdGNvbnN0IGFyZ3VtZW50VHlwZSA9IHR5cGVvZiBhcmdzWzBdO1xyXG5cdGlmIChhcmd1bWVudFR5cGUgIT09IFwib2JqZWN0XCIgJiYgYXJndW1lbnRUeXBlICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcblx0XHRjb25zb2xlLmVycm9yKFwiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QuXCIpO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5sZXQgVFlQRURfQVJSQVlfVFlQRTtcclxuXHJcbi8qKlxyXG4gKiBTZWxlY3QgY2VsbHMgdHlwZWQgYXJyYXkgZnJvbSBhIHNpemUgZGV0ZXJtaW5lZCBieSBhbW91bnQgb2YgdmVydGljZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzaXplIFRoZSBtYXggdmFsdWUgZXhwZWN0ZWRcclxuICogQHJldHVybnMgeyhVaW50OEFycmF5fFVpbnQxNkFycmF5fFVpbnQzMkFycmF5KX1cclxuICogQHNlZSBbTUROIFR5cGVkQXJyYXkgb2JqZWN0c117QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvVHlwZWRBcnJheSN0eXBlZGFycmF5X29iamVjdHN9XHJcbiAqL1xyXG5jb25zdCBnZXRDZWxsc1R5cGVkQXJyYXkgPSAoc2l6ZSkgPT5cclxuXHRUWVBFRF9BUlJBWV9UWVBFIHx8IChzaXplIDw9IDI1NSA/IFVpbnQ4QXJyYXkgOiBzaXplIDw9IDY1NTM1ID8gVWludDE2QXJyYXkgOiBVaW50MzJBcnJheSk7XHJcblxyXG4vKipcclxuICogQHByaXZhdGVcclxuICovXHJcbmNvbnN0IFBMQU5FX0RJUkVDVElPTlMgPSB7XHJcblx0ejogWzAsIDEsIDIsIDEsIC0xLCAxXSxcclxuXHRcIi16XCI6IFswLCAxLCAyLCAtMSwgLTEsIC0xXSxcclxuXHRcIi14XCI6IFsyLCAxLCAwLCAxLCAtMSwgLTFdLFxyXG5cdHg6IFsyLCAxLCAwLCAtMSwgLTEsIDFdLFxyXG5cdHk6IFswLCAyLCAxLCAxLCAxLCAxXSxcclxuXHRcIi15XCI6IFswLCAyLCAxLCAxLCAtMSwgLTFdXHJcbn07XHJcblxyXG4vKipcclxuICogQHByaXZhdGVcclxuICovXHJcbmZ1bmN0aW9uIGNvbXB1dGVQbGFuZShcclxuXHRnZW9tZXRyeSxcclxuXHRpbmRpY2VzLFxyXG5cdHN1LFxyXG5cdHN2LFxyXG5cdG51LFxyXG5cdG52LFxyXG5cdGRpcmVjdGlvbiA9IFwielwiLFxyXG5cdHB3ID0gMCxcclxuXHRxdWFkcyA9IGZhbHNlLFxyXG5cdHV2U2NhbGUgPSBbMSwgMV0sXHJcblx0dXZPZmZzZXQgPSBbMCwgMF0sXHJcblx0Y2VudGVyID0gWzAsIDAsIDBdLFxyXG5cdGNjdyA9IHRydWVcclxuKSB7XHJcblx0Y29uc3QgeyBwb3NpdGlvbnMsIG5vcm1hbHMsIHV2cywgY2VsbHMgfSA9IGdlb21ldHJ5O1xyXG5cdGNvbnN0IFt1LCB2LCB3LCBmbGlwVSwgZmxpcFYsIG5vcm1hbF0gPSBQTEFORV9ESVJFQ1RJT05TW2RpcmVjdGlvbl07XHJcblxyXG5cdGNvbnN0IHZlcnRleE9mZnNldCA9IGluZGljZXMudmVydGV4O1xyXG5cclxuXHRmb3IgKGxldCBqID0gMDsgaiA8PSBudjsgaisrKSB7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8PSBudTsgaSsrKSB7XHJcblx0XHRcdHBvc2l0aW9uc1tpbmRpY2VzLnZlcnRleCAqIDMgKyB1XSA9ICgtc3UgLyAyICsgKGkgKiBzdSkgLyBudSkgKiBmbGlwVSArIGNlbnRlclt1XTtcclxuXHRcdFx0cG9zaXRpb25zW2luZGljZXMudmVydGV4ICogMyArIHZdID0gKC1zdiAvIDIgKyAoaiAqIHN2KSAvIG52KSAqIGZsaXBWICsgY2VudGVyW3ZdO1xyXG5cdFx0XHRwb3NpdGlvbnNbaW5kaWNlcy52ZXJ0ZXggKiAzICsgd10gPSBwdyArIGNlbnRlclt3XTtcclxuXHJcblx0XHRcdG5vcm1hbHNbaW5kaWNlcy52ZXJ0ZXggKiAzICsgd10gPSBub3JtYWw7XHJcblxyXG5cdFx0XHR1dnNbaW5kaWNlcy52ZXJ0ZXggKiAyXSA9IChpIC8gbnUpICogdXZTY2FsZVswXSArIHV2T2Zmc2V0WzBdO1xyXG5cdFx0XHR1dnNbaW5kaWNlcy52ZXJ0ZXggKiAyICsgMV0gPSAoMSAtIGogLyBudikgKiB1dlNjYWxlWzFdICsgdXZPZmZzZXRbMV07XHJcblxyXG5cdFx0XHRpbmRpY2VzLnZlcnRleCsrO1xyXG5cclxuXHRcdFx0aWYgKGogPCBudiAmJiBpIDwgbnUpIHtcclxuXHRcdFx0XHRjb25zdCBuID0gdmVydGV4T2Zmc2V0ICsgaiAqIChudSArIDEpICsgaTtcclxuXHRcdFx0XHRpZiAocXVhZHMpIHtcclxuXHRcdFx0XHRcdGNvbnN0IG8gPSB2ZXJ0ZXhPZmZzZXQgKyAoaiArIDEpICogKG51ICsgMSkgKyBpO1xyXG5cdFx0XHRcdFx0Y2VsbHNbaW5kaWNlcy5jZWxsXSA9IG47XHJcblx0XHRcdFx0XHRjZWxsc1tpbmRpY2VzLmNlbGwgKyAxXSA9IG87XHJcblx0XHRcdFx0XHRjZWxsc1tpbmRpY2VzLmNlbGwgKyAyXSA9IG8gKyAxO1xyXG5cdFx0XHRcdFx0Y2VsbHNbaW5kaWNlcy5jZWxsICsgM10gPSBuICsgMTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y2VsbHNbaW5kaWNlcy5jZWxsXSA9IG47XHJcblx0XHRcdFx0XHRjZWxsc1tpbmRpY2VzLmNlbGwgKyAoY2N3ID8gMSA6IDIpXSA9IG4gKyBudSArIDE7XHJcblx0XHRcdFx0XHRjZWxsc1tpbmRpY2VzLmNlbGwgKyAoY2N3ID8gMiA6IDEpXSA9IG4gKyBudSArIDI7XHJcblxyXG5cdFx0XHRcdFx0Y2VsbHNbaW5kaWNlcy5jZWxsICsgM10gPSBuO1xyXG5cdFx0XHRcdFx0Y2VsbHNbaW5kaWNlcy5jZWxsICsgKGNjdyA/IDQgOiA1KV0gPSBuICsgbnUgKyAyO1xyXG5cdFx0XHRcdFx0Y2VsbHNbaW5kaWNlcy5jZWxsICsgKGNjdyA/IDUgOiA0KV0gPSBuICsgMTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aW5kaWNlcy5jZWxsICs9IHF1YWRzID8gNCA6IDY7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBnZW9tZXRyeTtcclxufVxyXG4vKipcclxuICogQHR5cGVkZWYge09iamVjdH0gQ3ViZU9wdGlvbnNcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtzeD0xXVxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3N5PXN4XVxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3N6PXN4XVxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW254PTFdXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbnk9bnhdXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbno9bnhdXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3ViZSh7IHN4ID0gMSwgc3kgPSAxLCBzeiA9IDEsIG54ID0gMSwgbnkgPSAxLCBueiA9IDEgfSA9IHt9KSB7XHJcblx0Y2hlY2tBcmd1bWVudHMoYXJndW1lbnRzKTtcclxuXHJcblx0Y29uc3Qgc2l6ZSA9IChueCArIDEpICogKG55ICsgMSkgKiAyICsgKG54ICsgMSkgKiAobnogKyAxKSAqIDIgKyAobnogKyAxKSAqIChueSArIDEpICogMjtcclxuXHJcblx0Y29uc3QgZ2VvbWV0cnkgPSB7XHJcblx0XHRwb3NpdGlvbnM6IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSAqIDMpLFxyXG5cdFx0bm9ybWFsczogbmV3IEZsb2F0MzJBcnJheShzaXplICogMyksXHJcblx0XHR1dnM6IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSAqIDIpLFxyXG5cdFx0Y2VsbHM6IG5ldyAoZ2V0Q2VsbHNUeXBlZEFycmF5KHNpemUpKSgobnggKiBueSAqIDIgKyBueCAqIG56ICogMiArIG56ICogbnkgKiAyKSAqIDYpXHJcblx0fTtcclxuXHJcblx0Y29uc3QgaGFsZlNYID0gc3ggKiAwLjU7XHJcblx0Y29uc3QgaGFsZlNZID0gc3kgKiAwLjU7XHJcblx0Y29uc3QgaGFsZlNaID0gc3ogKiAwLjU7XHJcblxyXG5cdGNvbnN0IGluZGljZXMgPSB7IHZlcnRleDogMCwgY2VsbDogMCB9O1xyXG5cclxuXHRjb21wdXRlUGxhbmUoZ2VvbWV0cnksIGluZGljZXMsIHN4LCBzeSwgbngsIG55LCBcInpcIiwgaGFsZlNaKTtcclxuXHRjb21wdXRlUGxhbmUoZ2VvbWV0cnksIGluZGljZXMsIHN4LCBzeSwgbngsIG55LCBcIi16XCIsIC1oYWxmU1opO1xyXG5cdGNvbXB1dGVQbGFuZShnZW9tZXRyeSwgaW5kaWNlcywgc3osIHN5LCBueiwgbnksIFwiLXhcIiwgLWhhbGZTWCk7XHJcblx0Y29tcHV0ZVBsYW5lKGdlb21ldHJ5LCBpbmRpY2VzLCBzeiwgc3ksIG56LCBueSwgXCJ4XCIsIGhhbGZTWCk7XHJcblx0Y29tcHV0ZVBsYW5lKGdlb21ldHJ5LCBpbmRpY2VzLCBzeCwgc3osIG54LCBueiwgXCJ5XCIsIGhhbGZTWSk7XHJcblx0Y29tcHV0ZVBsYW5lKGdlb21ldHJ5LCBpbmRpY2VzLCBzeCwgc3osIG54LCBueiwgXCIteVwiLCAtaGFsZlNZKTtcclxuXHJcblx0cmV0dXJuIGdlb21ldHJ5O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQm94KG9wdGlvbnMpIHtcclxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcblx0Y29uc3QgZGltZW5zaW9ucyA9IG9wdGlvbnMuZGltZW5zaW9ucyB8fCBbMSwgMSwgMV07XHJcblx0Y29uc3QgcG9zaXRpb24gPSBvcHRpb25zLnBvc2l0aW9uIHx8IFstZGltZW5zaW9uc1swXSAvIDIsIC1kaW1lbnNpb25zWzFdIC8gMiwgLWRpbWVuc2lvbnNbMl0gLyAyXTtcclxuXHRjb25zdCB4ID0gcG9zaXRpb25bMF07XHJcblx0Y29uc3QgeSA9IHBvc2l0aW9uWzFdO1xyXG5cdGNvbnN0IHogPSBwb3NpdGlvblsyXTtcclxuXHRjb25zdCB3aWR0aCA9IGRpbWVuc2lvbnNbMF07XHJcblx0Y29uc3QgaGVpZ2h0ID0gZGltZW5zaW9uc1sxXTtcclxuXHRjb25zdCBkZXB0aCA9IGRpbWVuc2lvbnNbMl07XHJcblxyXG5cdGNvbnN0IGZibCA9IHsgeDogeCwgeTogeSwgejogeiArIGRlcHRoIH07XHJcblx0Y29uc3QgZmJyID0geyB4OiB4ICsgd2lkdGgsIHk6IHksIHo6IHogKyBkZXB0aCB9O1xyXG5cdGNvbnN0IGZ0bCA9IHsgeDogeCwgeTogeSArIGhlaWdodCwgejogeiArIGRlcHRoIH07XHJcblx0Y29uc3QgZnRyID0geyB4OiB4ICsgd2lkdGgsIHk6IHkgKyBoZWlnaHQsIHo6IHogKyBkZXB0aCB9O1xyXG5cdGNvbnN0IGJibCA9IHsgeDogeCwgeTogeSwgejogeiB9O1xyXG5cdGNvbnN0IGJiciA9IHsgeDogeCArIHdpZHRoLCB5OiB5LCB6OiB6IH07XHJcblx0Y29uc3QgYnRsID0geyB4OiB4LCB5OiB5ICsgaGVpZ2h0LCB6OiB6IH07XHJcblx0Y29uc3QgYnRyID0geyB4OiB4ICsgd2lkdGgsIHk6IHkgKyBoZWlnaHQsIHo6IHogfTtcclxuXHJcblx0Y29uc3QgcG9zaXRpb25zID0gW1xyXG5cdFx0Ly8gZnJvbnRcclxuXHRcdGZibC54LFxyXG5cdFx0ZmJsLnksXHJcblx0XHRmYmwueixcclxuXHRcdGZici54LFxyXG5cdFx0ZmJyLnksXHJcblx0XHRmYnIueixcclxuXHRcdGZ0bC54LFxyXG5cdFx0ZnRsLnksXHJcblx0XHRmdGwueixcclxuXHRcdGZ0bC54LFxyXG5cdFx0ZnRsLnksXHJcblx0XHRmdGwueixcclxuXHRcdGZici54LFxyXG5cdFx0ZmJyLnksXHJcblx0XHRmYnIueixcclxuXHRcdGZ0ci54LFxyXG5cdFx0ZnRyLnksXHJcblx0XHRmdHIueixcclxuXHJcblx0XHQvLyByaWdodFxyXG5cdFx0ZmJyLngsXHJcblx0XHRmYnIueSxcclxuXHRcdGZici56LFxyXG5cdFx0YmJyLngsXHJcblx0XHRiYnIueSxcclxuXHRcdGJici56LFxyXG5cdFx0ZnRyLngsXHJcblx0XHRmdHIueSxcclxuXHRcdGZ0ci56LFxyXG5cdFx0ZnRyLngsXHJcblx0XHRmdHIueSxcclxuXHRcdGZ0ci56LFxyXG5cdFx0YmJyLngsXHJcblx0XHRiYnIueSxcclxuXHRcdGJici56LFxyXG5cdFx0YnRyLngsXHJcblx0XHRidHIueSxcclxuXHRcdGJ0ci56LFxyXG5cclxuXHRcdC8vIGJhY2tcclxuXHRcdGZici54LFxyXG5cdFx0YmJyLnksXHJcblx0XHRiYnIueixcclxuXHRcdGJibC54LFxyXG5cdFx0YmJsLnksXHJcblx0XHRiYmwueixcclxuXHRcdGJ0ci54LFxyXG5cdFx0YnRyLnksXHJcblx0XHRidHIueixcclxuXHRcdGJ0ci54LFxyXG5cdFx0YnRyLnksXHJcblx0XHRidHIueixcclxuXHRcdGJibC54LFxyXG5cdFx0YmJsLnksXHJcblx0XHRiYmwueixcclxuXHRcdGJ0bC54LFxyXG5cdFx0YnRsLnksXHJcblx0XHRidGwueixcclxuXHJcblx0XHQvLyBsZWZ0XHJcblx0XHRiYmwueCxcclxuXHRcdGJibC55LFxyXG5cdFx0YmJsLnosXHJcblx0XHRmYmwueCxcclxuXHRcdGZibC55LFxyXG5cdFx0ZmJsLnosXHJcblx0XHRidGwueCxcclxuXHRcdGJ0bC55LFxyXG5cdFx0YnRsLnosXHJcblx0XHRidGwueCxcclxuXHRcdGJ0bC55LFxyXG5cdFx0YnRsLnosXHJcblx0XHRmYmwueCxcclxuXHRcdGZibC55LFxyXG5cdFx0ZmJsLnosXHJcblx0XHRmdGwueCxcclxuXHRcdGZ0bC55LFxyXG5cdFx0ZnRsLnosXHJcblxyXG5cdFx0Ly8gdG9wXHJcblx0XHRmdGwueCxcclxuXHRcdGZ0bC55LFxyXG5cdFx0ZnRsLnosXHJcblx0XHRmdHIueCxcclxuXHRcdGZ0ci55LFxyXG5cdFx0ZnRyLnosXHJcblx0XHRidGwueCxcclxuXHRcdGJ0bC55LFxyXG5cdFx0YnRsLnosXHJcblx0XHRidGwueCxcclxuXHRcdGJ0bC55LFxyXG5cdFx0YnRsLnosXHJcblx0XHRmdHIueCxcclxuXHRcdGZ0ci55LFxyXG5cdFx0ZnRyLnosXHJcblx0XHRidHIueCxcclxuXHRcdGJ0ci55LFxyXG5cdFx0YnRyLnosXHJcblxyXG5cdFx0Ly8gYm90dG9tXHJcblx0XHRiYmwueCxcclxuXHRcdGJibC55LFxyXG5cdFx0YmJsLnosXHJcblx0XHRiYnIueCxcclxuXHRcdGJici55LFxyXG5cdFx0YmJyLnosXHJcblx0XHRmYmwueCxcclxuXHRcdGZibC55LFxyXG5cdFx0ZmJsLnosXHJcblx0XHRmYmwueCxcclxuXHRcdGZibC55LFxyXG5cdFx0ZmJsLnosXHJcblx0XHRiYnIueCxcclxuXHRcdGJici55LFxyXG5cdFx0YmJyLnosXHJcblx0XHRmYnIueCxcclxuXHRcdGZici55LFxyXG5cdFx0ZmJyLnpcclxuXHRdO1xyXG5cclxuXHRjb25zdCB1dnMgPSBbXHJcblx0XHQvLyBmcm9udFxyXG5cdFx0MCwgMCwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMSwgMSxcclxuXHJcblx0XHQvLyByaWdodFxyXG5cdFx0MCwgMCwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMSwgMSxcclxuXHJcblx0XHQvLyBiYWNrXHJcblx0XHQwLCAwLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxLCAxLFxyXG5cclxuXHRcdC8vIGxlZnRcclxuXHRcdDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDEsIDEsXHJcblxyXG5cdFx0Ly8gdG9wXHJcblx0XHQwLCAwLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxLCAxLFxyXG5cclxuXHRcdC8vIGJvdHRvbVxyXG5cdFx0MCwgMCwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMSwgMVxyXG5cdF07XHJcblxyXG5cdGNvbnN0IG5vcm1hbHMgPSBbXHJcblx0XHQvLyBmcm9udFxyXG5cdFx0MCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSxcclxuXHJcblx0XHQvLyByaWdodFxyXG5cdFx0MSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCxcclxuXHJcblx0XHQvLyBiYWNrXHJcblx0XHQwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xLFxyXG5cclxuXHRcdC8vIGxlZnRcclxuXHRcdC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsXHJcblxyXG5cdFx0Ly8gdG9wXHJcblx0XHQwLCAxLCAwLCAwLCAxLCAwLCAwLCAxLCAwLCAwLCAxLCAwLCAwLCAxLCAwLCAwLCAxLCAwLFxyXG5cclxuXHRcdC8vIGJvdHRvbVxyXG5cdFx0MCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMFxyXG5cdF07XHJcblx0cmV0dXJuIHtcclxuXHRcdHBvc2l0aW9uczogcG9zaXRpb25zLFxyXG5cdFx0bm9ybWFsczogbm9ybWFscyxcclxuXHRcdHV2czogdXZzXHJcblx0fTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNwaGVyZShvcHRpb25zKSB7XHJcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG5cdGNvbnN0IGxvbmdCYW5kcyA9IG9wdGlvbnMubG9uZ0JhbmRzIHx8IDMyO1xyXG5cdGNvbnN0IGxhdEJhbmRzID0gb3B0aW9ucy5sYXRCYW5kcyB8fCAzMjtcclxuXHRjb25zdCByYWRpdXMgPSBvcHRpb25zLnJhZGl1cyB8fCAxO1xyXG5cdGNvbnN0IGxhdF9zdGVwID0gTWF0aC5QSSAvIGxhdEJhbmRzO1xyXG5cdGNvbnN0IGxvbmdfc3RlcCA9ICgyICogTWF0aC5QSSkgLyBsb25nQmFuZHM7XHJcblx0Y29uc3QgbnVtX3Bvc2l0aW9ucyA9IGxvbmdCYW5kcyAqIGxhdEJhbmRzICogNDtcclxuXHRjb25zdCBudW1faW5kaWNlcyA9IGxvbmdCYW5kcyAqIGxhdEJhbmRzICogNjtcclxuXHRsZXQgbGF0X2FuZ2xlLCBsb25nX2FuZ2xlO1xyXG5cdGNvbnN0IHBvc2l0aW9ucyA9IG5ldyBBcnJheShudW1fcG9zaXRpb25zICogMyk7XHJcblx0Y29uc3Qgbm9ybWFscyA9IG5ldyBBcnJheShudW1fcG9zaXRpb25zICogMyk7XHJcblx0Y29uc3QgdXZzID0gbmV3IEFycmF5KG51bV9wb3NpdGlvbnMgKiAyKTtcclxuXHRjb25zdCBpbmRpY2VzID0gbmV3IEFycmF5KG51bV9pbmRpY2VzKTtcclxuXHRsZXQgeDEsIHgyLCB4MywgeDQsIHkxLCB5MiwgejEsIHoyLCB6MywgejQsIHUxLCB1MiwgdjEsIHYyO1xyXG5cdGxldCBpLCBqO1xyXG5cdGxldCBrID0gMCxcclxuXHRcdGwgPSAwO1xyXG5cdGxldCB2aSwgdGk7XHJcblxyXG5cdGZvciAoaSA9IDA7IGkgPCBsYXRCYW5kczsgaSsrKSB7XHJcblx0XHRsYXRfYW5nbGUgPSBpICogbGF0X3N0ZXA7XHJcblx0XHR5MSA9IE1hdGguY29zKGxhdF9hbmdsZSk7XHJcblx0XHR5MiA9IE1hdGguY29zKGxhdF9hbmdsZSArIGxhdF9zdGVwKTtcclxuXHRcdGZvciAoaiA9IDA7IGogPCBsb25nQmFuZHM7IGorKykge1xyXG5cdFx0XHRsb25nX2FuZ2xlID0gaiAqIGxvbmdfc3RlcDtcclxuXHRcdFx0eDEgPSBNYXRoLnNpbihsYXRfYW5nbGUpICogTWF0aC5jb3MobG9uZ19hbmdsZSk7XHJcblx0XHRcdHgyID0gTWF0aC5zaW4obGF0X2FuZ2xlKSAqIE1hdGguY29zKGxvbmdfYW5nbGUgKyBsb25nX3N0ZXApO1xyXG5cdFx0XHR4MyA9IE1hdGguc2luKGxhdF9hbmdsZSArIGxhdF9zdGVwKSAqIE1hdGguY29zKGxvbmdfYW5nbGUpO1xyXG5cdFx0XHR4NCA9IE1hdGguc2luKGxhdF9hbmdsZSArIGxhdF9zdGVwKSAqIE1hdGguY29zKGxvbmdfYW5nbGUgKyBsb25nX3N0ZXApO1xyXG5cdFx0XHR6MSA9IE1hdGguc2luKGxhdF9hbmdsZSkgKiBNYXRoLnNpbihsb25nX2FuZ2xlKTtcclxuXHRcdFx0ejIgPSBNYXRoLnNpbihsYXRfYW5nbGUpICogTWF0aC5zaW4obG9uZ19hbmdsZSArIGxvbmdfc3RlcCk7XHJcblx0XHRcdHozID0gTWF0aC5zaW4obGF0X2FuZ2xlICsgbGF0X3N0ZXApICogTWF0aC5zaW4obG9uZ19hbmdsZSk7XHJcblx0XHRcdHo0ID0gTWF0aC5zaW4obGF0X2FuZ2xlICsgbGF0X3N0ZXApICogTWF0aC5zaW4obG9uZ19hbmdsZSArIGxvbmdfc3RlcCk7XHJcblx0XHRcdHUxID0gMSAtIGogLyBsb25nQmFuZHM7XHJcblx0XHRcdHUyID0gMSAtIChqICsgMSkgLyBsb25nQmFuZHM7XHJcblx0XHRcdHYxID0gMSAtIGkgLyBsYXRCYW5kcztcclxuXHRcdFx0djIgPSAxIC0gKGkgKyAxKSAvIGxhdEJhbmRzO1xyXG5cdFx0XHR2aSA9IGsgKiAzO1xyXG5cdFx0XHR0aSA9IGsgKiAyO1xyXG5cclxuXHRcdFx0cG9zaXRpb25zW3ZpXSA9IHgxICogcmFkaXVzO1xyXG5cdFx0XHRwb3NpdGlvbnNbdmkgKyAxXSA9IHkxICogcmFkaXVzO1xyXG5cdFx0XHRwb3NpdGlvbnNbdmkgKyAyXSA9IHoxICogcmFkaXVzOyAvLyB2MFxyXG5cclxuXHRcdFx0cG9zaXRpb25zW3ZpICsgM10gPSB4MiAqIHJhZGl1cztcclxuXHRcdFx0cG9zaXRpb25zW3ZpICsgNF0gPSB5MSAqIHJhZGl1cztcclxuXHRcdFx0cG9zaXRpb25zW3ZpICsgNV0gPSB6MiAqIHJhZGl1czsgLy8gdjFcclxuXHJcblx0XHRcdHBvc2l0aW9uc1t2aSArIDZdID0geDMgKiByYWRpdXM7XHJcblx0XHRcdHBvc2l0aW9uc1t2aSArIDddID0geTIgKiByYWRpdXM7XHJcblx0XHRcdHBvc2l0aW9uc1t2aSArIDhdID0gejMgKiByYWRpdXM7IC8vIHYyXHJcblxyXG5cdFx0XHRwb3NpdGlvbnNbdmkgKyA5XSA9IHg0ICogcmFkaXVzO1xyXG5cdFx0XHRwb3NpdGlvbnNbdmkgKyAxMF0gPSB5MiAqIHJhZGl1cztcclxuXHRcdFx0cG9zaXRpb25zW3ZpICsgMTFdID0gejQgKiByYWRpdXM7IC8vIHYzXHJcblxyXG5cdFx0XHRub3JtYWxzW3ZpXSA9IHgxO1xyXG5cdFx0XHRub3JtYWxzW3ZpICsgMV0gPSB5MTtcclxuXHRcdFx0bm9ybWFsc1t2aSArIDJdID0gejE7XHJcblxyXG5cdFx0XHRub3JtYWxzW3ZpICsgM10gPSB4MjtcclxuXHRcdFx0bm9ybWFsc1t2aSArIDRdID0geTE7XHJcblx0XHRcdG5vcm1hbHNbdmkgKyA1XSA9IHoyO1xyXG5cclxuXHRcdFx0bm9ybWFsc1t2aSArIDZdID0geDM7XHJcblx0XHRcdG5vcm1hbHNbdmkgKyA3XSA9IHkyO1xyXG5cdFx0XHRub3JtYWxzW3ZpICsgOF0gPSB6MztcclxuXHJcblx0XHRcdG5vcm1hbHNbdmkgKyA5XSA9IHg0O1xyXG5cdFx0XHRub3JtYWxzW3ZpICsgMTBdID0geTI7XHJcblx0XHRcdG5vcm1hbHNbdmkgKyAxMV0gPSB6NDtcclxuXHJcblx0XHRcdHV2c1t0aV0gPSB1MTtcclxuXHRcdFx0dXZzW3RpICsgMV0gPSB2MTtcclxuXHJcblx0XHRcdHV2c1t0aSArIDJdID0gdTI7XHJcblx0XHRcdHV2c1t0aSArIDNdID0gdjE7XHJcblxyXG5cdFx0XHR1dnNbdGkgKyA0XSA9IHUxO1xyXG5cdFx0XHR1dnNbdGkgKyA1XSA9IHYyO1xyXG5cclxuXHRcdFx0dXZzW3RpICsgNl0gPSB1MjtcclxuXHRcdFx0dXZzW3RpICsgN10gPSB2MjtcclxuXHJcblx0XHRcdGluZGljZXNbbF0gPSBrO1xyXG5cdFx0XHRpbmRpY2VzW2wgKyAxXSA9IGsgKyAxO1xyXG5cdFx0XHRpbmRpY2VzW2wgKyAyXSA9IGsgKyAyO1xyXG5cdFx0XHRpbmRpY2VzW2wgKyAzXSA9IGsgKyAyO1xyXG5cdFx0XHRpbmRpY2VzW2wgKyA0XSA9IGsgKyAxO1xyXG5cdFx0XHRpbmRpY2VzW2wgKyA1XSA9IGsgKyAzO1xyXG5cclxuXHRcdFx0ayArPSA0O1xyXG5cdFx0XHRsICs9IDY7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4ge1xyXG5cdFx0cG9zaXRpb25zOiBwb3NpdGlvbnMsXHJcblx0XHRub3JtYWxzOiBub3JtYWxzLFxyXG5cdFx0dXZzOiB1dnMsXHJcblx0XHRpbmRpY2VzOiBpbmRpY2VzXHJcblx0fTtcclxufVxyXG4iLCJpbXBvcnQgeyBGbG9hdDMyQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcclxuaW1wb3J0IHsgY3JlYXRlU3BoZXJlIH0gZnJvbSBcIi4uL3V0aWxzL0dlb21ldHJ5VXRpbHNcIjtcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuL0dlb21ldHJ5XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTcGhlcmVHZW9tZXRyeSBleHRlbmRzIEdlb21ldHJ5IHtcclxuXHRyYWRpdXM6IG51bWJlcjtcclxuXHRjb25zdHJ1Y3RvcihyYWRpdXM6IG51bWJlcikge1xyXG5cdFx0c3VwZXIoe1xyXG5cdFx0XHR0eXBlOiBcInNwaGVyZUdlb21ldHJ5XCJcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5kZWZpbmVzID0ge1xyXG5cdFx0XHRIQVNfTk9STUFMOiB0cnVlXHJcblx0XHR9O1xyXG5cdFx0dGhpcy5yYWRpdXMgPSByYWRpdXM7XHJcblx0XHR0aGlzLmluaXQoKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBpbml0KCkge1xyXG5cdFx0Y29uc3QgeyBwb3NpdGlvbnMsIG5vcm1hbHMsIHV2cywgaW5kaWNlcyB9ID0gY3JlYXRlU3BoZXJlKHsgcmFkaXVzOiB0aGlzLnJhZGl1cyB9KTtcclxuXHRcdC8vIHRoaXMucG9zaXRpb25zID0gcG9zaXRpb25zO1xyXG5cdFx0Ly8gdGhpcy5ub3JtYWxzID0gbm9ybWFscztcclxuXHRcdC8vIHRoaXMudXZzID0gdXZzO1xyXG5cdFx0Ly8gdGhpcy5pbmRpY2VzID0gaW5kaWNlcztcclxuXHRcdHRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKHBvc2l0aW9ucyk7XHJcblx0XHR0aGlzLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcInBvc2l0aW9uXCIsIHBvc2l0aW9ucywgMykpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJub3JtYWxcIiwgbm9ybWFscywgMykpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJ1dlwiLCB1dnMsIDIpKTtcclxuXHJcblx0XHR0aGlzLnNldEluZGljZShpbmRpY2VzKTtcclxuXHRcdHRoaXMuY291bnQgPSBpbmRpY2VzLmxlbmd0aDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XHJcbmltcG9ydCB7IGNyZWF0ZUJveCB9IGZyb20gXCIuLi91dGlscy9HZW9tZXRyeVV0aWxzXCI7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tIFwiLi9HZW9tZXRyeVwiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb3hHZW9tZXRyeSBleHRlbmRzIEdlb21ldHJ5IHtcclxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgd2lkdGg6IG51bWJlciA9IDEwLCBwdWJsaWMgaGVpZ2h0OiBudW1iZXIgPSAxMCwgcHVibGljIGRlcHRoOiBudW1iZXIgPSAxMCkge1xyXG5cdFx0c3VwZXIoe1xyXG5cdFx0XHR0eXBlOiBcImJveEdlb21ldHJ5XCJcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5kZWZpbmVzID0ge1xyXG5cdFx0XHRIQVNfTk9STUFMOiB0cnVlXHJcblx0XHR9O1xyXG5cdFx0dGhpcy5pbml0KCk7XHJcblx0fVxyXG5cdHByaXZhdGUgaW5pdCgpIHtcclxuXHRcdC8vIGdlbmVyYXRlIHBvcyB1diBub3JtYWwgc28gb25cclxuXHRcdGNvbnN0IHsgcG9zaXRpb25zLCBub3JtYWxzLCB1dnMgfSA9IGNyZWF0ZUJveCh7XHJcblx0XHRcdGRpbWVuc2lvbnM6IFt0aGlzLmRlcHRoLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodF1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUocG9zaXRpb25zKTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwicG9zaXRpb25cIiwgcG9zaXRpb25zLCAzKSk7XHJcblx0XHR0aGlzLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcIm5vcm1hbFwiLCBub3JtYWxzLCAzKSk7XHJcblx0XHR0aGlzLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcInV2XCIsIHV2cywgMikpO1xyXG5cdFx0dGhpcy5jb3VudCA9IDM2O1xyXG5cdH1cclxuXHRwdWJsaWMgdXBkYXRlKGZyYW1lU3RhdGUpIHt9XHJcbn1cclxuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xyXG5pbXBvcnQgeyBGbG9hdDMyQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuL0dlb21ldHJ5XCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRvcnVzS25vdEdlb21ldHJ5IGV4dGVuZHMgR2VvbWV0cnkge1xyXG5cdHJhZGl1czogbnVtYmVyO1xyXG5cdHR1YmU6IG51bWJlcjtcclxuXHR0dWJ1bGFyU2VnbWVudHM6IG51bWJlcjtcclxuXHRyYWRpYWxTZWdtZW50czogbnVtYmVyO1xyXG5cdHA6IG51bWJlcjtcclxuXHRxOiBudW1iZXI7XHJcblx0Y29uc3RydWN0b3IocmFkaXVzID0gMSwgdHViZSA9IDAuNCwgdHVidWxhclNlZ21lbnRzID0gNjQsIHJhZGlhbFNlZ21lbnRzID0gOCwgcCA9IDIsIHEgPSAzKSB7XHJcblx0XHRzdXBlcih7XHJcblx0XHRcdHR5cGU6IFwidG9ydXNLbm90R2VvbWV0cnlcIlxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmRlZmluZXMgPSB7XHJcblx0XHRcdEhBU19OT1JNQUw6IHRydWVcclxuXHRcdH07XHJcblx0XHR0aGlzLnJhZGl1cyA9IHJhZGl1cztcclxuXHRcdHRoaXMudHViZSA9IHR1YmU7XHJcblx0XHR0aGlzLnR1YnVsYXJTZWdtZW50cyA9IHR1YnVsYXJTZWdtZW50cztcclxuXHRcdHRoaXMucmFkaWFsU2VnbWVudHMgPSByYWRpYWxTZWdtZW50cztcclxuXHRcdHRoaXMucCA9IHA7XHJcblx0XHR0aGlzLnEgPSBxO1xyXG5cdFx0dGhpcy5pbml0KCk7XHJcblx0fVxyXG5cdHB1YmxpYyB1cGRhdGUoZnJhbWVTdGF0ZSkge1xyXG5cdFx0Y29uc3QgeyBkZXZpY2UgfSA9IGZyYW1lU3RhdGUuY29udGV4dDtcclxuXHR9XHJcblx0cHJpdmF0ZSBpbml0KCkge1xyXG5cdFx0Y29uc3QgeyBub3JtYWxzLCB1dnMsIHBvc2l0aW9ucywgaW5kaWNlcyB9ID0gdGhpcy5jcmVhdGVHZW9tZXRyeSgpO1xyXG5cdFx0dGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUocG9zaXRpb25zKTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwicG9zaXRpb25cIiwgcG9zaXRpb25zLCAzKSk7XHJcblx0XHR0aGlzLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcIm5vcm1hbFwiLCBub3JtYWxzLCAzKSk7XHJcblx0XHR0aGlzLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcInV2XCIsIHV2cywgMikpO1xyXG5cdFx0dGhpcy5zZXRJbmRpY2UoaW5kaWNlcyk7XHJcblx0XHR0aGlzLmNvdW50ID0gaW5kaWNlcy5sZW5ndGg7XHJcblx0fVxyXG5cdHByaXZhdGUgY3JlYXRlR2VvbWV0cnkoKSB7XHJcblx0XHRjb25zdCBwb3NpdGlvbnMgPSBbXSxcclxuXHRcdFx0bm9ybWFscyA9IFtdLFxyXG5cdFx0XHR1dnMgPSBbXSxcclxuXHRcdFx0aW5kaWNlcyA9IFtdO1xyXG5cdFx0Y29uc3QgdHVidWxhclNlZ21lbnRzID0gTWF0aC5mbG9vcih0aGlzLnR1YnVsYXJTZWdtZW50cyk7XHJcblx0XHRjb25zdCByYWRpYWxTZWdtZW50cyA9IE1hdGguZmxvb3IodGhpcy5yYWRpYWxTZWdtZW50cyk7XHJcblx0XHQvLyBoZWxwZXIgdmFyaWFibGVzXHJcblxyXG5cdFx0Y29uc3QgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdGNvbnN0IG5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG5cdFx0Y29uc3QgUDEgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0Y29uc3QgUDIgPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuXHRcdGNvbnN0IEIgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0Y29uc3QgVCA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHRjb25zdCBOID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcblx0XHQvLyBnZW5lcmF0ZSB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdXZzXHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPD0gdHVidWxhclNlZ21lbnRzOyArK2kpIHtcclxuXHRcdFx0Ly8gdGhlIHJhZGlhbiBcInVcIiBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgcG9zaXRpb24gb24gdGhlIHRvcnVzIGN1cnZlIG9mIHRoZSBjdXJyZW50IHR1YnVsYXIgc2VnbWVudFxyXG5cclxuXHRcdFx0Y29uc3QgdSA9IChpIC8gdHVidWxhclNlZ21lbnRzKSAqIHRoaXMucCAqIE1hdGguUEkgKiAyO1xyXG5cclxuXHRcdFx0Ly8gbm93IHdlIGNhbGN1bGF0ZSB0d28gcG9pbnRzLiBQMSBpcyBvdXIgY3VycmVudCBwb3NpdGlvbiBvbiB0aGUgY3VydmUsIFAyIGlzIGEgbGl0dGxlIGZhcnRoZXIgYWhlYWQuXHJcblx0XHRcdC8vIHRoZXNlIHBvaW50cyBhcmUgdXNlZCB0byBjcmVhdGUgYSBzcGVjaWFsIFwiY29vcmRpbmF0ZSBzcGFjZVwiLCB3aGljaCBpcyBuZWNlc3NhcnkgdG8gY2FsY3VsYXRlIHRoZSBjb3JyZWN0IHZlcnRleCBwb3NpdGlvbnNcclxuXHJcblx0XHRcdGNhbGN1bGF0ZVBvc2l0aW9uT25DdXJ2ZSh1LCB0aGlzLnAsIHRoaXMucSwgdGhpcy5yYWRpdXMsIFAxKTtcclxuXHRcdFx0Y2FsY3VsYXRlUG9zaXRpb25PbkN1cnZlKHUgKyAwLjAxLCB0aGlzLnAsIHRoaXMucSwgdGhpcy5yYWRpdXMsIFAyKTtcclxuXHJcblx0XHRcdC8vIGNhbGN1bGF0ZSBvcnRob25vcm1hbCBiYXNpc1xyXG5cclxuXHRcdFx0VmVjdG9yMy5zdWJ0cmFjdChQMiwgUDEsIFQpO1xyXG5cdFx0XHQvLyBULnN1YlZlY3RvcnMoIFAyLCBQMSApO1xyXG5cdFx0XHRWZWN0b3IzLmFkZChQMiwgUDEsIE4pO1xyXG5cdFx0XHQvLyBOLmFkZFZlY3RvcnMoIFAyLCBQMSApO1xyXG5cdFx0XHRWZWN0b3IzLmNyb3NzKFQsIE4sIEIpO1xyXG5cdFx0XHQvLyBCLmNyb3NzVmVjdG9ycyggVCwgTiApO1xyXG5cdFx0XHRWZWN0b3IzLmNyb3NzKEIsIFQsIE4pO1xyXG5cdFx0XHQvLyBOLmNyb3NzVmVjdG9ycyggQiwgVCApO1xyXG5cclxuXHRcdFx0Ly8gbm9ybWFsaXplIEIsIE4uIFQgY2FuIGJlIGlnbm9yZWQsIHdlIGRvbid0IHVzZSBpdFxyXG5cclxuXHRcdFx0Qi5ub3JtYWxpemUoKTtcclxuXHRcdFx0Ti5ub3JtYWxpemUoKTtcclxuXHJcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDw9IHJhZGlhbFNlZ21lbnRzOyArK2opIHtcclxuXHRcdFx0XHQvLyBub3cgY2FsY3VsYXRlIHRoZSB2ZXJ0aWNlcy4gdGhleSBhcmUgbm90aGluZyBtb3JlIHRoYW4gYW4gZXh0cnVzaW9uIG9mIHRoZSB0b3J1cyBjdXJ2ZS5cclxuXHRcdFx0XHQvLyBiZWNhdXNlIHdlIGV4dHJ1ZGUgYSBzaGFwZSBpbiB0aGUgeHktcGxhbmUsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsY3VsYXRlIGEgei12YWx1ZS5cclxuXHJcblx0XHRcdFx0Y29uc3QgdiA9IChqIC8gcmFkaWFsU2VnbWVudHMpICogTWF0aC5QSSAqIDI7XHJcblx0XHRcdFx0Y29uc3QgY3ggPSAtdGhpcy50dWJlICogTWF0aC5jb3Modik7XHJcblx0XHRcdFx0Y29uc3QgY3kgPSB0aGlzLnR1YmUgKiBNYXRoLnNpbih2KTtcclxuXHJcblx0XHRcdFx0Ly8gbm93IGNhbGN1bGF0ZSB0aGUgZmluYWwgdmVydGV4IHBvc2l0aW9uLlxyXG5cdFx0XHRcdC8vIGZpcnN0IHdlIG9yaWVudCB0aGUgZXh0cnVzaW9uIHdpdGggb3VyIGJhc2lzIHZlY3RvcnMsIHRoZW4gd2UgYWRkIGl0IHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9uIHRoZSBjdXJ2ZVxyXG5cclxuXHRcdFx0XHR2ZXJ0ZXgueCA9IFAxLnggKyAoY3ggKiBOLnggKyBjeSAqIEIueCk7XHJcblx0XHRcdFx0dmVydGV4LnkgPSBQMS55ICsgKGN4ICogTi55ICsgY3kgKiBCLnkpO1xyXG5cdFx0XHRcdHZlcnRleC56ID0gUDEueiArIChjeCAqIE4ueiArIGN5ICogQi56KTtcclxuXHJcblx0XHRcdFx0cG9zaXRpb25zLnB1c2godmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueik7XHJcblxyXG5cdFx0XHRcdC8vIG5vcm1hbCAoUDEgaXMgYWx3YXlzIHRoZSBjZW50ZXIvb3JpZ2luIG9mIHRoZSBleHRydXNpb24sIHRodXMgd2UgY2FuIHVzZSBpdCB0byBjYWxjdWxhdGUgdGhlIG5vcm1hbClcclxuXHRcdFx0XHRWZWN0b3IzLnN1YnRyYWN0KHZlcnRleCwgUDEsIG5vcm1hbCk7XHJcblx0XHRcdFx0bm9ybWFsLm5vcm1hbGl6ZSgpO1xyXG5cclxuXHRcdFx0XHRub3JtYWxzLnB1c2gobm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueik7XHJcblxyXG5cdFx0XHRcdC8vIHV2XHJcblxyXG5cdFx0XHRcdHV2cy5wdXNoKGkgLyB0dWJ1bGFyU2VnbWVudHMpO1xyXG5cdFx0XHRcdHV2cy5wdXNoKGogLyByYWRpYWxTZWdtZW50cyk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBnZW5lcmF0ZSBpbmRpY2VzXHJcblxyXG5cdFx0Zm9yIChsZXQgaiA9IDE7IGogPD0gdHVidWxhclNlZ21lbnRzOyBqKyspIHtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gcmFkaWFsU2VnbWVudHM7IGkrKykge1xyXG5cdFx0XHRcdC8vIGluZGljZXNcclxuXHJcblx0XHRcdFx0Y29uc3QgYSA9IChyYWRpYWxTZWdtZW50cyArIDEpICogKGogLSAxKSArIChpIC0gMSk7XHJcblx0XHRcdFx0Y29uc3QgYiA9IChyYWRpYWxTZWdtZW50cyArIDEpICogaiArIChpIC0gMSk7XHJcblx0XHRcdFx0Y29uc3QgYyA9IChyYWRpYWxTZWdtZW50cyArIDEpICogaiArIGk7XHJcblx0XHRcdFx0Y29uc3QgZCA9IChyYWRpYWxTZWdtZW50cyArIDEpICogKGogLSAxKSArIGk7XHJcblxyXG5cdFx0XHRcdC8vIGZhY2VzXHJcblxyXG5cdFx0XHRcdGluZGljZXMucHVzaChhLCBiLCBkKTtcclxuXHRcdFx0XHRpbmRpY2VzLnB1c2goYiwgYywgZCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdG5vcm1hbHMsXHJcblx0XHRcdHV2cyxcclxuXHRcdFx0cG9zaXRpb25zLFxyXG5cdFx0XHRpbmRpY2VzXHJcblx0XHR9O1xyXG5cdH1cclxufVxyXG5mdW5jdGlvbiBjYWxjdWxhdGVQb3NpdGlvbk9uQ3VydmUodSwgcCwgcSwgcmFkaXVzLCBwb3NpdGlvbikge1xyXG5cdGNvbnN0IGN1ID0gTWF0aC5jb3ModSk7XHJcblx0Y29uc3Qgc3UgPSBNYXRoLnNpbih1KTtcclxuXHRjb25zdCBxdU92ZXJQID0gKHEgLyBwKSAqIHU7XHJcblx0Y29uc3QgY3MgPSBNYXRoLmNvcyhxdU92ZXJQKTtcclxuXHJcblx0cG9zaXRpb24ueCA9IHJhZGl1cyAqICgyICsgY3MpICogMC41ICogY3U7XHJcblx0cG9zaXRpb24ueSA9IHJhZGl1cyAqICgyICsgY3MpICogc3UgKiAwLjU7XHJcblx0cG9zaXRpb24ueiA9IHJhZGl1cyAqIE1hdGguc2luKHF1T3ZlclApICogMC41O1xyXG59XHJcbiIsImltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XHJcbmltcG9ydCB0ZXh0dXJlQ2FjaGUgZnJvbSBcIi4uL2NvcmUvVGV4dHVyZUNhY2hlXCI7XHJcbmltcG9ydCBDb2xvciBmcm9tIFwiLi4vbWF0aC9Db2xvclwiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xyXG5pbXBvcnQgU2FtcGxlciBmcm9tIFwiLi4vcmVuZGVyL1NhbXBsZXJcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcbmltcG9ydCBVbmlmb3JtQnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybUJ1ZmZlclwiO1xyXG5pbXBvcnQgeyBVbmlmb3JtRW51bSB9IGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybXNcIjtcclxuaW1wb3J0IHsgU2hhZGVyU291cmNlIH0gZnJvbSBcIi4uL3NoYWRlci9TaGFkZXJTb3VyY2VcIjtcclxuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi9NYXRlcmlhbFwiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCbGlublBob25nTWF0ZXJpYWwgZXh0ZW5kcyBNYXRlcmlhbCB7XHJcblx0cHVibGljIHNwZWN1bGFyOiBDb2xvcjtcclxuXHRwdWJsaWMgc2hpbmluZXNzOiBudW1iZXI7XHJcblx0cHVibGljIG5vcm1hbFRleHR1cmU6IFRleHR1cmU7XHJcblx0cHVibGljIG5vcm1hbFNhbXBsZXI6IFNhbXBsZXI7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0dGhpcy50eXBlID0gXCJwaG9uZ1wiO1xyXG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvcigxLjAsIDAuMCwgMC4wKTtcclxuXHRcdHRoaXMuc2hhZGVyU291cmNlID0gbmV3IFNoYWRlclNvdXJjZSh7XHJcblx0XHRcdHR5cGU6IHRoaXMudHlwZSxcclxuXHRcdFx0cmVuZGVyOiB0cnVlLFxyXG5cdFx0XHRkZWZpbmVzOiB7XHJcblx0XHRcdFx0bWF0ZXJpYWxQaG9uZzogdHJ1ZVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMubGlnaHQgPSB0cnVlO1xyXG5cdFx0dGhpcy5zcGVjdWxhciA9IG5ldyBDb2xvcigxLjAsIDEuMCwgMS4wKTtcclxuXHRcdHRoaXMuc2hpbmluZXNzID0gMzAuMDtcclxuXHRcdHRoaXMuYmFzZVRleHR1cmUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLmJhc2VTYW1wbGVyID0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHR1cGRhdGUoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSwgbWVzaDogTWVzaCkge1xyXG5cdFx0aWYgKCF0aGlzLnNoYWRlckRhdGEgfHwgdGhpcy5kaXJ0eSkgdGhpcy5jcmVhdGVTaGFkZXJEYXRhKG1lc2gpO1xyXG5cdH1cclxuXHRwcm90ZWN0ZWQgY3JlYXRlU2hhZGVyRGF0YShtZXNoPzogTWVzaCkge1xyXG5cdFx0c3VwZXIuY3JlYXRlU2hhZGVyRGF0YShtZXNoKTtcclxuXHRcdGNvbnN0IHVuaWZvcm1CdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7IGxhYmVsOiBcInBob25nXCIgfSk7XHJcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFwibW9kZWxNYXRyaXhcIixcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0XHJcblx0XHQpO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwiY29sb3JcIiwgdGhpcywgVW5pZm9ybUVudW0uQ29sb3IpO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwib3BhY2l0eVwiLCB0aGlzLCBVbmlmb3JtRW51bS5GbG9hdCk7XHJcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFwibm9ybWFsTXRyaXhcIixcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBtZXNoLm5vcm1hbE1hdHJpeDtcclxuXHRcdFx0fSxcclxuXHRcdFx0VW5pZm9ybUVudW0uTWF0NFxyXG5cdFx0KTtcclxuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcImVtaXNzaXZlXCIsIHRoaXMsIFVuaWZvcm1FbnVtLkNvbG9yKTtcclxuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcInNoaW5pbmVzc1wiLCB0aGlzLCBVbmlmb3JtRW51bS5GbG9hdCk7XHJcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXCJzcGVjdWxhclwiLCB0aGlzLCBVbmlmb3JtRW51bS5Db2xvcik7XHJcblx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcihcInBob25nXCIsIHVuaWZvcm1CdWZmZXIpO1xyXG5cdFx0aWYgKHRoaXMuYmFzZVRleHR1cmUpIHtcclxuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldERlZmluZShcIlVTRV9DT0xPUlRFWFRVUkVcIiwgdHJ1ZSk7XHJcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRUZXh0dXJlKFwiYmFzZUNvbG9yVGV4dHVyZVwiLCB0aGlzLmJhc2VUZXh0dXJlKTtcclxuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFNhbXBsZXIoXCJiYXNlQ29sb3JTYW1wbGVyXCIsIHRoaXMuYmFzZVNhbXBsZXIgfHwgdGV4dHVyZUNhY2hlLmRlZmF1bHRTYW1wbGVyKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLm5vcm1hbFRleHR1cmUpIHtcclxuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldERlZmluZShcIlVTRV9OT1JNQUxURVhUVVJFXCIsIHRydWUpO1xyXG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VGV4dHVyZShcIm5vcm1hbFRleHR1cmVcIiwgdGhpcy5ub3JtYWxUZXh0dXJlKTtcclxuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFNhbXBsZXIoXCJub3JtYWxTYW1wbGVyXCIsIHRoaXMubm9ybWFsU2FtcGxlciB8fCB0ZXh0dXJlQ2FjaGUuZGVmYXVsdFNhbXBsZXIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRkZXN0cm95KCkge1xyXG5cdFx0dGhpcz8uYmFzZVRleHR1cmU/LmRlc3Ryb3koKTtcclxuXHRcdHN1cGVyLmRlc3Ryb3koKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0ZyYW1lU3RhdGVcIjtcbmltcG9ydCB0ZXh0dXJlQ2FjaGUgZnJvbSBcIi4uL2NvcmUvVGV4dHVyZUNhY2hlXCI7XG5pbXBvcnQgeyBDdWxsTW9kZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XG5pbXBvcnQgVmVjdG9yMiBmcm9tIFwiLi4vbWF0aC9WZWN0b3IyXCI7XG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xuaW1wb3J0IFNhbXBsZXIgZnJvbSBcIi4uL3JlbmRlci9TYW1wbGVyXCI7XG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcbmltcG9ydCBVbmlmb3JtQnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybUJ1ZmZlclwiO1xuaW1wb3J0IHsgVW5pZm9ybUVudW0gfSBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1zXCI7XG5pbXBvcnQgeyBTaGFkZXJTb3VyY2UgfSBmcm9tIFwiLi4vc2hhZGVyL1NoYWRlclNvdXJjZVwiO1xuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi9NYXRlcmlhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYnJNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblx0cHVibGljIHNwZWN1bGFyRW52VGV4dHVyZTogVGV4dHVyZTtcblxuXHRwdWJsaWMgc3BlY3VsYXJFbnZTYW1wbGVyOiBTYW1wbGVyO1xuXG5cdHB1YmxpYyBlbWlzc2l2ZVRleHR1cmU6IFRleHR1cmU7XG5cblx0cHVibGljIGVtaXNzaXZlU2FtcGxlcjogU2FtcGxlcjtcblxuXHRwdWJsaWMgbm9ybWFsVGV4dHVyZTogVGV4dHVyZTtcblxuXHRwdWJsaWMgbm9ybWFsU2FtcGxlcjogU2FtcGxlcjtcblxuXHRwdWJsaWMgYW9UZXh0dXJlOiBUZXh0dXJlO1xuXG5cdHB1YmxpYyBhb1NhbXBsZXI6IFNhbXBsZXI7XG5cblx0cHVibGljIG1ldGFsbmVzc1JvdWdobmVzc1RleHR1cmU6IFRleHR1cmU7XG5cblx0cHVibGljIG1ldGFsbmVzc1JvdWdobmVzc1NhbXBsZXI6IFNhbXBsZXI7XG5cblx0cHJpdmF0ZSBfcm91Z2huZXNzOiBudW1iZXI7XG5cblx0cHJpdmF0ZSBfbWV0YWxuZXNzOiBudW1iZXI7XG5cblx0cHJpdmF0ZSBfYW9UZXh0dXJlSW50ZW5zaXR5OiBudW1iZXI7XG5cblx0cHJpdmF0ZSBfbm9ybWFsU2NhbGU6IFZlY3RvcjI7XG5cblx0cHJpdmF0ZSBfSUJMUmVuZGVyOiBib29sZWFuO1xuXG5cdHB1YmxpYyBnZXQgcm91Z2huZXNzKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMuX3JvdWdobmVzcztcblx0fVxuXHRwdWJsaWMgc2V0IHJvdWdobmVzcyh2YWx1ZSkge1xuXHRcdHRoaXMuX3JvdWdobmVzcyA9IHZhbHVlO1xuXHR9XG5cdHB1YmxpYyBnZXQgbWV0YWxuZXNzKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMuX21ldGFsbmVzcztcblx0fVxuXHRwdWJsaWMgc2V0IG1ldGFsbmVzcyh2OiBudW1iZXIpIHtcblx0XHR0aGlzLl9tZXRhbG5lc3MgPSB2O1xuXHR9XG5cdHB1YmxpYyBnZXQgYW9UZXh0dXJlSW50ZW5zaXR5KCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMuX2FvVGV4dHVyZUludGVuc2l0eTtcblx0fVxuXHRwdWJsaWMgc2V0IGFvVGV4dHVyZUludGVuc2l0eSh2OiBudW1iZXIpIHtcblx0XHR0aGlzLl9hb1RleHR1cmVJbnRlbnNpdHkgPSB2O1xuXHR9XG5cdHB1YmxpYyBnZXQgbm9ybWFsU2NhbGUoKTogVmVjdG9yMiB7XG5cdFx0aWYgKHRoaXMucmVuZGVyU3RhdGUgJiYgdGhpcy5yZW5kZXJTdGF0ZS5wcmltaXRpdmUpIHtcblx0XHRcdGlmICh0aGlzLnJlbmRlclN0YXRlLnByaW1pdGl2ZS5jdWxsTW9kZSA9PSBDdWxsTW9kZS5CYWNrKSB7XG5cdFx0XHRcdHJldHVybiBWZWN0b3IyLm5lZ2F0ZSh0aGlzLl9ub3JtYWxTY2FsZSwgbmV3IFZlY3RvcjIoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9ub3JtYWxTY2FsZTtcblx0fVxuXHRwdWJsaWMgc2V0IG5vcm1hbFNjYWxlKHY6IFZlY3RvcjIpIHtcblx0XHR0aGlzLl9ub3JtYWxTY2FsZSA9IHY7XG5cdH1cblx0cHVibGljIHNldCBJQkxSZW5kZXIodmFsdWUpIHtcblx0XHR0aGlzLl9JQkxSZW5kZXIgPSB2YWx1ZTtcblx0XHR0aGlzLnNoYWRlclNvdXJjZS5zZXREZWZpbmVzKHtcblx0XHRcdFVTRV9JQkw6IHRoaXMuX0lCTFJlbmRlclxuXHRcdH0pO1xuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xuXHR9XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gXCJwYnJfbWF0XCI7XG5cblx0XHR0aGlzLl9yb3VnaG5lc3MgPSAwLjE7XG5cblx0XHR0aGlzLl9tZXRhbG5lc3MgPSAwLjE7XG5cblx0XHR0aGlzLl9hb1RleHR1cmVJbnRlbnNpdHkgPSAxLjA7XG5cdFx0dGhpcy5saWdodCA9IHRydWU7XG5cdFx0dGhpcy5fbm9ybWFsU2NhbGUgPSBuZXcgVmVjdG9yMigxLCAxKTtcblx0XHR0aGlzLl9JQkxSZW5kZXIgPSB0cnVlO1xuXHRcdHRoaXMuc2hhZGVyU291cmNlID0gbmV3IFNoYWRlclNvdXJjZSh7XG5cdFx0XHR0eXBlOiB0aGlzLnR5cGUsXG5cdFx0XHRyZW5kZXI6IHRydWUsXG5cdFx0XHRkZWZpbmVzOiB7XG5cdFx0XHRcdG1hdGVyaWFsUGJyOiB0cnVlLFxuXHRcdFx0XHRVU0VfSUJMOiB0aGlzLl9JQkxSZW5kZXJcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHR1cGRhdGUoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSwgbWVzaDogTWVzaCkge1xuXHRcdGlmICghdGV4dHVyZUNhY2hlLmdldFRleHR1cmUoXCJzcGVjdWxhclwiKSkgcmV0dXJuO1xuXHRcdGlmICghdGhpcy5zaGFkZXJEYXRhIHx8IHRoaXMuZGlydHkpIHtcblx0XHRcdHRoaXMuY3JlYXRlU2hhZGVyRGF0YShtZXNoLCBmcmFtZVN0YXRlKTtcblx0XHR9XG5cdH1cblx0cHJvdGVjdGVkIGNyZWF0ZVNoYWRlckRhdGEobWVzaDogTWVzaCwgZnJhbWVTdGF0ZT86IEZyYW1lU3RhdGUpIHtcblx0XHRzdXBlci5jcmVhdGVTaGFkZXJEYXRhKG1lc2gpO1xuXHRcdGNvbnN0IHVuaWZvcm1CdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7IGxhYmVsOiBcInBiclwiIH0pO1xuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFwibW9kZWxNYXRyaXhcIixcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1lc2gubW9kZWxNYXRyaXg7XG5cdFx0XHR9LFxuXHRcdFx0VW5pZm9ybUVudW0uTWF0NFxuXHRcdCk7XG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwiY29sb3JcIiwgdGhpcywgVW5pZm9ybUVudW0uQ29sb3IpO1xuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcIm9wYWNpdHlcIiwgdGhpcywgVW5pZm9ybUVudW0uRmxvYXQpO1xuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFwibm9ybWFsTXRyaXhcIixcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1lc2gubm9ybWFsTWF0cml4O1xuXHRcdFx0fSxcblx0XHRcdFVuaWZvcm1FbnVtLk1hdDRcblx0XHQpO1xuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcImVtaXNzaXZlXCIsIHRoaXMsIFVuaWZvcm1FbnVtLkNvbG9yKTtcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXCJtZXRhbG5lc3NcIiwgdGhpcywgVW5pZm9ybUVudW0uRmxvYXQpO1xuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcInJvdWdobmVzc1wiLCB0aGlzLCBVbmlmb3JtRW51bS5GbG9hdCk7XG5cdFx0dGhpcy5zaGFkZXJEYXRhLnNldFVuaWZvcm1CdWZmZXIoXCJwYnJcIiwgdW5pZm9ybUJ1ZmZlcik7XG5cdFx0dGhpcy5zcGVjdWxhckVudlRleHR1cmUgPSB0ZXh0dXJlQ2FjaGUuZ2V0VGV4dHVyZShcInNwZWN1bGFyXCIpO1xuXHRcdGlmICh0aGlzLmJhc2VUZXh0dXJlKSB7XG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0RGVmaW5lKFwiVVNFX1RFWFRVUkVcIiwgdHJ1ZSk7XG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VGV4dHVyZShcImJhc2VDb2xvclRleHR1cmVcIiwgdGhpcy5iYXNlVGV4dHVyZSk7XG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0U2FtcGxlcihcImJhc2VDb2xvclNhbXBsZXJcIiwgdGhpcy5iYXNlU2FtcGxlciB8fCB0ZXh0dXJlQ2FjaGUuZGVmYXVsdFNhbXBsZXIpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5tZXRhbG5lc3NSb3VnaG5lc3NUZXh0dXJlKSB7XG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0RGVmaW5lKFwiVVNFX01FVEFMTkVTU1RFWFRVUkVcIiwgdHJ1ZSk7XG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VGV4dHVyZShcIm1ldGFsbmVzc1JvdWdobmVzc1RleHR1cmVcIiwgdGhpcy5tZXRhbG5lc3NSb3VnaG5lc3NUZXh0dXJlKTtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRTYW1wbGVyKFxuXHRcdFx0XHRcIm1ldGFsbmVzc1JvdWdobmVzc1NhbXBsZXJcIixcblx0XHRcdFx0dGhpcy5tZXRhbG5lc3NSb3VnaG5lc3NTYW1wbGVyIHx8IHRleHR1cmVDYWNoZS5kZWZhdWx0U2FtcGxlclxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMubm9ybWFsVGV4dHVyZSkge1xuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwibm9ybWFsU2NhbGVcIiwgdGhpcywgVW5pZm9ybUVudW0uRmxvYXRWZWMyKTtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXREZWZpbmUoXCJVU0VfTk9STUFMVEVYVFVSRVwiLCB0cnVlKTtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRUZXh0dXJlKFwibm9ybWFsVGV4dHVyZVwiLCB0aGlzLm5vcm1hbFRleHR1cmUpO1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFNhbXBsZXIoXCJub3JtYWxTYW1wbGVyXCIsIHRoaXMubm9ybWFsU2FtcGxlciB8fCB0ZXh0dXJlQ2FjaGUuZGVmYXVsdFNhbXBsZXIpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5hb1RleHR1cmUpIHtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXREZWZpbmUoXCJVU0VfQU9URVhUVVJFXCIsIHRydWUpO1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFRleHR1cmUoXCJhb1RleHR1cmVcIiwgdGhpcy5hb1RleHR1cmUpO1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFNhbXBsZXIoXCJhb1NhbXBsZXJcIiwgdGhpcy5hb1NhbXBsZXIgfHwgdGV4dHVyZUNhY2hlLmRlZmF1bHRTYW1wbGVyKTtcblx0XHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcImFvVGV4dHVyZUludGVuc2l0eVwiLCB0aGlzLCBVbmlmb3JtRW51bS5GbG9hdCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmVtaXNzaXZlVGV4dHVyZSkge1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldERlZmluZShcIlVTRV9FTUlTU0lWRVRFWFRVUkVcIiwgdHJ1ZSk7XG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VGV4dHVyZShcImVtaXNzaXZlVGV4dHVyZVwiLCB0aGlzLmVtaXNzaXZlVGV4dHVyZSk7XG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0U2FtcGxlcihcImVtaXNzaXZlU2FtcGxlclwiLCB0aGlzLmVtaXNzaXZlU2FtcGxlciB8fCB0ZXh0dXJlQ2FjaGUuZGVmYXVsdFNhbXBsZXIpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5zcGVjdWxhckVudlRleHR1cmUgJiYgdGhpcy5fSUJMUmVuZGVyKSB7XG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VGV4dHVyZShcInNwZWN1bGFyRW52VGV4dHVyZVwiLCB0aGlzLnNwZWN1bGFyRW52VGV4dHVyZSk7XG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0U2FtcGxlcihcInNwZWN1bGFyRW52U2FtcGxlclwiLCB0aGlzLnNwZWN1bGFyRW52U2FtcGxlciB8fCB0ZXh0dXJlQ2FjaGUuZGVmYXVsdFNhbXBsZXIpO1xuXHRcdH1cblx0fVxuXHRkZXN0cm95KCkge1xuXHRcdHRoaXM/LmFvVGV4dHVyZT8uZGVzdHJveSgpO1xuXHRcdHRoaXM/LmJhc2VUZXh0dXJlPy5kZXN0cm95KCk7XG5cdFx0dGhpcz8uZW1pc3NpdmVUZXh0dXJlPy5kZXN0cm95KCk7XG5cdFx0dGhpcz8ubm9ybWFsVGV4dHVyZT8uZGVzdHJveSgpO1xuXHRcdHRoaXMuc3BlY3VsYXJFbnZUZXh0dXJlID0gdW5kZWZpbmVkO1xuXHR9XG59XG4iLCJleHBvcnQgY2xhc3MgRXZlbnREaXNwYXRjaGVyIHtcclxuXHRwcml2YXRlIF9saXN0ZW5lcnM6IG9iamVjdDtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHRoaXMuX2xpc3RlbmVycyA9IHt9O1xyXG5cdH1cclxuXHJcblx0YWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xyXG5cdFx0aWYgKHRoaXMuX2xpc3RlbmVycyA9PT0gdW5kZWZpbmVkKSB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcclxuXHJcblx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnM7XHJcblxyXG5cdFx0aWYgKGxpc3RlbmVyc1t0eXBlXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGxpc3RlbmVyc1t0eXBlXSA9IFtdO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChsaXN0ZW5lcnNbdHlwZV0uaW5kZXhPZihsaXN0ZW5lcikgPT09IC0xKSB7XHJcblx0XHRcdGxpc3RlbmVyc1t0eXBlXS5wdXNoKGxpc3RlbmVyKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGhhc0V2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcclxuXHRcdGlmICh0aGlzLl9saXN0ZW5lcnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycztcclxuXHJcblx0XHRyZXR1cm4gbGlzdGVuZXJzW3R5cGVdICE9PSB1bmRlZmluZWQgJiYgbGlzdGVuZXJzW3R5cGVdLmluZGV4T2YobGlzdGVuZXIpICE9PSAtMTtcclxuXHR9XHJcblxyXG5cdHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcclxuXHRcdGlmICh0aGlzLl9saXN0ZW5lcnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycztcclxuXHRcdGNvbnN0IGxpc3RlbmVyQXJyYXkgPSBsaXN0ZW5lcnNbdHlwZV07XHJcblxyXG5cdFx0aWYgKGxpc3RlbmVyQXJyYXkgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb25zdCBpbmRleCA9IGxpc3RlbmVyQXJyYXkuaW5kZXhPZihsaXN0ZW5lcik7XHJcblxyXG5cdFx0XHRpZiAoaW5kZXggIT09IC0xKSB7XHJcblx0XHRcdFx0bGlzdGVuZXJBcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRkaXNwYXRjaEV2ZW50KGV2ZW50KSB7XHJcblx0XHRpZiAodGhpcy5fbGlzdGVuZXJzID09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnM7XHJcblx0XHRjb25zdCBsaXN0ZW5lckFycmF5ID0gbGlzdGVuZXJzW2V2ZW50LnR5cGVdO1xyXG5cclxuXHRcdGlmIChsaXN0ZW5lckFycmF5ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gdGhpcztcclxuXHJcblx0XHRcdGNvbnN0IGFycmF5ID0gbGlzdGVuZXJBcnJheS5zbGljZSgwKTtcclxuXHJcblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHRcdFx0YXJyYXlbaV0uY2FsbCh0aGlzLCBldmVudCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vY2FtZXJhL0NhbWVyYVwiO1xyXG5pbXBvcnQgeyBDb21wdXRlIH0gZnJvbSBcIi4uL2NvbXB1dGUvQ29tcHV0ZVwiO1xyXG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCIuLi9tYXRlcmlhbC9NYXRlcmlhbFwiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xyXG5pbXBvcnQgeyBDb21wdXRlQ29tbWFuZCB9IGZyb20gXCIuLi9yZW5kZXIvQ29tcHV0ZUNvbW1hbmRcIjtcclxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL3JlbmRlci9Db250ZXh0XCI7XHJcbmltcG9ydCBEcmF3Q29tbWFuZCBmcm9tIFwiLi4vcmVuZGVyL0RyYXdDb21tYW5kXCI7XHJcbmltcG9ydCBMaWdodE1hbmdlciBmcm9tIFwiLi9MaWdodE1hbmdlclwiO1xyXG5pbXBvcnQgeyBDb21tYW5kU3ViVHlwZSB9IGZyb20gXCIuL1dlYkdQVUNvbnN0YW50XCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlbmRlclF1ZXVlIHtcclxuXHRwdWJsaWMgcHJlOiBBcnJheTxNZXNoPjtcclxuXHRwdWJsaWMgb3BhcXVlOiBBcnJheTxNZXNoPjtcclxuXHRwdWJsaWMgdHJhbnNwYXJlbnQ6IEFycmF5PE1lc2g+O1xyXG5cdHB1YmxpYyBkZWJ1Z1F1ZXVlOiBBcnJheTxNZXNoPjtcclxuXHRwdWJsaWMgY29tcHV0ZXM6IEFycmF5PENvbXB1dGU+O1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0dGhpcy5wcmUgPSBbXTtcclxuXHRcdHRoaXMub3BhcXVlID0gW107XHJcblx0XHR0aGlzLnRyYW5zcGFyZW50ID0gW107XHJcblx0XHR0aGlzLmNvbXB1dGVzID0gW107XHJcblx0XHR0aGlzLmRlYnVnUXVldWUgPSBbXTtcclxuXHR9XHJcblx0c29ydCgpIHtcclxuXHRcdFJlbmRlclF1ZXVlLnNvcnQodGhpcy5vcGFxdWUsIDAsIHRoaXMub3BhcXVlLmxlbmd0aCwgUmVuZGVyUXVldWUuX2NvbXBhcmVGcm9tTmVhclRvRmFyKTtcclxuXHRcdFJlbmRlclF1ZXVlLnNvcnQodGhpcy50cmFuc3BhcmVudCwgMCwgdGhpcy50cmFuc3BhcmVudC5sZW5ndGgsIFJlbmRlclF1ZXVlLl9jb21wYXJlRnJvbUZhclRvTmVhcik7XHJcblx0fVxyXG5cdG9wYXF1ZVJlbmRlcihcclxuXHRcdGNhbWVyYTogQ2FtZXJhLFxyXG5cdFx0Y29udGV4dDogQ29udGV4dCxcclxuXHRcdHBhc3NFbmNvZGVyPzogR1BVUmVuZGVyUGFzc0VuY29kZXIsXHJcblx0XHRyZXBsYWNlTWF0ZXJpYWw/OiBNYXRlcmlhbCxcclxuXHRcdGNvbW1hbmRTdWJUeXBlPzogQ29tbWFuZFN1YlR5cGUsXHJcblx0XHRsaWdodE1hbmdlcj86IExpZ2h0TWFuZ2VyXHJcblx0KSB7XHJcblx0XHR0aGlzLm9wYXF1ZS5tYXAoKG1lc2gpID0+IHtcclxuXHRcdFx0aWYgKCFtZXNoLnJlYWR5KSByZXR1cm47XHJcblx0XHRcdG1lc2guYmVmb3JlUmVuZGVyKCk7XHJcblx0XHRcdFJlbmRlclF1ZXVlLmV4Y3V0ZUNvbW1hbmQoXHJcblx0XHRcdFx0bWVzaC5nZXREcmF3Q29tbWFuZChyZXBsYWNlTWF0ZXJpYWwsIGNvbW1hbmRTdWJUeXBlLCBsaWdodE1hbmdlciksXHJcblx0XHRcdFx0Y29udGV4dCxcclxuXHRcdFx0XHRwYXNzRW5jb2RlcixcclxuXHRcdFx0XHRjYW1lcmFcclxuXHRcdFx0KTtcclxuXHRcdFx0bWVzaC5hZnRlclJlbmRlcigpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHRyYW5zcGFyZW50UmVuZGVyKFxyXG5cdFx0Y2FtZXJhOiBDYW1lcmEsXHJcblx0XHRjb250ZXh0OiBDb250ZXh0LFxyXG5cdFx0cGFzc0VuY29kZXI/OiBHUFVSZW5kZXJQYXNzRW5jb2RlcixcclxuXHRcdHJlcGxhY2VNYXRlcmlhbD86IE1hdGVyaWFsLFxyXG5cdFx0Y29tbWFuZFN1YlR5cGU/OiBDb21tYW5kU3ViVHlwZSxcclxuXHRcdGxpZ2h0TWFuZ2VyPzogTGlnaHRNYW5nZXJcclxuXHQpIHtcclxuXHRcdHRoaXMudHJhbnNwYXJlbnQubWFwKChtZXNoKSA9PiB7XHJcblx0XHRcdGlmICghbWVzaC5yZWFkeSkgcmV0dXJuO1xyXG5cdFx0XHRtZXNoLmJlZm9yZVJlbmRlcigpO1xyXG5cdFx0XHRSZW5kZXJRdWV1ZS5leGN1dGVDb21tYW5kKFxyXG5cdFx0XHRcdG1lc2guZ2V0RHJhd0NvbW1hbmQocmVwbGFjZU1hdGVyaWFsLCBjb21tYW5kU3ViVHlwZSwgbGlnaHRNYW5nZXIpLFxyXG5cdFx0XHRcdGNvbnRleHQsXHJcblx0XHRcdFx0cGFzc0VuY29kZXIsXHJcblx0XHRcdFx0Y2FtZXJhXHJcblx0XHRcdCk7XHJcblx0XHRcdG1lc2guYWZ0ZXJSZW5kZXIoKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRjb21wdXRlUmVuZGVyKGNvbnRleHQ6IENvbnRleHQsIHBhc3NFbmNvZGVyPzogR1BVQ29tcHV0ZVBhc3NFbmNvZGVyKSB7XHJcblx0XHR0aGlzLmNvbXB1dGVzLm1hcCgoY29tcHV0ZSkgPT4ge1xyXG5cdFx0XHRSZW5kZXJRdWV1ZS5leGN1dGVDb21wdXRlKGNvbXB1dGUuZ2V0Q29tbWFuZCgpLCBjb250ZXh0LCBwYXNzRW5jb2Rlcik7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0ZGVidWdRdWV1ZVJlbmRlcihcclxuXHRcdGNhbWVyYTogQ2FtZXJhLFxyXG5cdFx0Y29udGV4dDogQ29udGV4dCxcclxuXHRcdHBhc3NFbmNvZGVyPzogR1BVUmVuZGVyUGFzc0VuY29kZXIsXHJcblx0XHRyZXBsYWNlTWF0ZXJpYWw/OiBNYXRlcmlhbCxcclxuXHRcdGNvbW1hbmRTdWJUeXBlPzogQ29tbWFuZFN1YlR5cGVcclxuXHQpIHtcclxuXHRcdHRoaXMuZGVidWdRdWV1ZS5tYXAoKG1lc2gpID0+IHtcclxuXHRcdFx0aWYgKCFtZXNoLnJlYWR5KSByZXR1cm47XHJcblx0XHRcdG1lc2guYmVmb3JlUmVuZGVyKCk7XHJcblx0XHRcdFJlbmRlclF1ZXVlLmV4Y3V0ZUNvbW1hbmQoXHJcblx0XHRcdFx0bWVzaC5nZXREcmF3Q29tbWFuZChyZXBsYWNlTWF0ZXJpYWwsIGNvbW1hbmRTdWJUeXBlKSxcclxuXHRcdFx0XHRjb250ZXh0LFxyXG5cdFx0XHRcdHBhc3NFbmNvZGVyLFxyXG5cdFx0XHRcdGNhbWVyYVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRtZXNoLmFmdGVyUmVuZGVyKCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0cHJlUmVuZGVyKGNhbWVyYTogQ2FtZXJhLCBjb250ZXh0OiBDb250ZXh0LCBwYXNzRW5jb2Rlcj86IEdQVVJlbmRlclBhc3NFbmNvZGVyLCByZXBsYWNlTWF0ZXJpYWw/OiBNYXRlcmlhbCkge1xyXG5cdFx0dGhpcy5wcmUubWFwKChtZXNoKSA9PiB7XHJcblx0XHRcdGlmICghbWVzaC5yZWFkeSkgcmV0dXJuO1xyXG5cdFx0XHRtZXNoLmJlZm9yZVJlbmRlcigpO1xyXG5cdFx0XHRSZW5kZXJRdWV1ZS5leGN1dGVDb21tYW5kKG1lc2guZ2V0RHJhd0NvbW1hbmQoKSwgY29udGV4dCwgcGFzc0VuY29kZXIsIGNhbWVyYSk7XHJcblx0XHRcdG1lc2guYWZ0ZXJSZW5kZXIoKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRzdGF0aWMgZXhjdXRlQ29tbWFuZChjb21tYW5kOiBEcmF3Q29tbWFuZCwgY29udGV4dD86IENvbnRleHQsIHBhc3NFbmNvZGVyPzogR1BVUmVuZGVyUGFzc0VuY29kZXIsIGNhbWVyYT86IENhbWVyYSkge1xyXG5cdFx0Y29tbWFuZC5yZW5kZXIoY29udGV4dCwgcGFzc0VuY29kZXIsIGNhbWVyYSk7XHJcblx0fVxyXG5cdHN0YXRpYyBleGN1dGVDb21wdXRlKGNvbW1hbmQ6IENvbXB1dGVDb21tYW5kLCBjb250ZXh0PzogQ29udGV4dCwgcGFzc0VuY29kZXI/OiBHUFVDb21wdXRlUGFzc0VuY29kZXIpIHtcclxuXHRcdGNvbW1hbmQucmVuZGVyKGNvbnRleHQsIHBhc3NFbmNvZGVyKTtcclxuXHR9XHJcblx0cmVzZXQoKSB7XHJcblx0XHR0aGlzLnByZSA9IFtdO1xyXG5cdFx0dGhpcy5vcGFxdWUgPSBbXTtcclxuXHRcdHRoaXMudHJhbnNwYXJlbnQgPSBbXTtcclxuXHRcdHRoaXMuY29tcHV0ZXMgPSBbXTtcclxuXHRcdHRoaXMuZGVidWdRdWV1ZSA9IFtdO1xyXG5cdH1cclxuXHRzdGF0aWMgX2NvbXBhcmVGcm9tTmVhclRvRmFyKGE6IE1lc2gsIGI6IE1lc2gpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5IHx8IGEuZGlzdGFuY2VUb0NhbWVyYSAtIGIuZGlzdGFuY2VUb0NhbWVyYTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBfY29tcGFyZUZyb21GYXJUb05lYXIoYTogTWVzaCwgYjogTWVzaCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHkgfHwgYi5kaXN0YW5jZVRvQ2FtZXJhIC0gYS5kaXN0YW5jZVRvQ2FtZXJhO1xyXG5cdH1cclxuXHQvL2FjY29yZGluZyB0byBjYW1lcmEgZGlzdGFuY2VcclxuXHRzdGF0aWMgc29ydDxUPihpbnNhdG5jZTogVFtdLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIGNvbXBhcmVGdW5jOiBGdW5jdGlvbik6IHZvaWQge1xyXG5cdFx0UmVuZGVyUXVldWUuX3F1aWNrU29ydChpbnNhdG5jZSwgZnJvbSwgdG8sIGNvbXBhcmVGdW5jKTtcclxuXHR9XHJcblx0Ly9mcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9vYXNpcy1lbmdpbmUvZW5naW5lL2Jsb2IvbWFpbi9wYWNrYWdlcy9jb3JlL3NyYy9SZW5kZXJQaXBlbGluZS9SZW5kZXJRdWV1ZS50c1xyXG5cdHByaXZhdGUgc3RhdGljIF9xdWlja1NvcnQ8VD4oYTogVFtdLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIGNvbXBhcmVGdW5jOiBGdW5jdGlvbik6IHZvaWQge1xyXG5cdFx0d2hpbGUgKHRydWUpIHtcclxuXHRcdFx0Ly8gSW5zZXJ0aW9uIHNvcnQgaXMgZmFzdGVyIGZvciBzaG9ydCBhcnJheXMuXHJcblx0XHRcdGlmICh0byAtIGZyb20gPD0gMTApIHtcclxuXHRcdFx0XHRSZW5kZXJRdWV1ZS5faW5zZXJ0aW9uU29ydChhLCBmcm9tLCB0bywgY29tcGFyZUZ1bmMpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCB0aGlyZF9pbmRleCA9IChmcm9tICsgdG8pID4+IDE7XHJcblx0XHRcdC8vIEZpbmQgYSBwaXZvdCBhcyB0aGUgbWVkaWFuIG9mIGZpcnN0LCBsYXN0IGFuZCBtaWRkbGUgZWxlbWVudC5cclxuXHRcdFx0bGV0IHYwID0gYVtmcm9tXTtcclxuXHRcdFx0bGV0IHYxID0gYVt0byAtIDFdO1xyXG5cdFx0XHRsZXQgdjIgPSBhW3RoaXJkX2luZGV4XTtcclxuXHRcdFx0Y29uc3QgYzAxID0gY29tcGFyZUZ1bmModjAsIHYxKTtcclxuXHRcdFx0aWYgKGMwMSA+IDApIHtcclxuXHRcdFx0XHQvLyB2MSA8IHYwLCBzbyBzd2FwIHRoZW0uXHJcblx0XHRcdFx0Y29uc3QgdG1wID0gdjA7XHJcblx0XHRcdFx0djAgPSB2MTtcclxuXHRcdFx0XHR2MSA9IHRtcDtcclxuXHRcdFx0fSAvLyB2MCA8PSB2MS5cclxuXHRcdFx0Y29uc3QgYzAyID0gY29tcGFyZUZ1bmModjAsIHYyKTtcclxuXHRcdFx0aWYgKGMwMiA+PSAwKSB7XHJcblx0XHRcdFx0Ly8gdjIgPD0gdjAgPD0gdjEuXHJcblx0XHRcdFx0Y29uc3QgdG1wID0gdjA7XHJcblx0XHRcdFx0djAgPSB2MjtcclxuXHRcdFx0XHR2MiA9IHYxO1xyXG5cdFx0XHRcdHYxID0gdG1wO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIHYwIDw9IHYxICYmIHYwIDwgdjJcclxuXHRcdFx0XHRjb25zdCBjMTIgPSBjb21wYXJlRnVuYyh2MSwgdjIpO1xyXG5cdFx0XHRcdGlmIChjMTIgPiAwKSB7XHJcblx0XHRcdFx0XHQvLyB2MCA8PSB2MiA8IHYxXHJcblx0XHRcdFx0XHRjb25zdCB0bXAgPSB2MTtcclxuXHRcdFx0XHRcdHYxID0gdjI7XHJcblx0XHRcdFx0XHR2MiA9IHRtcDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gdjAgPD0gdjEgPD0gdjJcclxuXHRcdFx0YVtmcm9tXSA9IHYwO1xyXG5cdFx0XHRhW3RvIC0gMV0gPSB2MjtcclxuXHRcdFx0Y29uc3QgcGl2b3QgPSB2MTtcclxuXHRcdFx0bGV0IGxvd19lbmQgPSBmcm9tICsgMTsgLy8gVXBwZXIgYm91bmQgb2YgZWxlbWVudHMgbG93ZXIgdGhhbiBwaXZvdC5cclxuXHRcdFx0bGV0IGhpZ2hfc3RhcnQgPSB0byAtIDE7IC8vIExvd2VyIGJvdW5kIG9mIGVsZW1lbnRzIGdyZWF0ZXIgdGhhbiBwaXZvdC5cclxuXHRcdFx0YVt0aGlyZF9pbmRleF0gPSBhW2xvd19lbmRdO1xyXG5cdFx0XHRhW2xvd19lbmRdID0gcGl2b3Q7XHJcblxyXG5cdFx0XHQvLyBGcm9tIGxvd19lbmQgdG8gaSBhcmUgZWxlbWVudHMgZXF1YWwgdG8gcGl2b3QuXHJcblx0XHRcdC8vIEZyb20gaSB0byBoaWdoX3N0YXJ0IGFyZSBlbGVtZW50cyB0aGF0IGhhdmVuJ3QgYmVlbiBjb21wYXJlZCB5ZXQuXHJcblx0XHRcdHBhcnRpdGlvbjogZm9yIChsZXQgaSA9IGxvd19lbmQgKyAxOyBpIDwgaGlnaF9zdGFydDsgaSsrKSB7XHJcblx0XHRcdFx0bGV0IGVsZW1lbnQgPSBhW2ldO1xyXG5cdFx0XHRcdGxldCBvcmRlciA9IGNvbXBhcmVGdW5jKGVsZW1lbnQsIHBpdm90KTtcclxuXHRcdFx0XHRpZiAob3JkZXIgPCAwKSB7XHJcblx0XHRcdFx0XHRhW2ldID0gYVtsb3dfZW5kXTtcclxuXHRcdFx0XHRcdGFbbG93X2VuZF0gPSBlbGVtZW50O1xyXG5cdFx0XHRcdFx0bG93X2VuZCsrO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAob3JkZXIgPiAwKSB7XHJcblx0XHRcdFx0XHRkbyB7XHJcblx0XHRcdFx0XHRcdGhpZ2hfc3RhcnQtLTtcclxuXHRcdFx0XHRcdFx0aWYgKGhpZ2hfc3RhcnQgPT0gaSkgYnJlYWsgcGFydGl0aW9uO1xyXG5cdFx0XHRcdFx0XHRjb25zdCB0b3BfZWxlbSA9IGFbaGlnaF9zdGFydF07XHJcblx0XHRcdFx0XHRcdG9yZGVyID0gY29tcGFyZUZ1bmModG9wX2VsZW0sIHBpdm90KTtcclxuXHRcdFx0XHRcdH0gd2hpbGUgKG9yZGVyID4gMCk7XHJcblx0XHRcdFx0XHRhW2ldID0gYVtoaWdoX3N0YXJ0XTtcclxuXHRcdFx0XHRcdGFbaGlnaF9zdGFydF0gPSBlbGVtZW50O1xyXG5cdFx0XHRcdFx0aWYgKG9yZGVyIDwgMCkge1xyXG5cdFx0XHRcdFx0XHRlbGVtZW50ID0gYVtpXTtcclxuXHRcdFx0XHRcdFx0YVtpXSA9IGFbbG93X2VuZF07XHJcblx0XHRcdFx0XHRcdGFbbG93X2VuZF0gPSBlbGVtZW50O1xyXG5cdFx0XHRcdFx0XHRsb3dfZW5kKys7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0byAtIGhpZ2hfc3RhcnQgPCBsb3dfZW5kIC0gZnJvbSkge1xyXG5cdFx0XHRcdHRoaXMuX3F1aWNrU29ydChhLCBoaWdoX3N0YXJ0LCB0bywgY29tcGFyZUZ1bmMpO1xyXG5cdFx0XHRcdHRvID0gbG93X2VuZDtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLl9xdWlja1NvcnQoYSwgZnJvbSwgbG93X2VuZCwgY29tcGFyZUZ1bmMpO1xyXG5cdFx0XHRcdGZyb20gPSBoaWdoX3N0YXJ0O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdHByaXZhdGUgc3RhdGljIF9pbnNlcnRpb25Tb3J0PFQ+KGE6IFRbXSwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyLCBjb21wYXJlRnVuYzogRnVuY3Rpb24pOiB2b2lkIHtcclxuXHRcdGZvciAobGV0IGkgPSBmcm9tICsgMTsgaSA8IHRvOyBpKyspIHtcclxuXHRcdFx0bGV0IGo7XHJcblx0XHRcdGNvbnN0IGVsZW1lbnQgPSBhW2ldO1xyXG5cdFx0XHRmb3IgKGogPSBpIC0gMTsgaiA+PSBmcm9tOyBqLS0pIHtcclxuXHRcdFx0XHRjb25zdCB0bXAgPSBhW2pdO1xyXG5cdFx0XHRcdGNvbnN0IG9yZGVyID0gY29tcGFyZUZ1bmModG1wLCBlbGVtZW50KTtcclxuXHRcdFx0XHRpZiAob3JkZXIgPiAwKSB7XHJcblx0XHRcdFx0XHRhW2ogKyAxXSA9IHRtcDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGFbaiArIDFdID0gZWxlbWVudDtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgU2NlbmUgfSBmcm9tIFwiLi4vU2NlbmVcIjtcclxuaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vY2FtZXJhL0NhbWVyYVwiO1xyXG5pbXBvcnQgQ29sb3IgZnJvbSBcIi4uL21hdGgvQ29sb3JcIjtcclxuaW1wb3J0IFBhc3MgZnJvbSBcIi4uL3Bhc3MvUGFzc1wiO1xyXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vcmVuZGVyL0NvbnRleHRcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcbmltcG9ydCBjb21iaW5lIGZyb20gXCIuLi91dGlscy9jb21iaW5lXCI7XHJcbmltcG9ydCBDdWxsaW5nVm9sdW1lIGZyb20gXCIuL0N1bGxpbmdWb2x1bWVcIjtcclxuaW1wb3J0IExpZ2h0TWFuZ2VyIGZyb20gXCIuL0xpZ2h0TWFuZ2VyXCI7XHJcbmltcG9ydCBSZW5kZXJRdWV1ZSBmcm9tIFwiLi9SZW5kZXJRdWV1ZVwiO1xyXG5cclxuaW50ZXJmYWNlIEZyYW1lU3RhdGVPcHRpb25zIHtcclxuXHRiYWNrZ3JvdW5kPzogQmFja2dyb3VuZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBCYWNrZ3JvdW5kIHtcclxuXHR2YWx1ZTogQ29sb3IgfCBUZXh0dXJlO1xyXG5cdG9wYWNpdHk6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEZyYW1lU3RhdGUge1xyXG5cdHB1YmxpYyBiYWNrZ3JvdW5kOiBCYWNrZ3JvdW5kO1xyXG5cdHB1YmxpYyBwYXNzOiBQYXNzO1xyXG5cdHB1YmxpYyByZW5kZXJRdWV1ZTogUmVuZGVyUXVldWU7XHJcblx0cHVibGljIGRyYXdDYWxsbnVtczogbnVtYmVyO1xyXG5cdHB1YmxpYyBnZW9tZXRyeU1lbW9yeTogbnVtYmVyO1xyXG5cdHB1YmxpYyB0ZXh0dXJlTWVtb3J5OiBudW1iZXI7XHJcblx0cHVibGljIGZyYW1lTnVtYmVyOiBudW1iZXI7XHJcblx0cHVibGljIGN1bGxpbmdWb2x1bWU6IEN1bGxpbmdWb2x1bWU7XHJcblx0cHVibGljIGRlZmluZXNEaXJ0eTogYm9vbGVhbjtcclxuXHRwcml2YXRlIF9kZWZpbmVzOiBvYmplY3Q7XHJcblx0Y29uc3RydWN0b3IocHVibGljIGNvbnRleHQ6IENvbnRleHQsIHB1YmxpYyBsaWdodE1hbmdlcj86IExpZ2h0TWFuZ2VyLCBvcHRpb25zOiBGcmFtZVN0YXRlT3B0aW9ucyA9IHt9KSB7XHJcblx0XHR0aGlzLmJhY2tncm91bmQgPSBvcHRpb25zLmJhY2tncm91bmQ7XHJcblx0XHR0aGlzLnJlbmRlclF1ZXVlID0gbmV3IFJlbmRlclF1ZXVlKCk7XHJcblx0XHR0aGlzLmdlb21ldHJ5TWVtb3J5ID0gMDtcclxuXHRcdHRoaXMudGV4dHVyZU1lbW9yeSA9IDA7XHJcblx0XHR0aGlzLmZyYW1lTnVtYmVyID0gMDtcclxuXHRcdHRoaXMuX2RlZmluZXMgPSB7fTtcclxuXHRcdHRoaXMuZGVmaW5lc0RpcnR5ID0gdHJ1ZTtcclxuXHR9XHJcblx0Z2V0IGRlZmluZXMoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fZGVmaW5lcztcclxuXHR9XHJcblx0c2V0IGRlZmluZXModmFsdWUpIHtcclxuXHRcdHRoaXMuZGVmaW5lc0RpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX2RlZmluZXMgPSBjb21iaW5lKHZhbHVlLCB0aGlzLl9kZWZpbmVzLCBmYWxzZSk7XHJcblx0fVxyXG5cdHVwZGF0ZShjYW1lcmE6IENhbWVyYSwgb3B0aW9uczogRnJhbWVTdGF0ZU9wdGlvbnMgPSB7fSkge1xyXG5cdFx0dGhpcy5iYWNrZ3JvdW5kID0gb3B0aW9ucy5iYWNrZ3JvdW5kO1xyXG5cclxuXHRcdHRoaXMucmVuZGVyUXVldWUucmVzZXQoKTtcclxuXHRcdHRoaXM/LmxpZ2h0TWFuZ2VyPy51cGRhdGU/Lih0aGlzLCBjYW1lcmEpO1xyXG5cdFx0dGhpcy5jdWxsaW5nVm9sdW1lID0gY2FtZXJhLmdldEN1bGxpbmdWb2x1bWUoKTtcclxuXHRcdHRoaXMuZnJhbWVOdW1iZXIgKz0gMTtcclxuXHR9XHJcblxyXG5cdHJlc2V0Q3VsbGluZ1ZvbHVtZShjYW1lcmE6IENhbWVyYSkge1xyXG5cdFx0dGhpcy5jdWxsaW5nVm9sdW1lID0gY2FtZXJhLmdldEN1bGxpbmdWb2x1bWUoKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRGcmFtZVN0YXRlT3B0aW9uc0J5U2NlbmUoc2NlbmVJbnN0YW5jZTogU2NlbmUpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGJhY2tncm91bmQ6IHNjZW5lSW5zdGFuY2UuYmFja2dyb3VuZFxyXG5cdFx0fTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgTGlnaHRUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xyXG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi4vbWF0aC9WZWN0b3I0XCI7XHJcbmltcG9ydCB7IExpZ2h0IH0gZnJvbSBcIi4vTGlnaHRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBbWJpZW50TGlnaHQgZXh0ZW5kcyBMaWdodCB7XHJcblx0cHJpdmF0ZSBfY29sb3JBbmRJbnRlbnNpdHk6IFZlY3RvcjQ7XHJcblx0Y29uc3RydWN0b3IoY29sb3I6IFZlY3RvcjMsIGludGVuc2l0eTogbnVtYmVyKSB7XHJcblx0XHRzdXBlcihjb2xvciwgaW50ZW5zaXR5KTtcclxuXHRcdHRoaXMubGlnaHRUeXBlID0gTGlnaHRUeXBlLkFtYmllbnRMaWdodDtcclxuXHRcdHRoaXMuX2NvbG9yQW5kSW50ZW5zaXR5ID0gbmV3IFZlY3RvcjQoY29sb3IueCwgY29sb3IueSwgY29sb3IueiwgaW50ZW5zaXR5KTtcclxuXHR9XHJcblx0Z2V0IENvbG9yQW5kSW50ZW5zaXR5KCkge1xyXG5cdFx0dGhpcy5fY29sb3JBbmRJbnRlbnNpdHkuc2V0KHRoaXMuY29sb3IueCwgdGhpcy5jb2xvci55LCB0aGlzLmNvbG9yLnosIHRoaXMuaW50ZW5zaXR5KTtcclxuXHRcdHJldHVybiB0aGlzLl9jb2xvckFuZEludGVuc2l0eTtcclxuXHR9XHJcbn1cclxuLy8gbGlnaHQuY29sb3IgKS5tdWx0aXBseVNjYWxhciggbGlnaHQuaW50ZW5zaXR5ICogc2NhbGVGYWN0b3IgKTtcclxuIiwiaW1wb3J0IHsgQW1iaWVudExpZ2h0IH0gZnJvbSBcIi4uL2xpZ2h0L0FtYmllbnRMaWdodFwiO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb25hbExpZ2h0IH0gZnJvbSBcIi4uL2xpZ2h0L0RpcmVjdGlvbmFsTGlnaHRcIjtcclxuaW1wb3J0IHsgUG9pbnRMaWdodCB9IGZyb20gXCIuLi9saWdodC9Qb2ludExpZ2h0XCI7XHJcbmltcG9ydCB7IFNwb3RMaWdodCB9IGZyb20gXCIuLi9saWdodC9TcG90TGlnaHRcIjtcclxuaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuL0ZyYW1lU3RhdGVcIjtcclxuaW1wb3J0IFNoYWRlckRhdGEgZnJvbSBcIi4uL3JlbmRlci9TaGFkZXJEYXRhXCI7XHJcbmltcG9ydCB7XHJcblx0VGV4dHVyZVVzYWdlLFxyXG5cdEJ1ZmZlclVzYWdlLFxyXG5cdFRleHR1cmVGb3JtYXQsXHJcblx0Q29tcGFyZUZ1bmN0aW9uLFxyXG5cdFNhbXBsZXJCaW5kaW5nVHlwZSxcclxuXHRUZXh0dXJlU2FtcGxlVHlwZSxcclxuXHRUZXh0dXJlVmlld0RpbWVuc2lvbixcclxuXHRCdWZmZXJCaW5kaW5nVHlwZVxyXG59IGZyb20gXCIuL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCBVbmlmb3JtQnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybUJ1ZmZlclwiO1xyXG5pbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XHJcbmltcG9ydCB7IExpZ2h0IH0gZnJvbSBcIi4uL2xpZ2h0L0xpZ2h0XCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuaW1wb3J0IHsgTGlnaHRNYW5nZXJPcHRpb25zLCBMaWdodFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcclxuaW1wb3J0IFNhbXBsZXIgZnJvbSBcIi4uL3JlbmRlci9TYW1wbGVyXCI7XHJcbmltcG9ydCB7IFVuaWZvcm1FbnVtIH0gZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3Jtc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlnaHRNYW5nZXIge1xyXG5cdGxpZ2h0VW5pZm9ybUJ1ZmZlcjogVW5pZm9ybUJ1ZmZlcjtcclxuXHRzaGFkb3dVbmlmb3JtQnVmZmVyOiBVbmlmb3JtQnVmZmVyO1xyXG5cdHBvaW50TGlnaHRzOiBQb2ludExpZ2h0W107XHJcblxyXG5cdHNwb3RMaWdodHM6IFNwb3RMaWdodFtdO1xyXG5cclxuXHRkaXJlY3RMaWdodHM6IERpcmVjdGlvbmFsTGlnaHRbXTtcclxuXHJcblx0YW1iaWVudExpZ2h0OiBBbWJpZW50TGlnaHQ7XHJcblxyXG5cdGxpZ2h0U2hhZGVyRGF0YTogU2hhZGVyRGF0YTtcclxuXHJcblx0bGlnaHRDb3VudERpcnR5OiBib29sZWFuO1xyXG5cclxuXHRwcml2YXRlIG9wZW5TaGFkb3c6IGJvb2xlYW47XHJcblx0c3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5OiBUZXh0dXJlO1xyXG5cdHBvaW50TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXk6IFRleHR1cmU7XHJcblx0ZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXk6IFRleHR1cmU7XHJcblx0X3Rlc3RUZXh0dXJlOiBUZXh0dXJlO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihvcHRpb25zOiBMaWdodE1hbmdlck9wdGlvbnMpIHtcclxuXHRcdHRoaXMuc3BvdExpZ2h0cyA9IFtdO1xyXG5cdFx0dGhpcy5wb2ludExpZ2h0cyA9IFtdO1xyXG5cdFx0dGhpcy5kaXJlY3RMaWdodHMgPSBbXTtcclxuXHRcdHRoaXMuYW1iaWVudExpZ2h0ID0gbmV3IEFtYmllbnRMaWdodChuZXcgVmVjdG9yMygxLjAsIDEuMCwgMS4wKSwgMC4yKTtcclxuXHRcdHRoaXMubGlnaHRDb3VudERpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMub3BlblNoYWRvdyA9IG9wdGlvbnMub3BlblNoYWRvdztcclxuXHR9XHJcblx0dXBkYXRlKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUsIGNhbWVyYTogQ2FtZXJhKSB7XHJcblx0XHR0aGlzLmNoZWNrTGlnaHRTaGFkb3dTdGF0ZSgpO1xyXG5cdFx0dGhpcy51cGRhdGVMaWdodChjYW1lcmEpO1xyXG5cdH1cclxuXHRhZGQobGlnaHQ6IExpZ2h0KSB7XHJcblx0XHR0aGlzLmxpZ2h0Q291bnREaXJ0eSA9IHRydWU7XHJcblx0XHRpZiAobGlnaHQubGlnaHRUeXBlID09IExpZ2h0VHlwZS5BbWJpZW50TGlnaHQpIHtcclxuXHRcdFx0dGhpcy5hbWJpZW50TGlnaHQgPSA8QW1iaWVudExpZ2h0PmxpZ2h0O1xyXG5cdFx0fSBlbHNlIGlmIChsaWdodC5saWdodFR5cGUgPT0gTGlnaHRUeXBlLkRpcmVjdGlvbmFsTGlnaHQpIHtcclxuXHRcdFx0dGhpcy5kaXJlY3RMaWdodHMucHVzaCg8RGlyZWN0aW9uYWxMaWdodD5saWdodCk7XHJcblx0XHR9IGVsc2UgaWYgKGxpZ2h0LmxpZ2h0VHlwZSA9PSBMaWdodFR5cGUuUG9pbnRMaWdodCkge1xyXG5cdFx0XHR0aGlzLnBvaW50TGlnaHRzLnB1c2goPFBvaW50TGlnaHQ+bGlnaHQpO1xyXG5cdFx0fSBlbHNlIGlmIChsaWdodC5saWdodFR5cGUgPT0gTGlnaHRUeXBlLlNwb3RMaWdodCkge1xyXG5cdFx0XHR0aGlzLnNwb3RMaWdodHMucHVzaCg8U3BvdExpZ2h0PmxpZ2h0KTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmVtb3ZlKGxpZ2h0OiBMaWdodCkge1xyXG5cdFx0dGhpcy5saWdodENvdW50RGlydHkgPSB0cnVlO1xyXG5cdFx0aWYgKGxpZ2h0LmxpZ2h0VHlwZSA9PSBMaWdodFR5cGUuQW1iaWVudExpZ2h0KSB7XHJcblx0XHRcdHRoaXMuYW1iaWVudExpZ2h0ID0gbmV3IEFtYmllbnRMaWdodChuZXcgVmVjdG9yMygxLjAsIDEuMCwgMS4wKSwgMS4wKTtcclxuXHRcdH0gZWxzZSBpZiAobGlnaHQubGlnaHRUeXBlID09IExpZ2h0VHlwZS5EaXJlY3Rpb25hbExpZ2h0KSB7XHJcblx0XHRcdHRoaXMuZGlyZWN0TGlnaHRzLnNwbGljZSh0aGlzLmRpcmVjdExpZ2h0cy5pbmRleE9mKDxEaXJlY3Rpb25hbExpZ2h0PmxpZ2h0KSwgMSk7XHJcblx0XHR9IGVsc2UgaWYgKGxpZ2h0LmxpZ2h0VHlwZSA9PSBMaWdodFR5cGUuUG9pbnRMaWdodCkge1xyXG5cdFx0XHR0aGlzLnBvaW50TGlnaHRzLnNwbGljZSh0aGlzLnBvaW50TGlnaHRzLmluZGV4T2YoPFBvaW50TGlnaHQ+bGlnaHQpLCAxKTtcclxuXHRcdH0gZWxzZSBpZiAobGlnaHQubGlnaHRUeXBlID09IExpZ2h0VHlwZS5TcG90TGlnaHQpIHtcclxuXHRcdFx0dGhpcy5zcG90TGlnaHRzLnNwbGljZSh0aGlzLnNwb3RMaWdodHMuaW5kZXhPZig8U3BvdExpZ2h0PmxpZ2h0KSwgMSk7XHJcblx0XHR9XHJcblx0fVxyXG5cdGNoZWNrTGlnaHRTaGFkb3dTdGF0ZSgpIHtcclxuXHRcdGNvbnN0IGxpZ2h0cyA9IHRoaXMuZ2V0QWxsTGlnaHRzKCk7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaWdodCA9IGxpZ2h0c1tpXTtcclxuXHRcdFx0aWYgKGxpZ2h0LnNoYWRvd0RpcnR5KSB7XHJcblx0XHRcdFx0bGlnaHQuc2hhZG93RGlydHkgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLmxpZ2h0Q291bnREaXJ0eSA9IHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHVwZGF0ZUxpZ2h0U2hhZG93KCkge1xyXG5cdFx0aWYgKHRoaXMuc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5KSB0aGlzLnNwb3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheS5kaXJ0eSA9IHRydWU7XHJcblxyXG5cdFx0aWYgKHRoaXMucG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSkgdGhpcy5wb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5LmRpcnR5ID0gdHJ1ZTtcclxuXHJcblx0XHRpZiAodGhpcy5kaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSkgdGhpcy5kaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheS5kaXJ0eSA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHVwZGF0ZUxpZ2h0KGNhbWVyYTogQ2FtZXJhKSB7XHJcblx0XHRpZiAodGhpcy5saWdodENvdW50RGlydHkpIHtcclxuXHRcdFx0dGhpcy5saWdodENvdW50RGlydHkgPSBmYWxzZTtcclxuXHRcdFx0aWYgKHRoaXMubGlnaHRTaGFkZXJEYXRhKSB0aGlzLmxpZ2h0U2hhZGVyRGF0YS5kZXN0cm95KCk7XHJcblx0XHRcdHRoaXMuY3JlYXRlTGlnaHRTaGFkZXJEYXRhKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHByaXZhdGUgY3JlYXRlTGlnaHRTaGFkZXJEYXRhKCkge1xyXG5cdFx0dGhpcy5saWdodFNoYWRlckRhdGEgPSBuZXcgU2hhZGVyRGF0YShcImxpZ2h0XCIsIDAsIDIsIDIpO1xyXG5cdFx0dGhpcy5saWdodFVuaWZvcm1CdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7XHJcblx0XHRcdGxhYmVsOiBcImxpZ2h0XCIsXHJcblx0XHRcdHR5cGU6IEJ1ZmZlckJpbmRpbmdUeXBlLlJlYWRPbmx5U3RvcmFnZSxcclxuXHRcdFx0dXNhZ2U6IEJ1ZmZlclVzYWdlLlN0b3JhZ2UgfCBCdWZmZXJVc2FnZS5Db3B5RHN0XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YS5zZXREZWZpbmUoXCJzcG90TGlnaHRzQ291bnRcIiwgdGhpcy5zcG90TGlnaHRzLmxlbmd0aCk7XHJcblx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YS5zZXREZWZpbmUoXCJwb2ludExpZ2h0c0NvdW50XCIsIHRoaXMucG9pbnRMaWdodHMubGVuZ3RoKTtcclxuXHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldERlZmluZShcImRpcnRlY3RMaWdodHNDb3VudFwiLCB0aGlzLmRpcmVjdExpZ2h0cy5sZW5ndGgpO1xyXG5cdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0RGVmaW5lKFwiYW1iaWVudExpZ2h0Q291bnRcIiwgMSk7XHJcblx0XHRpZiAodGhpcy5hbWJpZW50TGlnaHQpXHJcblx0XHRcdHRoaXMubGlnaHRVbmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0XCJhbWJpZW50TGlnaHRcIixcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5hbWJpZW50TGlnaHQuQ29sb3JBbmRJbnRlbnNpdHk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRVbmlmb3JtRW51bS5GbG9hdFZlYzRcclxuXHRcdFx0KTtcclxuXHRcdGlmICh0aGlzLnNwb3RMaWdodHMubGVuZ3RoKSB7XHJcblx0XHRcdC8v5Yid5aeL5YyW6IGa5YWJ54GvXHJcblx0XHRcdHRoaXMubGlnaHRVbmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0XCJzcG90TGlnaHRzXCIsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc3BvdExpZ2h0cztcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdFVuaWZvcm1FbnVtLlNwb3RMaWdodHMsXHJcblx0XHRcdFx0dGhpcy5zcG90TGlnaHRzLmxlbmd0aFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMucG9pbnRMaWdodHMubGVuZ3RoKSB7XHJcblx0XHRcdC8v54K55YWJ5rqQXHJcblx0XHRcdHRoaXMubGlnaHRVbmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0XCJwb2ludExpZ2h0c1wiLFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnBvaW50TGlnaHRzO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uUG9pbnRMaWdodHMsXHJcblx0XHRcdFx0dGhpcy5wb2ludExpZ2h0cy5sZW5ndGhcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmRpcmVjdExpZ2h0cy5sZW5ndGgpIHtcclxuXHRcdFx0Ly/mlrnlkJHlhYlcclxuXHRcdFx0dGhpcy5saWdodFVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XHRcImRpcmVjdExpZ2h0c1wiLFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLmRpcmVjdExpZ2h0cztcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdFVuaWZvcm1FbnVtLkRpcnRlY3RMaWdodHMsXHJcblx0XHRcdFx0dGhpcy5kaXJlY3RMaWdodHMubGVuZ3RoXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0c2hhZG93U2hhZGVyRGF0YToge1xyXG5cdFx0XHRpZiAodGhpcy5vcGVuU2hhZG93KSB7XHJcblx0XHRcdFx0Y29uc3Qgc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5ID0gKHRoaXMuc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5ID1cclxuXHRcdFx0XHRcdHRoaXMuY3JlYXRlU2hhZG93TWFwVGV4dHVyZUFycmF5KHRoaXMuc3BvdExpZ2h0cykpO1xyXG5cdFx0XHRcdGNvbnN0IHBvaW50TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkgPSAodGhpcy5wb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5ID1cclxuXHRcdFx0XHRcdHRoaXMuY3JlYXRlU2hhZG93TWFwVGV4dHVyZUFycmF5KHRoaXMucG9pbnRMaWdodHMpKTtcclxuXHRcdFx0XHRjb25zdCBkaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSA9ICh0aGlzLmRpcmVjdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5ID1cclxuXHRcdFx0XHRcdHRoaXMuY3JlYXRlU2hhZG93TWFwVGV4dHVyZUFycmF5KHRoaXMuZGlyZWN0TGlnaHRzKSk7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0IXNwb3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSAmJlxyXG5cdFx0XHRcdFx0IXBvaW50TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkgJiZcclxuXHRcdFx0XHRcdCFkaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheVxyXG5cdFx0XHRcdClcclxuXHRcdFx0XHRcdGJyZWFrIHNoYWRvd1NoYWRlckRhdGE7XHJcblxyXG5cdFx0XHRcdC8vZGVmaW5lXHJcblx0XHRcdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0RGVmaW5lKFwib3BlblNoYWRvd1wiLCB0aGlzLm9wZW5TaGFkb3cpO1xyXG5cclxuXHRcdFx0XHQvL3NoYWRvd1VuaWZvcm1CdWZmZXJcclxuXHRcdFx0XHR0aGlzLnNoYWRvd1VuaWZvcm1CdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7XHJcblx0XHRcdFx0XHRsYWJlbDogXCJzaGFkb3dcIixcclxuXHRcdFx0XHRcdHR5cGU6IEJ1ZmZlckJpbmRpbmdUeXBlLlJlYWRPbmx5U3RvcmFnZSxcclxuXHRcdFx0XHRcdHVzYWdlOiBCdWZmZXJVc2FnZS5TdG9yYWdlIHwgQnVmZmVyVXNhZ2UuQ29weURzdFxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHQvL21hdHJpeCxuZWFyLGZhci4uLlxyXG5cdFx0XHRcdGNvbnN0IHNwb3RMaWdodFdpdGhTaGFkb3dDb3VudCA9IHRoaXMuc2V0U2hhZG93VW5pZm9ybShcclxuXHRcdFx0XHRcdFwic3BvdExpZ2h0U2hhZG93c1wiLFxyXG5cdFx0XHRcdFx0dGhpcy5zcG90TGlnaHRzLFxyXG5cdFx0XHRcdFx0VW5pZm9ybUVudW0uU3BvdExpZ2h0U2hhZG93c1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0Y29uc3QgcG9pbnRMaWdodFdpdGhTaGFkb3dDb3VudCA9IHRoaXMuc2V0U2hhZG93VW5pZm9ybShcclxuXHRcdFx0XHRcdFwicG9pbnRMaWdodFNoYWRvd3NcIixcclxuXHRcdFx0XHRcdHRoaXMucG9pbnRMaWdodHMsXHJcblx0XHRcdFx0XHRVbmlmb3JtRW51bS5Qb2ludExpZ2h0U2hhZG93c1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0Y29uc3QgZGlyZWN0TGlnaHRXaXRoU2hhZG93Q291bnQgPSB0aGlzLnNldFNoYWRvd1VuaWZvcm0oXHJcblx0XHRcdFx0XHRcImRpcmVjdExpZ2h0U2hhZG93c1wiLFxyXG5cdFx0XHRcdFx0dGhpcy5kaXJlY3RMaWdodHMsXHJcblx0XHRcdFx0XHRVbmlmb3JtRW51bS5EaXJ0ZWN0TGlnaHRTaGFkb3dzXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwic2hhZG93XCIsIHRoaXMuc2hhZG93VW5pZm9ybUJ1ZmZlcik7XHJcblxyXG5cdFx0XHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldERlZmluZShcInNwb3RMaWdodFNoYWRvd01hcHNDb3VudFwiLCBzcG90TGlnaHRXaXRoU2hhZG93Q291bnQpO1xyXG5cdFx0XHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldERlZmluZShcInBvaW50TGlnaHRTaGFkb3dNYXBzQ291bnRcIiwgcG9pbnRMaWdodFdpdGhTaGFkb3dDb3VudCk7XHJcblx0XHRcdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0RGVmaW5lKFwiZGlyZWN0TGlnaHRTaGFkb3dNYXBzQ291bnRcIiwgZGlyZWN0TGlnaHRXaXRoU2hhZG93Q291bnQpO1xyXG5cclxuXHRcdFx0XHQvL3RleHR1cmUsc2FtcGxlXHJcblx0XHRcdFx0aWYgKHNwb3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRpZiAoc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5LnRleHR1cmVQcm9wLnNpemUuZGVwdGggIT0gc3BvdExpZ2h0V2l0aFNoYWRvd0NvdW50KVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oXCJzcG90TGlnaHRTaGFkb3dNYXAgYWxpZ24gaGFzIHByb2JsZW1cIik7XHJcblx0XHRcdFx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YS5zZXRUZXh0dXJlKFwic3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5XCIsIHNwb3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSk7XHJcblx0XHRcdFx0XHQvLyB0aGlzLl90ZXN0VGV4dHVyZSA9IHNwb3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAocG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRpZiAocG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheS50ZXh0dXJlUHJvcC5zaXplLmRlcHRoICE9IHBvaW50TGlnaHRXaXRoU2hhZG93Q291bnQpXHJcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybihcInBvaW50TGlnaHRTaGFkb3dNYXAgYWxpZ24gaGFzIHByb2JsZW1cIik7XHJcblx0XHRcdFx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YS5zZXRUZXh0dXJlKFwicG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheVwiLCBwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5KTtcclxuXHRcdFx0XHRcdC8vIHRoaXMuX3Rlc3RUZXh0dXJlID0gcG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGRpcmVjdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdGlmIChkaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheS50ZXh0dXJlUHJvcC5zaXplLmRlcHRoICE9IGRpcmVjdExpZ2h0V2l0aFNoYWRvd0NvdW50KVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oXCJkaXJlY3RMaWdodFNoYWRvd01hcCBhbGlnbiBoYXMgcHJvYmxlbVwiKTtcclxuXHRcdFx0XHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldFRleHR1cmUoXHJcblx0XHRcdFx0XHRcdFwiZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXlcIixcclxuXHRcdFx0XHRcdFx0ZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXlcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHQvLyB0aGlzLl90ZXN0VGV4dHVyZSA9IGRpcmVjdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldFNhbXBsZXIoXHJcblx0XHRcdFx0XHRcInNoYWRvd1NhbXBsZXJcIixcclxuXHRcdFx0XHRcdG5ldyBTYW1wbGVyKHsgY29tcGFyZTogQ29tcGFyZUZ1bmN0aW9uLkxlc3MgfSwgeyB0eXBlOiBTYW1wbGVyQmluZGluZ1R5cGUuQ29tcGFyaXNvbiB9KVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0Ly8gdGhpcy5saWdodFNoYWRlckRhdGEuc2V0U2FtcGxlcihcInNoYWRvd1NhbXBsZXJcIiwgbmV3IFNhbXBsZXIoKSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwibGlnaHRcIiwgdGhpcy5saWdodFVuaWZvcm1CdWZmZXIpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldEFsbExpZ2h0cygpOiBBcnJheTxMaWdodD4ge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XHJcblx0XHRyZXR1cm4gcmVzdWx0LmNvbmNhdCh0aGlzLnNwb3RMaWdodHMsIHRoaXMucG9pbnRMaWdodHMsIHRoaXMuZGlyZWN0TGlnaHRzKTtcclxuXHR9XHJcblxyXG5cdGRlc3Ryb3koKSB7XHJcblx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YS5kZXN0cm95KCk7XHJcblx0XHR0aGlzLmxpZ2h0VW5pZm9ybUJ1ZmZlci5kZXN0cm95KCk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVTaGFkb3dNYXBUZXh0dXJlQXJyYXkobGlnaHRzOiBBcnJheTxMaWdodD4pIHtcclxuXHRcdGlmIChsaWdodHMubGVuZ3RoIDw9IDApIHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHRjb25zdCBzaGFkb3dNYXBTb3VyY2VzID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaWdodCA9IGxpZ2h0c1tpXTtcclxuXHRcdFx0aWYgKGxpZ2h0LnNoYWRvdykge1xyXG5cdFx0XHRcdGNvbnN0IHNoYWRvd01hcFRleHR1cmUgPSBsaWdodC5zaGFkb3cuZ2V0U2hhZG93TWFwVGV4dHVyZSgpO1xyXG5cdFx0XHRcdGNvbnN0IHNoYWRvd01hcFNvdXJjZSA9IHtcclxuXHRcdFx0XHRcdHNvdXJjZTogc2hhZG93TWFwVGV4dHVyZSxcclxuXHRcdFx0XHRcdHdpZHRoOiBzaGFkb3dNYXBUZXh0dXJlLnRleHR1cmVQcm9wLnNpemUud2lkdGgsXHJcblx0XHRcdFx0XHRoZWlnaHQ6IHNoYWRvd01hcFRleHR1cmUudGV4dHVyZVByb3Auc2l6ZS5oZWlnaHQsXHJcblx0XHRcdFx0XHRkZXB0aDogMSxcclxuXHRcdFx0XHRcdHg6IDAsXHJcblx0XHRcdFx0XHR5OiAwLFxyXG5cdFx0XHRcdFx0ejogaVxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0c2hhZG93TWFwU291cmNlcy5wdXNoKHNoYWRvd01hcFNvdXJjZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoc2hhZG93TWFwU291cmNlcy5sZW5ndGggPD0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRjb25zdCBzaGFkb3dNYXBUZXh0dXJlQXJyYXkgPSBuZXcgVGV4dHVyZSh7XHJcblx0XHRcdHNpemU6IHtcclxuXHRcdFx0XHR3aWR0aDogc2hhZG93TWFwU291cmNlc1swXS53aWR0aCxcclxuXHRcdFx0XHRoZWlnaHQ6IHNoYWRvd01hcFNvdXJjZXNbMF0uaGVpZ2h0LFxyXG5cdFx0XHRcdGRlcHRoOiBzaGFkb3dNYXBTb3VyY2VzLmxlbmd0aFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRmaXhlZFNpemU6IHRydWUsXHJcblx0XHRcdHNhbXBsZVR5cGU6IFRleHR1cmVTYW1wbGVUeXBlLkRlcHRoLFxyXG5cdFx0XHRmb3JtYXQ6IFRleHR1cmVGb3JtYXQuRGVwdGgyNFBsdXMsXHJcblx0XHRcdHVzYWdlOiBUZXh0dXJlVXNhZ2UuVGV4dHVyZUJpbmRpbmcgfCBUZXh0dXJlVXNhZ2UuQ29weURzdCxcclxuXHRcdFx0ZGF0YTogc2hhZG93TWFwU291cmNlcyxcclxuXHRcdFx0dmlld0Zvcm1hdHM6IFRleHR1cmVWaWV3RGltZW5zaW9uLkUyZEFycmF5XHJcblx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gc2hhZG93TWFwVGV4dHVyZUFycmF5O1xyXG5cdH1cclxuXHJcblx0c2V0U2hhZG93VW5pZm9ybSh1bmlmb3JtTmFtZTogc3RyaW5nLCBsaWdodHM6IEFycmF5PExpZ2h0PiwgdW5pZm9ybVR5cGU6IFVuaWZvcm1FbnVtKSB7XHJcblx0XHRpZiAobGlnaHRzLmxlbmd0aCkge1xyXG5cdFx0XHRjb25zdCBsaWdodFdpdGhTaGFkb3dBcnJheSA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGNvbnN0IGxpZ2h0ID0gbGlnaHRzW2ldO1xyXG5cdFx0XHRcdGlmICghbGlnaHQuc2hhZG93KSBjb250aW51ZTtcclxuXHRcdFx0XHRsaWdodFdpdGhTaGFkb3dBcnJheS5wdXNoKGxpZ2h0KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhpcy5zaGFkb3dVbmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0dW5pZm9ybU5hbWUsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGxpZ2h0V2l0aFNoYWRvd0FycmF5O1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0dW5pZm9ybVR5cGUsXHJcblx0XHRcdFx0bGlnaHRXaXRoU2hhZG93QXJyYXkubGVuZ3RoXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRyZXR1cm4gbGlnaHRXaXRoU2hhZG93QXJyYXkubGVuZ3RoO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xuaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuL0ZyYW1lU3RhdGVcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lc2hNYW5nZXIge1xuXHRwcml2YXRlIF9saXN0OiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBNZXNoPjtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5fbGlzdCA9IG5ldyBNYXAoKTtcblx0fVxuXHRnZXQgbGVuZ3RoKCkge1xuXHRcdHJldHVybiB0aGlzLl9saXN0LnNpemU7XG5cdH1cblx0dXBkYXRlKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUsIGNhbWVyYTogQ2FtZXJhKTogdm9pZCB7XG5cdFx0dGhpcy5fbGlzdC5mb3JFYWNoKChpbnN0YW5jZSkgPT4ge1xuXHRcdFx0aW5zdGFuY2UudXBkYXRlKGZyYW1lU3RhdGUsIGNhbWVyYSk7XG5cdFx0fSk7XG5cdH1cblx0YWRkKGluc3RhbmNlOiBNZXNoKTogTWVzaCB7XG5cdFx0aWYgKHRoaXMuX2xpc3QuZ2V0KGluc3RhbmNlLnVpZCkpIHJldHVybiB0aGlzLl9saXN0LmdldChpbnN0YW5jZS51aWQpO1xuXHRcdHRoaXMuX2xpc3Quc2V0KGluc3RhbmNlLnVpZCwgaW5zdGFuY2UpO1xuXHRcdHJldHVybiBpbnN0YW5jZTtcblx0fVxuXHRyZW1vdmUoaW5zdGFuY2U6IE1lc2gpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5fbGlzdC5nZXQoaW5zdGFuY2UudWlkKSkge1xuXHRcdFx0aW5zdGFuY2UuZGVzdHJveSgpO1xuXHRcdFx0dGhpcy5fbGlzdC5kZWxldGUoaW5zdGFuY2UudWlkKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Y29udGFpbnMoaW5zdGFuY2U6IE1lc2gpIHtcblx0XHRyZXR1cm4gISF0aGlzLl9saXN0LmdldChpbnN0YW5jZS51aWQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBQYXNzVHlwZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBBdHRhY2htZW50IGZyb20gXCIuL0F0dGFjaG1lbnRcIjtcclxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4vQ29udGV4dFwiO1xyXG5pbXBvcnQgUXVlcnlTZXQgZnJvbSBcIi4vUXVlcnlTZXRcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4vVGV4dHVyZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVuZGVyVGFyZ2V0IHtcclxuXHRwdWJsaWMgY29udGV4dDogQ29udGV4dDtcclxuXHRwcml2YXRlIF9yZW5kZXJQYXNzRGVzY3JpcHRvcjogR1BVUmVuZGVyUGFzc0Rlc2NyaXB0b3I7XHJcblx0cHJpdmF0ZSByZW5kZXJFbmNvZGVyOiBHUFVSZW5kZXJQYXNzRW5jb2RlcjtcclxuXHRwcml2YXRlIGNvbW1hbmRFbmNvZGVyOiBHUFVDb21tYW5kRW5jb2RlciB8IG51bGw7XHJcblx0cHJpdmF0ZSBjb21wdXRlRW5jb2RlcjogR1BVQ29tcHV0ZVBhc3NFbmNvZGVyO1xyXG5cdHRleHR1cmU6IGFueTtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHB1YmxpYyB0eXBlOiBQYXNzVHlwZSxcclxuXHRcdHB1YmxpYyBjb2xvckF0dGFjaG1lbnRzOiBBdHRhY2htZW50W10sXHJcblx0XHRwdWJsaWMgZGVwdGhBdHRhY2htZW50PzogQXR0YWNobWVudCxcclxuXHRcdHB1YmxpYyBzdGVuY2lsQXR0YWNobWVudD86IEF0dGFjaG1lbnQsXHJcblx0XHRwdWJsaWMgcXVlcnlTZXQ/OiBRdWVyeVNldFxyXG5cdCkge1xyXG5cdFx0dGhpcy5yZW5kZXJFbmNvZGVyID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5jb21wdXRlRW5jb2RlciA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX3JlbmRlclBhc3NEZXNjcmlwdG9yID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5jb21tYW5kRW5jb2RlciA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuY29udGV4dCA9IHVuZGVmaW5lZDtcclxuXHR9XHJcblx0Z2V0IHJlbmRlclBhc3NEZXNjcmlwdG9yKCkge1xyXG5cdFx0dGhpcy5fcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB0aGlzLmdldFJlbmRlclBhc3NEZXNjcmlwdG9yKCk7XHJcblx0XHRyZXR1cm4gdGhpcy5fcmVuZGVyUGFzc0Rlc2NyaXB0b3I7XHJcblx0fVxyXG5cdHB1YmxpYyBnZXRDb2xvclRleHR1cmUoaW5kZXggPSAwKTogVGV4dHVyZSB7XHJcblx0XHRjb25zdCBjb2xBdHQgPSB0aGlzLmNvbG9yQXR0YWNobWVudHNbaW5kZXhdO1xyXG5cdFx0aWYgKGNvbEF0dCkge1xyXG5cdFx0XHRyZXR1cm4gY29sQXR0LnRleHR1cmUgYXMgVGV4dHVyZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRwdWJsaWMgZ2V0RGVwdGhUZXh0dXJlKCk6IFRleHR1cmUge1xyXG5cdFx0aWYgKHRoaXMuZGVwdGhBdHRhY2htZW50KSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlIGFzIFRleHR1cmU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHByaXZhdGUgZ2V0UmVuZGVyUGFzc0Rlc2NyaXB0b3IoKTogR1BVUmVuZGVyUGFzc0Rlc2NyaXB0b3IgfCBudWxsIHtcclxuXHRcdHRoaXMuY2hlY2tTaXplKCk7XHJcblx0XHR0aGlzLmRlcHRoQXR0YWNobWVudD8udGV4dHVyZT8udXBkYXRlKHRoaXMuY29udGV4dCk7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHQuLi4odGhpcy5jb2xvckF0dGFjaG1lbnRzICYmIHtcclxuXHRcdFx0XHRjb2xvckF0dGFjaG1lbnRzOiB0aGlzLmNvbG9yQXR0YWNobWVudHMubWFwKChjb2xvckF0dGFjaG1lbnQpID0+IHtcclxuXHRcdFx0XHRcdGNvbG9yQXR0YWNobWVudD8udGV4dHVyZT8udXBkYXRlICYmIGNvbG9yQXR0YWNobWVudD8udGV4dHVyZT8udXBkYXRlKHRoaXMuY29udGV4dCk7XHJcblx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHR2aWV3OlxyXG5cdFx0XHRcdFx0XHRcdC8vIOaaguaXtui/meS5iOWGmVxyXG5cdFx0XHRcdFx0XHRcdGNvbG9yQXR0YWNobWVudC50ZXh0dXJlLnRleHR1cmVWaWV3IHx8IHVuZGVmaW5lZCxcclxuXHRcdFx0XHRcdFx0cmVzb2x2ZVRhcmdldDpcclxuXHRcdFx0XHRcdFx0XHRjb2xvckF0dGFjaG1lbnQucmVzb2x2ZVRhcmdldCAhPSB1bmRlZmluZWRcclxuXHRcdFx0XHRcdFx0XHRcdD8gY29sb3JBdHRhY2htZW50LnJlc29sdmVUYXJnZXQudGV4dHVyZVZpZXdcclxuXHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkLFxyXG5cdFx0XHRcdFx0XHRjbGVhclZhbHVlOiBjb2xvckF0dGFjaG1lbnQudmFsdWUsXHJcblx0XHRcdFx0XHRcdGxvYWRPcDogY29sb3JBdHRhY2htZW50Lm9wLFxyXG5cdFx0XHRcdFx0XHRzdG9yZU9wOiBjb2xvckF0dGFjaG1lbnQuc3RvcmVPcFxyXG5cdFx0XHRcdFx0fSBhcyBHUFVSZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50O1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0pLFxyXG5cdFx0XHQuLi4oKHRoaXMuZGVwdGhBdHRhY2htZW50IHx8IHRoaXMuc3RlbmNpbEF0dGFjaG1lbnQpICYmIHtcclxuXHRcdFx0XHRkZXB0aFN0ZW5jaWxBdHRhY2htZW50OiB7XHJcblx0XHRcdFx0XHR2aWV3OiB0aGlzLmRlcHRoQXR0YWNobWVudD8udGV4dHVyZT8udGV4dHVyZVZpZXcgfHwgdW5kZWZpbmVkLFxyXG5cdFx0XHRcdFx0ZGVwdGhMb2FkT3A6IHRoaXMuZGVwdGhBdHRhY2htZW50Py5vcCB8fCBcImNsZWFyXCIsXHJcblx0XHRcdFx0XHRkZXB0aENsZWFyVmFsdWU6IHRoaXMuZGVwdGhBdHRhY2htZW50Py52YWx1ZSB8fCAxLjAsXHJcblx0XHRcdFx0XHRkZXB0aFN0b3JlT3A6IHRoaXMuZGVwdGhBdHRhY2htZW50Py5zdG9yZU9wIHx8IFwic3RvcmVcIixcclxuXHRcdFx0XHRcdGRlcHRoUmVhZE9ubHk6IHRoaXMuZGVwdGhBdHRhY2htZW50Py5yZWFkT25seSB8fCBmYWxzZVxyXG5cdFx0XHRcdFx0Ly8gc3RlbmNpbExvYWRPcDogdGhpcy5zdGVuY2lsQXR0YWNobWVudD8ub3AgfHwgXCJjbGVhclwiLFxyXG5cdFx0XHRcdFx0Ly8gc3RlbmNpbENsZWFyVmFsdWU6IHRoaXMuc3RlbmNpbEF0dGFjaG1lbnQ/LnZhbHVlIHx8IDAsXHJcblx0XHRcdFx0XHQvLyBzdGVuY2lsU3RvcmVPcDogdGhpcy5zdGVuY2lsQXR0YWNobWVudD8uc3RvcmVPcCB8fCBcInN0b3JlXCIsXHJcblx0XHRcdFx0fSBhcyBHUFVSZW5kZXJQYXNzRGVwdGhTdGVuY2lsQXR0YWNobWVudFxyXG5cdFx0XHR9KVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBiZWdpblJlbmRlclBhc3NFbmNvZGVyKGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdGlmICghdGhpcy5jb250ZXh0KSB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG5cdFx0Y29uc3QgeyBkZXZpY2UgfSA9IHRoaXMuY29udGV4dDtcclxuXHRcdHRoaXMuY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTtcclxuXHRcdHRoaXMucmVuZGVyRW5jb2RlciA9IHRoaXMuY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHRoaXMucmVuZGVyUGFzc0Rlc2NyaXB0b3IpO1xyXG5cdFx0cmV0dXJuIHRoaXMucmVuZGVyRW5jb2RlcjtcclxuXHR9XHJcblx0cHVibGljIGVuZFJlbmRlclBhc3NFbmNvZGVyKCkge1xyXG5cdFx0dGhpcy5yZW5kZXJFbmNvZGVyPy5lbmQoKTtcclxuXHRcdHRoaXMuY29udGV4dC5kZXZpY2UucXVldWUuc3VibWl0KFt0aGlzLmNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpXSk7XHJcblx0XHR0aGlzLmNvbW1hbmRFbmNvZGVyID0gbnVsbDtcclxuXHRcdHRoaXMucmVuZGVyRW5jb2RlciA9IG51bGw7XHJcblx0fVxyXG5cdHB1YmxpYyBiZWdpbkNvbXB1dGVQYXNzRW5jb2Rlcihjb250ZXh0OiBDb250ZXh0KSB7XHJcblx0XHRpZiAoIXRoaXMuY29udGV4dCkgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuXHRcdGNvbnN0IHsgZGV2aWNlIH0gPSB0aGlzLmNvbnRleHQ7XHJcblx0XHR0aGlzLmNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7XHJcblx0XHR0aGlzLmNvbXB1dGVFbmNvZGVyID0gdGhpcy5jb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7XHJcblx0XHRyZXR1cm4gdGhpcy5jb21wdXRlRW5jb2RlcjtcclxuXHR9XHJcblx0cHVibGljIGVuZENvbXB1dGVQYXNzRW5jb2RlcigpIHtcclxuXHRcdHRoaXMuY29tcHV0ZUVuY29kZXI/LmVuZCgpO1xyXG5cdFx0dGhpcy5jb250ZXh0LmRldmljZS5xdWV1ZS5zdWJtaXQoW3RoaXMuY29tbWFuZEVuY29kZXIuZmluaXNoKCldKTtcclxuXHRcdHRoaXMuY29tbWFuZEVuY29kZXIgPSBudWxsO1xyXG5cdFx0dGhpcy5yZW5kZXJFbmNvZGVyID0gbnVsbDtcclxuXHR9XHJcblx0cHJpdmF0ZSBjaGVja1NpemUoKSB7XHJcblx0XHRjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGRlcHRoIH0gPSB0aGlzLmNvbnRleHQucHJlc2VudGF0aW9uU2l6ZTtcclxuXHRcdGlmICh0aGlzLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKSB7XHJcblx0XHRcdGNvbnN0IHNpemUgPSB0aGlzLmRlcHRoQXR0YWNobWVudD8udGV4dHVyZT8udGV4dHVyZVByb3A/LnNpemU7XHJcblx0XHRcdGlmICh3aWR0aCAhPSBzaXplPy53aWR0aCB8fCBoZWlnaHQgIT0gc2l6ZT8uaGVpZ2h0IHx8IGRlcHRoICE9IHNpemU/LmRlcHRoKSB7XHJcblx0XHRcdFx0dGhpcy5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZS5zZXRTaXplKHdpZHRoLCBoZWlnaHQsIGRlcHRoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuY29sb3JBdHRhY2htZW50cykge1xyXG5cdFx0XHR0aGlzLmNvbG9yQXR0YWNobWVudHMuZm9yRWFjaCgoY29sb3JBdHRhY2htZW50KSA9PiB7XHJcblx0XHRcdFx0aWYgKGNvbG9yQXR0YWNobWVudC50ZXh0dXJlKSB7XHJcblx0XHRcdFx0XHRjb25zdCBzaXplID0gY29sb3JBdHRhY2htZW50Py50ZXh0dXJlPy50ZXh0dXJlUHJvcD8uc2l6ZTtcclxuXHRcdFx0XHRcdGlmIChzaXplICYmICh3aWR0aCAhPSBzaXplPy53aWR0aCB8fCBoZWlnaHQgIT0gc2l6ZT8uaGVpZ2h0IHx8IGRlcHRoICE9IHNpemU/LmRlcHRoKSlcclxuXHRcdFx0XHRcdFx0Y29sb3JBdHRhY2htZW50LnRleHR1cmUuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdGlmICh0aGlzLmNvbG9yQXR0YWNobWVudHMpIHtcclxuXHRcdFx0dGhpcy5jb2xvckF0dGFjaG1lbnRzLmZvckVhY2goKGNvbG9yQXR0YWNobWVudCkgPT4ge1xyXG5cdFx0XHRcdGlmIChjb2xvckF0dGFjaG1lbnQudGV4dHVyZSkge1xyXG5cdFx0XHRcdFx0Y29sb3JBdHRhY2htZW50LnRleHR1cmUuZGVzdHJveSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZSkgdGhpcy5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZS5kZXN0cm95KCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IFRleHR1cmVGb3JtYXQsIFRleHR1cmVVc2FnZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tIFwiLi4vZ2VvbWV0cnkvR2VvbWV0cnlcIjtcclxuaW1wb3J0IFNoYWRlck1hdGVyaWFsIGZyb20gXCIuLi9tYXRlcmlhbC9TaGFkZXJNYXRlcmlhbFwiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xyXG5pbXBvcnQgQXR0YWNobWVudCBmcm9tIFwiLi4vcmVuZGVyL0F0dGFjaG1lbnRcIjtcclxuaW1wb3J0IHsgRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XHJcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9yZW5kZXIvQ29udGV4dFwiO1xyXG5pbXBvcnQgUmVuZGVyVGFyZ2V0IGZyb20gXCIuLi9yZW5kZXIvUmVuZGVyVGFyZ2V0XCI7XHJcbmltcG9ydCBTYW1wbGVyIGZyb20gXCIuLi9yZW5kZXIvU2FtcGxlclwiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcclxuaW1wb3J0IGdldFZlcnRGcmFnIGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyc1wiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXNvbHZlRnJhbWUge1xyXG5cdGNhbnZhc1JlbmRlclRhcmdldDogUmVuZGVyVGFyZ2V0O1xyXG5cdG1hdGVyaWFsOiBTaGFkZXJNYXRlcmlhbDtcclxuXHRnZW9tZXRyeTogR2VvbWV0cnk7XHJcblx0cXVhZE1lc2g6IE1lc2g7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHR0aGlzLmdlb21ldHJ5ID0gbmV3IEdlb21ldHJ5KHt9KTtcclxuXHRcdHRoaXMuZ2VvbWV0cnkuc2V0QXR0cmlidXRlKFxyXG5cdFx0XHRuZXcgRmxvYXQzMkF0dHJpYnV0ZShcInBvc2l0aW9uXCIsIFstMS4wLCAxLjAsIC0xLjAsIC0xLjAsIDEuMCwgLTEuMCwgMS4wLCAtMS4wLCAxLjAsIDEuMCwgLTEuMCwgMS4wXSwgMilcclxuXHRcdCk7XHJcblx0XHR0aGlzLmdlb21ldHJ5LmNvdW50ID0gNjtcclxuXHRcdGNvbnN0IHNoYWRlciA9IGdldFZlcnRGcmFnKFwicmVzb2x2ZVwiLCB7IHBvc2l0aW9uTG9jYXRpb246IDAgfSk7XHJcblx0XHR0aGlzLm1hdGVyaWFsID0gbmV3IFNoYWRlck1hdGVyaWFsKHtcclxuXHRcdFx0dHlwZTogXCJyZXNvbHZlXCIsXHJcblx0XHRcdGZyYWc6IHNoYWRlci5mcmFnLFxyXG5cdFx0XHR2ZXJ0OiBzaGFkZXIudmVydCxcclxuXHRcdFx0dW5pZm9ybXM6IHtcclxuXHRcdFx0XHR0ZXh0dXJlOiB7XHJcblx0XHRcdFx0XHR0eXBlOiBcInRleHR1cmVcIixcclxuXHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWRcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHNhbXBsZXI6IHtcclxuXHRcdFx0XHRcdHR5cGU6IFwic2FtcGxlclwiLFxyXG5cdFx0XHRcdFx0dmFsdWU6IG5ldyBTYW1wbGVyKHtcclxuXHRcdFx0XHRcdFx0bWFnRmlsdGVyOiBcImxpbmVhclwiLFxyXG5cdFx0XHRcdFx0XHRtaW5GaWx0ZXI6IFwibGluZWFyXCJcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMucXVhZE1lc2ggPSBuZXcgTWVzaCh0aGlzLmdlb21ldHJ5LCB0aGlzLm1hdGVyaWFsKTtcclxuXHR9XHJcblx0cmVuZGVyKGNvbnRleHQ6IENvbnRleHQsIGNvbG9yVGV4dHVyZT86IFRleHR1cmUpIHtcclxuXHRcdGlmICghdGhpcy5jYW52YXNSZW5kZXJUYXJnZXQpIHRoaXMuaW5pdFJlbmRlclRhcmdldChjb250ZXh0KTtcclxuXHRcdC8vIHRoaXMubWF0ZXJpYWxcclxuXHRcdHRoaXMubWF0ZXJpYWwudW5pZm9ybXMudGV4dHVyZS52YWx1ZSA9IGNvbG9yVGV4dHVyZTtcclxuXHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdHRoaXMuY2FudmFzUmVuZGVyVGFyZ2V0LmNvbG9yQXR0YWNobWVudHNbMF0udGV4dHVyZSA9IHtcclxuXHRcdFx0dGV4dHVyZVZpZXc6IGNvbnRleHQuY29udGV4dC5nZXRDdXJyZW50VGV4dHVyZSgpLmNyZWF0ZVZpZXcoKVxyXG5cdFx0fTtcclxuXHRcdHRoaXMubWF0ZXJpYWwudXBkYXRlKHVuZGVmaW5lZCwgdGhpcy5xdWFkTWVzaCk7XHJcblxyXG5cdFx0Y29uc3QgZHJhd0NvbWFuZCA9IHRoaXMucXVhZE1lc2guZ2V0RHJhd0NvbW1hbmQoKTtcclxuXHJcblx0XHRjb25zdCBjdXJyZW50UmVuZGVyUGFzc0VuY29kZXIgPSB0aGlzLmNhbnZhc1JlbmRlclRhcmdldC5iZWdpblJlbmRlclBhc3NFbmNvZGVyKGNvbnRleHQpO1xyXG5cclxuXHRcdGRyYXdDb21hbmQucmVuZGVyKGNvbnRleHQsIGN1cnJlbnRSZW5kZXJQYXNzRW5jb2Rlcik7XHJcblxyXG5cdFx0dGhpcy5jYW52YXNSZW5kZXJUYXJnZXQuZW5kUmVuZGVyUGFzc0VuY29kZXIoKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBpbml0UmVuZGVyVGFyZ2V0KGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZGVwdGggfSA9IGNvbnRleHQucHJlc2VudGF0aW9uU2l6ZTtcclxuXHRcdGNvbnN0IGNvbG9yQXR0YWNobWVudCA9IG5ldyBBdHRhY2htZW50KFxyXG5cdFx0XHR7IHI6IDAuMCwgZzogMC4wLCBiOiAwLjAsIGE6IDAgfSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdFx0XHR0ZXh0dXJlOiB7XHJcblx0XHRcdFx0XHR0ZXh0dXJlVmlldzogdW5kZWZpbmVkXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdFx0Y29uc3QgZGVwdGhUZXh0dXJlID0gbmV3IFRleHR1cmUoe1xyXG5cdFx0XHRsYWJlbDogXCJyZXNvbHZlRGVwdGhcIixcclxuXHRcdFx0c2l6ZTogeyB3aWR0aCwgaGVpZ2h0LCBkZXB0aCB9LFxyXG5cdFx0XHRmb3JtYXQ6IFRleHR1cmVGb3JtYXQuRGVwdGgyNFBsdXMsXHJcblx0XHRcdHVzYWdlOiBUZXh0dXJlVXNhZ2UuUmVuZGVyQXR0YWNobWVudFxyXG5cdFx0fSk7XHJcblx0XHRjb25zdCBkZXB0aEF0dGFjaG1lbnQgPSBuZXcgQXR0YWNobWVudCgxLjAsIHsgdGV4dHVyZTogZGVwdGhUZXh0dXJlIH0pO1xyXG5cdFx0dGhpcy5jYW52YXNSZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0KFwicmVuZGVyXCIsIFtjb2xvckF0dGFjaG1lbnRdLCBkZXB0aEF0dGFjaG1lbnQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vcmVuZGVyL0NvbnRleHRcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcbmltcG9ydCBQb3N0RWZmZWN0IGZyb20gXCIuL1Bvc3RFZmZlY3RcIjtcclxuaW1wb3J0IFJlc29sdmVGcmFtZSBmcm9tIFwiLi9SZXNvbHZlRnJhbWVcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBvc3RFZmZlY3RDb2xsZWN0aW9uIHtcclxuXHRwcml2YXRlIF9wb3N0RWZmZWN0czogTWFwPHN0cmluZywgUG9zdEVmZmVjdD47XHJcblx0cHVibGljIGN1cnJlbnRDb2xvclRleHR1cmU6IFRleHR1cmU7XHJcblx0cHJpdmF0ZSByZXNvbHZlRnJhbWU6IFJlc29sdmVGcmFtZTtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHRoaXMuX3Bvc3RFZmZlY3RzID0gbmV3IE1hcCgpO1xyXG5cdFx0dGhpcy5jdXJyZW50Q29sb3JUZXh0dXJlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5yZXNvbHZlRnJhbWUgPSBuZXcgUmVzb2x2ZUZyYW1lKCk7XHJcblx0fVxyXG5cdGFkZChwb3N0RWZmZWN0OiBQb3N0RWZmZWN0KSB7XHJcblx0XHR0aGlzLl9wb3N0RWZmZWN0cy5zZXQocG9zdEVmZmVjdC5pZCwgcG9zdEVmZmVjdCk7XHJcblx0fVxyXG5cdHJlbW92ZShwb3N0RWZmZWN0OiBQb3N0RWZmZWN0KSB7XHJcblx0XHR0aGlzLl9wb3N0RWZmZWN0cy5kZWxldGUocG9zdEVmZmVjdC5pZCk7XHJcblx0XHRwb3N0RWZmZWN0LmRlc3Ryb3koKTtcclxuXHR9XHJcblx0cmVuZGVyKGNvbnRleHQ6IENvbnRleHQsIGNvbG9yVGV4dHVyZTogVGV4dHVyZSk6IHZvaWQge1xyXG5cdFx0dGhpcy5jdXJyZW50Q29sb3JUZXh0dXJlID0gY29sb3JUZXh0dXJlO1xyXG5cdFx0dGhpcy5fcG9zdEVmZmVjdHMuZm9yRWFjaCgocG9zdEVmZmVjdCkgPT4ge1xyXG5cdFx0XHR0aGlzLmN1cnJlbnRDb2xvclRleHR1cmUgPSBwb3N0RWZmZWN0LnJlbmRlcihjb250ZXh0LCB0aGlzLmN1cnJlbnRDb2xvclRleHR1cmUpO1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzLnJlc29sdmVGcmFtZS5yZW5kZXIoY29udGV4dCwgdGhpcy5jdXJyZW50Q29sb3JUZXh0dXJlKTtcclxuXHR9XHJcblx0c2V0UmVzb2x2ZUZyYW1lRGlydHkodmFsdWU6IGJvb2xlYW4pIHtcclxuXHRcdHRoaXMucmVzb2x2ZUZyYW1lLm1hdGVyaWFsLmRpcnR5ID0gdmFsdWU7XHJcblx0fVxyXG5cdHByaXZhdGUgcG9zdEVmZmVjdHNTb3J0KCkge1xyXG5cdFx0Ly8gdGhpcy5fcG9zdEVmZmVjdHMuc29ydCgpXHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlLmpzXCI7XHJcbmltcG9ydCB7IE1hdGVyaWFsIH0gZnJvbSBcIi4uL21hdGVyaWFsL01hdGVyaWFsLmpzXCI7XHJcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9yZW5kZXIvQ29udGV4dC5qc1wiO1xyXG5pbXBvcnQgeyBUYXJnZXQgfSBmcm9tIFwiLi4vcmVuZGVyL1JlbmRlclN0YXRlXCI7XHJcbmltcG9ydCBSZW5kZXJUYXJnZXQgZnJvbSBcIi4uL3JlbmRlci9SZW5kZXJUYXJnZXQuanNcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlLmpzXCI7XHJcblxyXG5jbGFzcyBQYXNzIHtcclxuXHRwdWJsaWMgcmVuZGVyVGFyZ2V0OiBSZW5kZXJUYXJnZXQ7XHJcblx0cHVibGljIGNvbXB1dGVUYXJnZXQ6IFJlbmRlclRhcmdldDtcclxuXHRwdWJsaWMgY29udGV4dDogQ29udGV4dDtcclxuXHRwdWJsaWMgb3ZlcnJpZGVNYXRlcmlhbD86IE1hdGVyaWFsO1xyXG5cdHB1YmxpYyBjb2xvclRhcmdldHM/OiBBcnJheTxUYXJnZXQ+O1xyXG5cdHB1YmxpYyBwYXNzUmVuZGVyRW5jb2RlcjogR1BVUmVuZGVyUGFzc0VuY29kZXIgfCBudWxsO1xyXG5cdHB1YmxpYyBwYXNzQ29tcHV0ZUVuY29kZXI6IEdQVUNvbXB1dGVQYXNzRW5jb2RlcjtcclxuXHRjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0KSB7XHJcblx0XHR0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG5cdH1cclxuXHRyZW5kZXIoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSk6IHZvaWQge31cclxuXHRiZWZvcmVSZW5kZXIob3B0aW9ucz86IGFueSkge1xyXG5cdFx0dGhpcy5wYXNzUmVuZGVyRW5jb2RlciA9IHRoaXMucmVuZGVyVGFyZ2V0LmJlZ2luUmVuZGVyUGFzc0VuY29kZXIodGhpcy5jb250ZXh0KTtcclxuXHRcdGlmICh0aGlzLmNvbXB1dGVUYXJnZXQpIHRoaXMucGFzc0NvbXB1dGVFbmNvZGVyID0gdGhpcy5jb21wdXRlVGFyZ2V0LmJlZ2luQ29tcHV0ZVBhc3NFbmNvZGVyKHRoaXMuY29udGV4dCk7XHJcblx0fVxyXG5cdGdldENvbG9yVGV4dHVyZShpbmRleCA9IDApOiBUZXh0dXJlIHtcclxuXHRcdHJldHVybiB0aGlzLnJlbmRlclRhcmdldC5nZXRDb2xvclRleHR1cmUoaW5kZXgpIGFzIFRleHR1cmU7XHJcblx0fVxyXG5cdGdldERlcHRoVGV4dHVyZSgpOiBUZXh0dXJlIHwgeyBncHVUZXh0dXJlOiBHUFVUZXh0dXJlIH0ge1xyXG5cdFx0cmV0dXJuIHRoaXMucmVuZGVyVGFyZ2V0LmdldERlcHRoVGV4dHVyZSgpO1xyXG5cdH1cclxuXHRhZnRlclJlbmRlcigpIHtcclxuXHRcdHRoaXMucmVuZGVyVGFyZ2V0LmVuZFJlbmRlclBhc3NFbmNvZGVyKCk7XHJcblx0XHRpZiAodGhpcy5jb21wdXRlVGFyZ2V0KSB0aGlzLmNvbXB1dGVUYXJnZXQuZW5kQ29tcHV0ZVBhc3NFbmNvZGVyKCk7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQYXNzO1xyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XHJcbmltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XHJcbmltcG9ydCB7IFRleHR1cmVGb3JtYXQsIFRleHR1cmVVc2FnZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCBDb2xvciBmcm9tIFwiLi4vbWF0aC9Db2xvclwiO1xyXG5pbXBvcnQgQXR0YWNobWVudCBmcm9tIFwiLi4vcmVuZGVyL0F0dGFjaG1lbnRcIjtcclxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL3JlbmRlci9Db250ZXh0XCI7XHJcbmltcG9ydCBEcmF3Q29tbWFuZCBmcm9tIFwiLi4vcmVuZGVyL0RyYXdDb21tYW5kXCI7XHJcbmltcG9ydCBSZW5kZXJUYXJnZXQgZnJvbSBcIi4uL3JlbmRlci9SZW5kZXJUYXJnZXRcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcbmltcG9ydCBQYXNzIGZyb20gXCIuL1Bhc3NcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBCYXNpY1Bhc3MgZXh0ZW5kcyBQYXNzIHtcclxuXHRza3lib3hEcmF3Q29tYW5kOiBEcmF3Q29tbWFuZDtcclxuXHRjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0KSB7XHJcblx0XHRzdXBlcihjb250ZXh0KTtcclxuXHRcdHRoaXMuaW5pdChjb250ZXh0KTtcclxuXHR9XHJcblxyXG5cdGJlZm9yZVJlbmRlcihmcmFtZVN0YXRlOiBGcmFtZVN0YXRlKSB7XHJcblx0XHR0aGlzLnVwZGF0ZVJlbmRlclRhcmdldChmcmFtZVN0YXRlKTtcclxuXHJcblx0XHRzdXBlci5iZWZvcmVSZW5kZXIoKTtcclxuXHR9XHJcblxyXG5cdHJlbmRlcihmcmFtZVN0YXRlOiBGcmFtZVN0YXRlLCBjYW1lcmE/OiBDYW1lcmEpIHtcclxuXHRcdGNvbnN0IHsgcmVuZGVyUXVldWUsIGxpZ2h0TWFuZ2VyIH0gPSBmcmFtZVN0YXRlO1xyXG5cclxuXHRcdHJlbmRlclF1ZXVlLnNvcnQoKTtcclxuXHRcdHJlbmRlclF1ZXVlLnByZVJlbmRlcihjYW1lcmEsIHRoaXMuY29udGV4dCwgdGhpcy5wYXNzUmVuZGVyRW5jb2Rlcik7XHJcblx0XHRyZW5kZXJRdWV1ZS50cmFuc3BhcmVudFJlbmRlcihjYW1lcmEsIHRoaXMuY29udGV4dCwgdGhpcy5wYXNzUmVuZGVyRW5jb2RlciwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGxpZ2h0TWFuZ2VyKTtcclxuXHRcdHJlbmRlclF1ZXVlLm9wYXF1ZVJlbmRlcihjYW1lcmEsIHRoaXMuY29udGV4dCwgdGhpcy5wYXNzUmVuZGVyRW5jb2RlciwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGxpZ2h0TWFuZ2VyKTtcclxuXHRcdHJlbmRlclF1ZXVlLmRlYnVnUXVldWVSZW5kZXIoY2FtZXJhLCB0aGlzLmNvbnRleHQsIHRoaXMucGFzc1JlbmRlckVuY29kZXIpO1xyXG5cdH1cclxuXHRwcml2YXRlIGluaXQoY29udGV4dDogQ29udGV4dCkge1xyXG5cdFx0dGhpcy5jcmVhdGVSZW5kZXJUYXJnZXQoY29udGV4dCk7XHJcblx0fVxyXG5cdHByaXZhdGUgY3JlYXRlUmVuZGVyVGFyZ2V0KGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZGVwdGggfSA9IHRoaXMuY29udGV4dC5wcmVzZW50YXRpb25TaXplO1xyXG5cdFx0Y29uc3QgY29sb3JUZXh0dXJlID0gbmV3IFRleHR1cmUoe1xyXG5cdFx0XHRsYWJlbDogXCJiYXNpY1Bhc3NDb2xvclwiLFxyXG5cdFx0XHRzaXplOiB7IHdpZHRoLCBoZWlnaHQsIGRlcHRoIH0sXHJcblx0XHRcdGZvcm1hdDogdGhpcy5jb250ZXh0LnByZXNlbnRhdGlvbkZvcm1hdCxcclxuXHRcdFx0dXNhZ2U6IFRleHR1cmVVc2FnZS5SZW5kZXJBdHRhY2htZW50IHwgVGV4dHVyZVVzYWdlLlRleHR1cmVCaW5kaW5nXHJcblx0XHR9KTtcclxuXHRcdGNvbnN0IGRlcHRoVGV4dHVyZSA9IG5ldyBUZXh0dXJlKHtcclxuXHRcdFx0bGFiZWw6IFwiYmFzaWNQYXNzRGVwdGhcIixcclxuXHRcdFx0c2l6ZTogeyB3aWR0aCwgaGVpZ2h0LCBkZXB0aCB9LFxyXG5cdFx0XHRmb3JtYXQ6IFRleHR1cmVGb3JtYXQuRGVwdGgyNFBsdXMsXHJcblx0XHRcdHVzYWdlOiBUZXh0dXJlVXNhZ2UuUmVuZGVyQXR0YWNobWVudFxyXG5cdFx0fSk7XHJcblx0XHRjb25zdCBjb2xvckF0dGFjaG1lbnQgPSBuZXcgQXR0YWNobWVudCh7IHI6IDAuMCwgZzogMC4wLCBiOiAwLjAsIGE6IDAuMCB9LCB7IHRleHR1cmU6IGNvbG9yVGV4dHVyZSB9KTtcclxuXHRcdGNvbnN0IGRlcHRoQXR0YWNobWVudCA9IG5ldyBBdHRhY2htZW50KDEuMCwgeyB0ZXh0dXJlOiBkZXB0aFRleHR1cmUgfSk7XHJcblx0XHR0aGlzLnJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoXCJyZW5kZXJcIiwgW2NvbG9yQXR0YWNobWVudF0sIGRlcHRoQXR0YWNobWVudCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHVwZGF0ZVJlbmRlclRhcmdldChmcmFtZVN0YXRlOiBGcmFtZVN0YXRlKSB7XHJcblx0XHRpZiAoZnJhbWVTdGF0ZT8uYmFja2dyb3VuZD8udmFsdWUgaW5zdGFuY2VvZiBDb2xvcikge1xyXG5cdFx0XHRjb25zdCB7IHJlZCwgZ3JlZW4sIGJsdWUgfSA9IGZyYW1lU3RhdGUuYmFja2dyb3VuZC52YWx1ZTtcclxuXHRcdFx0Y29uc3Qgb3BhY2l0eSA9IGZyYW1lU3RhdGUuYmFja2dyb3VuZD8ub3BhY2l0eTtcclxuXHRcdFx0Y29uc3QgY2xlYXJWYWx1ZSA9IHtcclxuXHRcdFx0XHRyOiByZWQsXHJcblx0XHRcdFx0ZzogZ3JlZW4sXHJcblx0XHRcdFx0YjogYmx1ZSxcclxuXHRcdFx0XHRhOiBvcGFjaXR5ID8/IDEuMFxyXG5cdFx0XHR9O1xyXG5cdFx0XHR0aGlzLnJlbmRlclRhcmdldC5jb2xvckF0dGFjaG1lbnRzWzBdLnZhbHVlID0gY2xlYXJWYWx1ZTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IEdNYXRoIGZyb20gXCIuL01hdGhcIjtcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4vTWF0cml4NFwiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi9WZWN0b3IzXCI7XHJcbmltcG9ydCBWZWN0b3I0IGZyb20gXCIuL1ZlY3RvcjRcIjtcclxuXHJcbi8qKlxyXG4gKiBBIHBsYW5lIGluIEhlc3NpYW4gTm9ybWFsIEZvcm0gZGVmaW5lZCBieVxyXG4gKiA8cHJlPlxyXG4gKiBheCArIGJ5ICsgY3ogKyBkID0gMFxyXG4gKiA8L3ByZT5cclxuICogd2hlcmUgKGEsIGIsIGMpIGlzIHRoZSBwbGFuZSdzIDxjb2RlPm5vcm1hbDwvY29kZT4sIGQgaXMgdGhlIHNpZ25lZFxyXG4gKiA8Y29kZT5kaXN0YW5jZTwvY29kZT4gdG8gdGhlIHBsYW5lLCBhbmQgKHgsIHksIHopIGlzIGFueSBwb2ludCBvblxyXG4gKiB0aGUgcGxhbmUuXHJcbiAqXHJcbiAqIEBhbGlhcyBQbGFuZVxyXG4gKiBAY29uc3RydWN0b3JcclxuICpcclxuICogQHBhcmFtIHtWZWN0b3IzfSBub3JtYWwgVGhlIHBsYW5lJ3Mgbm9ybWFsIChub3JtYWxpemVkKS5cclxuICogQHBhcmFtIHtOdW1iZXJ9IGRpc3RhbmNlIFRoZSBzaG9ydGVzdCBkaXN0YW5jZSBmcm9tIHRoZSBvcmlnaW4gdG8gdGhlIHBsYW5lLiAgVGhlIHNpZ24gb2ZcclxuICogQGV4YW1wbGVcclxuICogLy8gVGhlIHBsYW5lIHg9MFxyXG4gKiBjb25zdCBwbGFuZSA9IG5ldyBQbGFuZShWZWN0b3IzLlVOSVRfWCwgMC4wKTtcclxuICpcclxuICogQGV4Y2VwdGlvbiB7RGV2ZWxvcGVyRXJyb3J9IE5vcm1hbCBtdXN0IGJlIG5vcm1hbGl6ZWRcclxuICovXHJcbmNsYXNzIFBsYW5lIHtcclxuXHRub3JtYWw6IFZlY3RvcjM7XHJcblx0ZGlzdGFuY2U6IG51bWJlcjtcclxuXHRwdWJsaWMgc3RhdGljIE9SSUdJTl9YWV9QTEFORSA9IE9iamVjdC5mcmVlemUobmV3IFBsYW5lKFZlY3RvcjMuVU5JVF9aLCAwLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBPUklHSU5fWVpfUExBTkUgPSBPYmplY3QuZnJlZXplKG5ldyBQbGFuZShWZWN0b3IzLlVOSVRfWCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgT1JJR0lOX1pYX1BMQU5FID0gT2JqZWN0LmZyZWV6ZShuZXcgUGxhbmUoVmVjdG9yMy5VTklUX1ksIDAuMCkpO1xyXG5cdGNvbnN0cnVjdG9yKG5vcm1hbDogVmVjdG9yMywgZGlzdGFuY2U6IG51bWJlcikge1xyXG5cdFx0dGhpcy5ub3JtYWwgPSBWZWN0b3IzLmNsb25lKG5vcm1hbCk7XHJcblxyXG5cdFx0dGhpcy5kaXN0YW5jZSA9IGRpc3RhbmNlO1xyXG5cdH1cclxuXHRub3JtYWxpemUoKSB7XHJcblx0XHRjb25zdCBpbnZlcnNlTm9ybWFsTGVuZ3RoID0gMS4wIC8gdGhpcy5ub3JtYWwubGVuZ3RoKCk7XHJcblx0XHR0aGlzLm5vcm1hbCA9IFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcih0aGlzLm5vcm1hbCwgaW52ZXJzZU5vcm1hbExlbmd0aCwgdGhpcy5ub3JtYWwpO1xyXG5cdFx0dGhpcy5kaXN0YW5jZSAqPSBpbnZlcnNlTm9ybWFsTGVuZ3RoO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVBvaW50Tm9ybWFsKHBvaW50OiBWZWN0b3IzLCBub3JtYWw6IFZlY3RvcjMsIHJlc3VsdDogUGxhbmUpOiBQbGFuZSB7XHJcblx0XHRpZiAoIUdNYXRoLmVxdWFsc0Vwc2lsb24oVmVjdG9yMy5tYWduaXR1ZGUobm9ybWFsKSwgMS4wLCBHTWF0aC5FUFNJTE9ONikpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm9ybWFsIG11c3QgYmUgbm9ybWFsaXplZC5cIik7XHJcblx0XHR9XHJcblx0XHQvLyA+PmluY2x1ZGVFbmQoJ2RlYnVnJyk7XHJcblxyXG5cdFx0Y29uc3QgZGlzdGFuY2UgPSAtVmVjdG9yMy5kb3Qobm9ybWFsLCBwb2ludCk7XHJcblxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQbGFuZShub3JtYWwsIGRpc3RhbmNlKTtcclxuXHRcdH1cclxuXHJcblx0XHRWZWN0b3IzLmNsb25lKG5vcm1hbCwgcmVzdWx0Lm5vcm1hbCk7XHJcblx0XHRyZXN1bHQuZGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVZlY3RvcjQoY29lZmZpY2llbnRzOiBWZWN0b3I0LCByZXN1bHQ6IFBsYW5lKTogUGxhbmUge1xyXG5cdFx0Y29uc3Qgbm9ybWFsID0gVmVjdG9yMy5mcm9tVmVjdG9yNChjb2VmZmljaWVudHMsIHNjcmF0Y2hOb3JtYWwpO1xyXG5cdFx0Y29uc3QgZGlzdGFuY2UgPSBjb2VmZmljaWVudHMudztcclxuXHJcblx0XHQvLyA+PmluY2x1ZGVTdGFydCgnZGVidWcnLCBwcmFnbWFzLmRlYnVnKTtcclxuXHRcdGlmICghR01hdGguZXF1YWxzRXBzaWxvbihWZWN0b3IzLm1hZ25pdHVkZShub3JtYWwpLCAxLjAsIEdNYXRoLkVQU0lMT042KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub3JtYWwgbXVzdCBiZSBub3JtYWxpemVkLlwiKTtcclxuXHRcdH1cclxuXHRcdC8vID4+aW5jbHVkZUVuZCgnZGVidWcnKTtcclxuXHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFBsYW5lKG5vcm1hbCwgZGlzdGFuY2UpO1xyXG5cdFx0fVxyXG5cdFx0VmVjdG9yMy5jbG9uZShub3JtYWwsIHJlc3VsdC5ub3JtYWwpO1xyXG5cdFx0cmVzdWx0LmRpc3RhbmNlID0gZGlzdGFuY2U7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldFBvaW50RGlzdGFuY2UocGxhbmU6IFBsYW5lLCBwb2ludDogVmVjdG9yMyk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gVmVjdG9yMy5kb3QocGxhbmUubm9ybWFsLCBwb2ludCkgKyBwbGFuZS5kaXN0YW5jZTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBwcm9qZWN0UG9pbnRPbnRvUGxhbmUocGxhbmU6IFBsYW5lLCBwb2ludDogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXN1bHQgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIHByb2plY3RlZFBvaW50ID0gcG9pbnQgLSAobm9ybWFsLnBvaW50ICsgc2NhbGUpICogbm9ybWFsXHJcblx0XHRjb25zdCBwb2ludERpc3RhbmNlID0gUGxhbmUuZ2V0UG9pbnREaXN0YW5jZShwbGFuZSwgcG9pbnQpO1xyXG5cdFx0Y29uc3Qgc2NhbGVkTm9ybWFsID0gVmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKHBsYW5lLm5vcm1hbCwgcG9pbnREaXN0YW5jZSwgc2NyYXRjaENhcnRlc2lhbik7XHJcblxyXG5cdFx0cmV0dXJuIFZlY3RvcjMuc3VidHJhY3QocG9pbnQsIHNjYWxlZE5vcm1hbCwgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyB0cmFuc2Zvcm0ocGxhbmU6IFBsYW5lLCB0cmFuc2Zvcm06IE1hdHJpeDQsIHJlc3VsdDogUGxhbmUpOiBQbGFuZSB7XHJcblx0XHRjb25zdCBub3JtYWwgPSBwbGFuZS5ub3JtYWw7XHJcblx0XHRjb25zdCBkaXN0YW5jZSA9IHBsYW5lLmRpc3RhbmNlO1xyXG5cdFx0Y29uc3QgaW52ZXJzZVRyYW5zcG9zZSA9IE1hdHJpeDQuaW52ZXJzZVRyYW5zcG9zZSh0cmFuc2Zvcm0sIHNjcmF0Y2hJbnZlcnNlVHJhbnNwb3NlKTtcclxuXHRcdGxldCBwbGFuZUFzQ2FydGVzaWFuNCA9IFZlY3RvcjQuZnJvbUVsZW1lbnRzKG5vcm1hbC54LCBub3JtYWwueSwgbm9ybWFsLnosIGRpc3RhbmNlLCBzY3JhdGNoUGxhbmVDYXJ0ZXNpYW40KTtcclxuXHRcdHBsYW5lQXNDYXJ0ZXNpYW40ID0gTWF0cml4NC5tdWx0aXBseUJ5VmVjdG9yKGludmVyc2VUcmFuc3Bvc2UsIHBsYW5lQXNDYXJ0ZXNpYW40LCBwbGFuZUFzQ2FydGVzaWFuNCk7XHJcblxyXG5cdFx0Ly8gQ29udmVydCB0aGUgdHJhbnNmb3JtZWQgcGxhbmUgdG8gSGVzc2lhbiBOb3JtYWwgRm9ybVxyXG5cdFx0Y29uc3QgdHJhbnNmb3JtZWROb3JtYWwgPSBWZWN0b3IzLmZyb21WZWN0b3I0KHBsYW5lQXNDYXJ0ZXNpYW40LCBzY3JhdGNoVHJhbnNmb3JtTm9ybWFsKTtcclxuXHJcblx0XHRwbGFuZUFzQ2FydGVzaWFuNCA9IFZlY3RvcjQuZGl2aWRlQnlTY2FsYXIoXHJcblx0XHRcdHBsYW5lQXNDYXJ0ZXNpYW40LFxyXG5cdFx0XHRWZWN0b3IzLm1hZ25pdHVkZSh0cmFuc2Zvcm1lZE5vcm1hbCksXHJcblx0XHRcdHBsYW5lQXNDYXJ0ZXNpYW40XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiBQbGFuZS5mcm9tVmVjdG9yNChwbGFuZUFzQ2FydGVzaWFuNCwgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjbG9uZShwbGFuZTogUGxhbmUsIHJlc3VsdDogUGxhbmUpOiBQbGFuZSB7XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFBsYW5lKHBsYW5lLm5vcm1hbCwgcGxhbmUuZGlzdGFuY2UpO1xyXG5cdFx0fVxyXG5cclxuXHRcdFZlY3RvcjMuY2xvbmUocGxhbmUubm9ybWFsLCByZXN1bHQubm9ybWFsKTtcclxuXHRcdHJlc3VsdC5kaXN0YW5jZSA9IHBsYW5lLmRpc3RhbmNlO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZXF1YWxzKGxlZnQ6IFBsYW5lLCByaWdodDogUGxhbmUpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBsZWZ0LmRpc3RhbmNlID09PSByaWdodC5kaXN0YW5jZSAmJiBWZWN0b3IzLmVxdWFscyhsZWZ0Lm5vcm1hbCwgcmlnaHQubm9ybWFsKTtcclxuXHR9XHJcbn1cclxuY29uc3Qgc2NyYXRjaE5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHNjcmF0Y2hDYXJ0ZXNpYW4gPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBzY3JhdGNoSW52ZXJzZVRyYW5zcG9zZSA9IG5ldyBNYXRyaXg0KCk7XHJcbmNvbnN0IHNjcmF0Y2hQbGFuZUNhcnRlc2lhbjQgPSBuZXcgVmVjdG9yNCgpO1xyXG5jb25zdCBzY3JhdGNoVHJhbnNmb3JtTm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBsYW5lO1xyXG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XHJcbmltcG9ydCBWZWN0b3I0IGZyb20gXCIuLi9tYXRoL1ZlY3RvcjRcIjtcclxuaW1wb3J0IGRlZmF1bHRWYWx1ZSBmcm9tIFwiLi4vdXRpbHMvZGVmYXVsdFZhbHVlXCI7XHJcbmltcG9ydCBkZWZpbmVkIGZyb20gXCIuLi91dGlscy9kZWZpbmVkXCI7XHJcbmltcG9ydCB7IEludGVyc2VjdCB9IGZyb20gXCIuL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCBQbGFuZSBmcm9tIFwiLi4vbWF0aC9QbGFuZVwiO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBjdWxsaW5nIHZvbHVtZSBkZWZpbmVkIGJ5IHBsYW5lcy5cclxuICpcclxuICogQGFsaWFzIEN1bGxpbmdWb2x1bWVcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7VmVjdG9yNFtdfSBbcGxhbmVzXSBBbiBhcnJheSBvZiBjbGlwcGluZyBwbGFuZXMuXHJcbiAqL1xyXG5jbGFzcyBDdWxsaW5nVm9sdW1lIHtcclxuXHRwbGFuZXM6IFBsYW5lW107XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgTUFTS19PVVRTSURFID0gMHhmZmZmZmZmZjtcclxuXHJcblx0cHVibGljIHN0YXRpYyBNQVNLX0lOU0lERSA9IDB4MDAwMDAwMDA7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgTUFTS19JTkRFVEVSTUlOQVRFID0gMHg3ZmZmZmZmZjtcclxuXHJcblx0Y29uc3RydWN0b3IocGxhbmVzPzogUGxhbmVbXSkge1xyXG5cdFx0dGhpcy5wbGFuZXMgPSBkZWZhdWx0VmFsdWUocGxhbmVzLCBbXHJcblx0XHRcdG5ldyBQbGFuZShWZWN0b3IzLlVOSVRfWiwgMC4wKSxcclxuXHRcdFx0bmV3IFBsYW5lKFZlY3RvcjMuVU5JVF9aLCAwLjApLFxyXG5cdFx0XHRuZXcgUGxhbmUoVmVjdG9yMy5VTklUX1osIDAuMCksXHJcblx0XHRcdG5ldyBQbGFuZShWZWN0b3IzLlVOSVRfWiwgMC4wKSxcclxuXHRcdFx0bmV3IFBsYW5lKFZlY3RvcjMuVU5JVF9aLCAwLjApLFxyXG5cdFx0XHRuZXcgUGxhbmUoVmVjdG9yMy5VTklUX1osIDAuMClcclxuXHRcdF0pO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBDb25zdHJ1Y3RzIGEgY3VsbGluZyB2b2x1bWUgZnJvbSBhIGJvdW5kaW5nIHNwaGVyZS4gQ3JlYXRlcyBzaXggcGxhbmVzIHRoYXQgY3JlYXRlIGEgYm94IGNvbnRhaW5pbmcgdGhlIHNwaGVyZS5cclxuXHQgKiBUaGUgcGxhbmVzIGFyZSBhbGlnbmVkIHRvIHRoZSB4LCB5LCBhbmQgeiBheGVzIGluIHdvcmxkIGNvb3JkaW5hdGVzLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtCb3VuZGluZ1NwaGVyZX0gYm91bmRpbmdTcGhlcmUgVGhlIGJvdW5kaW5nIHNwaGVyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgY3VsbGluZyB2b2x1bWUuXHJcblx0ICogQHBhcmFtIHtDdWxsaW5nVm9sdW1lfSBbcmVzdWx0XSBUaGUgb2JqZWN0IG9udG8gd2hpY2ggdG8gc3RvcmUgdGhlIHJlc3VsdC5cclxuXHQgKiBAcmV0dXJucyB7Q3VsbGluZ1ZvbHVtZX0gVGhlIGN1bGxpbmcgdm9sdW1lIGNyZWF0ZWQgZnJvbSB0aGUgYm91bmRpbmcgc3BoZXJlLlxyXG5cdCAqL1xyXG5cdHN0YXRpYyBmcm9tQm91bmRpbmdTcGhlcmUoYm91bmRpbmdTcGhlcmUsIHJlc3VsdCkge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGJvdW5kaW5nU3BoZXJlKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJib3VuZGluZ1NwaGVyZSBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXN1bHQgPSBuZXcgQ3VsbGluZ1ZvbHVtZSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGxlbmd0aCA9IGZhY2VzLmxlbmd0aDtcclxuXHRcdGNvbnN0IHBsYW5lcyA9IHJlc3VsdC5wbGFuZXM7XHJcblx0XHRwbGFuZXMubGVuZ3RoID0gMiAqIGxlbmd0aDtcclxuXHJcblx0XHRjb25zdCBjZW50ZXIgPSBib3VuZGluZ1NwaGVyZS5jZW50ZXI7XHJcblx0XHRjb25zdCByYWRpdXMgPSBib3VuZGluZ1NwaGVyZS5yYWRpdXM7XHJcblxyXG5cdFx0bGV0IHBsYW5lSW5kZXggPSAwO1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcclxuXHRcdFx0Y29uc3QgZmFjZU5vcm1hbCA9IGZhY2VzW2ldO1xyXG5cclxuXHRcdFx0bGV0IHBsYW5lMCA9IHBsYW5lc1twbGFuZUluZGV4XTtcclxuXHRcdFx0bGV0IHBsYW5lMSA9IHBsYW5lc1twbGFuZUluZGV4ICsgMV07XHJcblxyXG5cdFx0XHRpZiAoIWRlZmluZWQocGxhbmUwKSkge1xyXG5cdFx0XHRcdHBsYW5lMCA9IHBsYW5lc1twbGFuZUluZGV4XSA9IG5ldyBWZWN0b3I0KCk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCFkZWZpbmVkKHBsYW5lMSkpIHtcclxuXHRcdFx0XHRwbGFuZTEgPSBwbGFuZXNbcGxhbmVJbmRleCArIDFdID0gbmV3IFZlY3RvcjQoKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGZhY2VOb3JtYWwsIC1yYWRpdXMsIHNjcmF0Y2hQbGFuZUNlbnRlcik7XHJcblx0XHRcdFZlY3RvcjMuYWRkKGNlbnRlciwgc2NyYXRjaFBsYW5lQ2VudGVyLCBzY3JhdGNoUGxhbmVDZW50ZXIpO1xyXG5cclxuXHRcdFx0cGxhbmUwLnggPSBmYWNlTm9ybWFsLng7XHJcblx0XHRcdHBsYW5lMC55ID0gZmFjZU5vcm1hbC55O1xyXG5cdFx0XHRwbGFuZTAueiA9IGZhY2VOb3JtYWwuejtcclxuXHRcdFx0cGxhbmUwLncgPSAtVmVjdG9yMy5kb3QoZmFjZU5vcm1hbCwgc2NyYXRjaFBsYW5lQ2VudGVyKTtcclxuXHJcblx0XHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcihmYWNlTm9ybWFsLCByYWRpdXMsIHNjcmF0Y2hQbGFuZUNlbnRlcik7XHJcblx0XHRcdFZlY3RvcjMuYWRkKGNlbnRlciwgc2NyYXRjaFBsYW5lQ2VudGVyLCBzY3JhdGNoUGxhbmVDZW50ZXIpO1xyXG5cclxuXHRcdFx0cGxhbmUxLnggPSAtZmFjZU5vcm1hbC54O1xyXG5cdFx0XHRwbGFuZTEueSA9IC1mYWNlTm9ybWFsLnk7XHJcblx0XHRcdHBsYW5lMS56ID0gLWZhY2VOb3JtYWwuejtcclxuXHRcdFx0cGxhbmUxLncgPSAtVmVjdG9yMy5kb3QoVmVjdG9yMy5uZWdhdGUoZmFjZU5vcm1hbCwgc2NyYXRjaFBsYW5lTm9ybWFsKSwgc2NyYXRjaFBsYW5lQ2VudGVyKTtcclxuXHJcblx0XHRcdHBsYW5lSW5kZXggKz0gMjtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBib3VuZGluZyB2b2x1bWUgaW50ZXJzZWN0cyB0aGUgY3VsbGluZyB2b2x1bWUuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge09iamVjdH0gYm91bmRpbmdWb2x1bWUgVGhlIGJvdW5kaW5nIHZvbHVtZSB3aG9zZSBpbnRlcnNlY3Rpb24gd2l0aCB0aGUgY3VsbGluZyB2b2x1bWUgaXMgdG8gYmUgdGVzdGVkLlxyXG5cdCAqIEByZXR1cm5zIHtJbnRlcnNlY3R9ICBJbnRlcnNlY3QuT1VUU0lERSwgSW50ZXJzZWN0LklOVEVSU0VDVElORywgb3IgSW50ZXJzZWN0LklOU0lERS5cclxuXHQgKi9cclxuXHRjb21wdXRlVmlzaWJpbGl0eShib3VuZGluZ1ZvbHVtZSkge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGJvdW5kaW5nVm9sdW1lKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJib3VuZGluZ1ZvbHVtZSBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRjb25zdCBwbGFuZXMgPSB0aGlzLnBsYW5lcztcclxuXHRcdGxldCBpbnRlcnNlY3RpbmcgPSBmYWxzZTtcclxuXHRcdGZvciAobGV0IGsgPSAwLCBsZW4gPSBwbGFuZXMubGVuZ3RoOyBrIDwgbGVuOyArK2spIHtcclxuXHRcdFx0Y29uc3QgcmVzdWx0ID0gYm91bmRpbmdWb2x1bWUuaW50ZXJzZWN0UGxhbmUocGxhbmVzW2tdKTtcclxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gSW50ZXJzZWN0Lk9VVFNJREUpIHtcclxuXHRcdFx0XHRyZXR1cm4gSW50ZXJzZWN0Lk9VVFNJREU7XHJcblx0XHRcdH0gZWxzZSBpZiAocmVzdWx0ID09PSBJbnRlcnNlY3QuSU5URVJTRUNUSU5HKSB7XHJcblx0XHRcdFx0aW50ZXJzZWN0aW5nID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBpbnRlcnNlY3RpbmcgPyBJbnRlcnNlY3QuSU5URVJTRUNUSU5HIDogSW50ZXJzZWN0LklOU0lERTtcclxuXHR9XHJcbn1cclxuXHJcbmNvbnN0IGZhY2VzID0gW25ldyBWZWN0b3IzKCksIG5ldyBWZWN0b3IzKCksIG5ldyBWZWN0b3IzKCldO1xyXG5WZWN0b3IzLmNsb25lKFZlY3RvcjMuVU5JVF9YLCBmYWNlc1swXSk7XHJcblZlY3RvcjMuY2xvbmUoVmVjdG9yMy5VTklUX1ksIGZhY2VzWzFdKTtcclxuVmVjdG9yMy5jbG9uZShWZWN0b3IzLlVOSVRfWiwgZmFjZXNbMl0pO1xyXG5cclxuY29uc3Qgc2NyYXRjaFBsYW5lQ2VudGVyID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3Qgc2NyYXRjaFBsYW5lTm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3Qgc2NyYXRjaFBsYW5lcyA9IG5ldyBWZWN0b3I0KCk7XHJcbmNvbnN0IHNjcmF0Y2hQbGFuZSA9IG5ldyBQbGFuZShuZXcgVmVjdG9yMygxLjAsIDAuMCwgMC4wKSwgMC4wKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEN1bGxpbmdWb2x1bWU7XHJcbiIsImltcG9ydCBDdWxsaW5nVm9sdW1lIGZyb20gXCIuLi9jb3JlL0N1bGxpbmdWb2x1bWVcIjtcclxuaW1wb3J0IFJlbmRlck9iamVjdCBmcm9tIFwiLi4vY29yZS9SZW5kZXJPYmplY3RcIjtcclxuaW1wb3J0IHsgUmVuZGVyT2JqZWN0VHlwZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gXCIuLi9tYXRoL01hdHJpeDRcIjtcclxuaW1wb3J0IFBsYW5lIGZyb20gXCIuLi9tYXRoL1BsYW5lXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuaW1wb3J0IFNoYWRlckRhdGEgZnJvbSBcIi4uL3JlbmRlci9TaGFkZXJEYXRhXCI7XHJcbmltcG9ydCBVbmlmb3JtQnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybUJ1ZmZlclwiO1xyXG5pbXBvcnQgeyBVbmlmb3JtRW51bSB9IGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhbWVyYSBleHRlbmRzIFJlbmRlck9iamVjdCB7XHJcblx0cHJpdmF0ZSBfdmlld01hdHJpeDogTWF0cml4NDtcclxuXHRwcm90ZWN0ZWQgX3Byb2plY3Rpb25NYXRyaXg6IE1hdHJpeDQ7XHJcblx0cHJpdmF0ZSBfdnBNYXRyaXg6IE1hdHJpeDQ7XHJcblx0Y3VsbGluZ1ZvbHVtZTogQ3VsbGluZ1ZvbHVtZTtcclxuXHRwcm9qZWN0TWF0cml4RGlydHk6IGJvb2xlYW47XHJcblx0c2hhZGVyRGF0YTogU2hhZGVyRGF0YTtcclxuXHRuZWFyOiBudW1iZXI7XHJcblx0ZmFyOiBudW1iZXI7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0dGhpcy5fdmlld01hdHJpeCA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMudHlwZSA9IFJlbmRlck9iamVjdFR5cGUuQ2FtZXJhO1xyXG5cdFx0dGhpcy5jdWxsaW5nVm9sdW1lID0gbmV3IEN1bGxpbmdWb2x1bWUoKTtcclxuXHRcdHRoaXMuX3ZpZXdNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG5cdFx0dGhpcy5fdnBNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG5cdFx0dGhpcy5wcm9qZWN0TWF0cml4RGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5jcmVhdGVTaGFkZXJEYXRhKCk7XHJcblx0fVxyXG5cdGdldCB2aWV3TWF0cml4KCkge1xyXG5cdFx0dGhpcy51cGRhdGVNYXRyaXgoKTtcclxuXHRcdE1hdHJpeDQuaW52ZXJzZSh0aGlzLm1vZGVsTWF0cml4LCB0aGlzLl92aWV3TWF0cml4KTtcclxuXHRcdHJldHVybiB0aGlzLl92aWV3TWF0cml4O1xyXG5cdH1cclxuXHRnZXQgcHJvamVjdGlvbk1hdHJpeCgpIHtcclxuXHRcdHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG5cdFx0cmV0dXJuIHRoaXMuX3Byb2plY3Rpb25NYXRyaXg7XHJcblx0fVxyXG5cclxuXHRnZXQgdnBNYXRyaXgoKSB7XHJcblx0XHRNYXRyaXg0Lm11bHRpcGx5KHRoaXMucHJvamVjdGlvbk1hdHJpeCwgdGhpcy52aWV3TWF0cml4LCB0aGlzLl92cE1hdHJpeCk7XHJcblx0XHRyZXR1cm4gdGhpcy5fdnBNYXRyaXg7XHJcblx0fVxyXG5cclxuXHRnZXQgaW52ZXJzZVZpZXdNYXRyaXgoKSB7XHJcblx0XHR0aGlzLnVwZGF0ZU1hdHJpeCgpO1xyXG5cdFx0cmV0dXJuIHRoaXMubW9kZWxNYXRyaXg7XHJcblx0fVxyXG5cdHB1YmxpYyB1cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkge31cclxuXHQvKipcclxuXHQgKiBnZXQgYSBjdWxsaW5nIHZvbHVtZSBmb3IgdGhpcyBmcnVzdHVtLlxyXG5cdCAqL1xyXG5cdGdldEN1bGxpbmdWb2x1bWUoKSB7XHJcblx0XHRjb25zdCBjbG9uZVZpZXdNYXRyaXggPSB0aGlzLnZpZXdNYXRyaXguY2xvbmUobmV3IE1hdHJpeDQoKSk7XHJcblx0XHRjb25zdCB2cE1hdHJpeCA9IE1hdHJpeDQubXVsdGlwbHkodGhpcy5wcm9qZWN0aW9uTWF0cml4LCBjbG9uZVZpZXdNYXRyaXgsIG5ldyBNYXRyaXg0KCkpO1xyXG5cdFx0Y29uc3QgcGxhbmVzID0gdGhpcy5jdWxsaW5nVm9sdW1lLnBsYW5lcztcclxuXHRcdGNvbnN0IG1lID0gdnBNYXRyaXg7XHJcblx0XHRjb25zdCBtZTAgPSBtZVswXSxcclxuXHRcdFx0bWUxID0gbWVbMV0sXHJcblx0XHRcdG1lMiA9IG1lWzJdLFxyXG5cdFx0XHRtZTMgPSBtZVszXTtcclxuXHRcdGNvbnN0IG1lNCA9IG1lWzRdLFxyXG5cdFx0XHRtZTUgPSBtZVs1XSxcclxuXHRcdFx0bWU2ID0gbWVbNl0sXHJcblx0XHRcdG1lNyA9IG1lWzddO1xyXG5cdFx0Y29uc3QgbWU4ID0gbWVbOF0sXHJcblx0XHRcdG1lOSA9IG1lWzldLFxyXG5cdFx0XHRtZTEwID0gbWVbMTBdLFxyXG5cdFx0XHRtZTExID0gbWVbMTFdO1xyXG5cdFx0Y29uc3QgbWUxMiA9IG1lWzEyXSxcclxuXHRcdFx0bWUxMyA9IG1lWzEzXSxcclxuXHRcdFx0bWUxNCA9IG1lWzE0XSxcclxuXHRcdFx0bWUxNSA9IG1lWzE1XTtcclxuXHRcdHBsYW5lc1swXSA9IG5ldyBQbGFuZShuZXcgVmVjdG9yMyhtZTMgLSBtZTAsIG1lNyAtIG1lNCwgbWUxMSAtIG1lOCksIG1lMTUgLSBtZTEyKTtcclxuXHRcdHBsYW5lc1swXS5ub3JtYWxpemUoKTtcclxuXHRcdHBsYW5lc1sxXSA9IG5ldyBQbGFuZShuZXcgVmVjdG9yMyhtZTMgKyBtZTAsIG1lNyArIG1lNCwgbWUxMSArIG1lOCksIG1lMTUgKyBtZTEyKTtcclxuXHRcdHBsYW5lc1sxXS5ub3JtYWxpemUoKTtcclxuXHJcblx0XHRwbGFuZXNbMl0gPSBuZXcgUGxhbmUobmV3IFZlY3RvcjMobWUzICsgbWUxLCBtZTcgKyBtZTUsIG1lMTEgKyBtZTkpLCBtZTE1ICsgbWUxMyk7XHJcblx0XHRwbGFuZXNbMl0ubm9ybWFsaXplKCk7XHJcblxyXG5cdFx0cGxhbmVzWzNdID0gbmV3IFBsYW5lKG5ldyBWZWN0b3IzKG1lMyAtIG1lMSwgbWU3IC0gbWU1LCBtZTExIC0gbWU5KSwgbWUxNSAtIG1lMTMpO1xyXG5cdFx0cGxhbmVzWzNdLm5vcm1hbGl6ZSgpO1xyXG5cclxuXHRcdHBsYW5lc1s0XSA9IG5ldyBQbGFuZShuZXcgVmVjdG9yMyhtZTMgLSBtZTIsIG1lNyAtIG1lNiwgbWUxMSAtIG1lMTApLCBtZTE1IC0gbWUxNCk7XHJcblx0XHRwbGFuZXNbNF0ubm9ybWFsaXplKCk7XHJcblxyXG5cdFx0cGxhbmVzWzVdID0gbmV3IFBsYW5lKG5ldyBWZWN0b3IzKG1lMyArIG1lMiwgbWU3ICsgbWU2LCBtZTExICsgbWUxMCksIG1lMTUgKyBtZTE0KTtcclxuXHRcdHBsYW5lc1s1XS5ub3JtYWxpemUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jdWxsaW5nVm9sdW1lO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlU2hhZGVyRGF0YSgpIHtcclxuXHRcdHRoaXMuc2hhZGVyRGF0YSA9IG5ldyBTaGFkZXJEYXRhKFwiY2FtZXJhXCIsIDAsIDEsIDEpO1xyXG5cdFx0Y29uc3QgdW5pZm9ybUJ1ZmZlciA9IG5ldyBVbmlmb3JtQnVmZmVyKHsgbGFiZWw6IFwiY2FtZXJhXCIgfSk7XHJcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFwicHJvamVjdGlvbk1hdHJpeFwiLFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvamVjdGlvbk1hdHJpeDtcclxuXHRcdFx0fSxcclxuXHRcdFx0VW5pZm9ybUVudW0uTWF0NFxyXG5cdFx0KTtcclxuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XCJ2aWV3TWF0cml4XCIsXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy52aWV3TWF0cml4O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0XHJcblx0XHQpO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcImludmVyc2VWaWV3TWF0cml4XCIsXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pbnZlcnNlVmlld01hdHJpeDtcclxuXHRcdFx0fSxcclxuXHRcdFx0VW5pZm9ybUVudW0uTWF0NFxyXG5cdFx0KTtcclxuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XCJwb3NpdGlvblwiLFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucG9zaXRpb247XHJcblx0XHRcdH0sXHJcblx0XHRcdFVuaWZvcm1FbnVtLkZsb2F0VmVjM1xyXG5cdFx0KTtcclxuXHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwiY2FtZXJhXCIsIHVuaWZvcm1CdWZmZXIpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgQ3VsbGluZ1ZvbHVtZSBmcm9tIFwiLi4vY29yZS9DdWxsaW5nVm9sdW1lXCI7XHJcbmltcG9ydCBHTWF0aCBmcm9tIFwiLi4vbWF0aC9NYXRoXCI7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gXCIuLi9tYXRoL01hdHJpeDRcIjtcclxuaW1wb3J0IENhbWVyYSBmcm9tIFwiLi9DYW1lcmFcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVyc3BlY3RpdmVDYW1lcmEgZXh0ZW5kcyBDYW1lcmEge1xyXG5cdHhPZmZzZXQ6IG51bWJlcjtcclxuXHR5T2Zmc2V0OiBudW1iZXI7XHJcblx0Y3VsbGluZ1ZvbHVtZTogQ3VsbGluZ1ZvbHVtZTtcclxuXHRwcml2YXRlIF9hc3BlY3Q6IG51bWJlcjtcclxuXHRwcml2YXRlIF9mb3Y6IG51bWJlcjtcclxuXHRoZWlnaHQ6IG51bWJlcjtcclxuXHR3aWR0aDogbnVtYmVyO1xyXG5cdGlzUGVyc3BlY3RpdmVDYW1lcmE6IGJvb2xlYW47XHJcblx0bmVhcjogbnVtYmVyO1xyXG5cdGZhcjogbnVtYmVyO1xyXG5cdHRvcDogbnVtYmVyO1xyXG5cdGxlZnQ6IG51bWJlcjtcclxuXHRjb25zdHJ1Y3Rvcihmb3YgPSA1MCwgYXNwZWN0ID0gMSwgbmVhciA9IDAuMSwgZmFyID0gMjAwMCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHRcdHRoaXMuX2FzcGVjdCA9IGFzcGVjdDtcclxuXHRcdHRoaXMuZm92ID0gZm92O1xyXG5cdFx0dGhpcy5uZWFyID0gbmVhcjtcclxuXHRcdHRoaXMuZmFyID0gZmFyO1xyXG5cdFx0dGhpcy54T2Zmc2V0ID0gMDtcclxuXHRcdHRoaXMueU9mZnNldCA9IDA7XHJcblx0XHR0aGlzLnByb2plY3RNYXRyaXhEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLnVwZGF0ZUNhbWVyYVBhcm1zKCk7XHJcblx0XHR0aGlzLmN1bGxpbmdWb2x1bWUgPSBuZXcgQ3VsbGluZ1ZvbHVtZSgpO1xyXG5cdFx0dGhpcy5pc1BlcnNwZWN0aXZlQ2FtZXJhID0gdHJ1ZTtcclxuXHR9XHJcblx0Z2V0IGFzcGVjdCgpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2FzcGVjdDtcclxuXHR9XHJcblxyXG5cdHNldCBhc3BlY3QodjogbnVtYmVyKSB7XHJcblx0XHR0aGlzLnByb2plY3RNYXRyaXhEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9hc3BlY3QgPSB2O1xyXG5cdH1cclxuXHRnZXQgZm92KCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5fZm92O1xyXG5cdH1cclxuXHJcblx0c2V0IGZvdih2OiBudW1iZXIpIHtcclxuXHRcdHRoaXMucHJvamVjdE1hdHJpeERpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX2ZvdiA9IHY7XHJcblx0fVxyXG5cdHByaXZhdGUgdXBkYXRlQ2FtZXJhUGFybXMoKSB7XHJcblx0XHR0aGlzLnRvcCA9IHRoaXMubmVhciAqIE1hdGgudGFuKDAuNSAqIEdNYXRoLlJBRElBTlNfUEVSX0RFR1JFRSAqIHRoaXMuZm92KTtcclxuXHRcdHRoaXMuaGVpZ2h0ID0gMiAqIHRoaXMudG9wO1xyXG5cdFx0dGhpcy53aWR0aCA9IHRoaXMuYXNwZWN0ICogdGhpcy5oZWlnaHQ7XHJcblx0XHR0aGlzLmxlZnQgPSAtMC41ICogdGhpcy53aWR0aDtcclxuXHR9XHJcblx0cHVibGljIHVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSB7XHJcblx0XHRpZiAodGhpcy5wcm9qZWN0TWF0cml4RGlydHkpIHtcclxuXHRcdFx0dGhpcy51cGRhdGVDYW1lcmFQYXJtcygpO1xyXG5cdFx0XHR0aGlzLl9wcm9qZWN0aW9uTWF0cml4ID0gTWF0cml4NC5tYWtlUGVyc3BlY3RpdmUoXHJcblx0XHRcdFx0dGhpcy5sZWZ0LFxyXG5cdFx0XHRcdHRoaXMubGVmdCArIHRoaXMud2lkdGgsXHJcblx0XHRcdFx0dGhpcy50b3AsXHJcblx0XHRcdFx0dGhpcy50b3AgLSB0aGlzLmhlaWdodCxcclxuXHRcdFx0XHR0aGlzLm5lYXIsXHJcblx0XHRcdFx0dGhpcy5mYXJcclxuXHRcdFx0KTtcclxuXHRcdFx0dGhpcy5wcm9qZWN0TWF0cml4RGlydHkgPSBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQnVmZmVyVXNhZ2UgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tIFwiLi4vbWF0aC9NYXRyaXg0XCI7XHJcbmltcG9ydCBTaGFkZXJEYXRhIGZyb20gXCIuLi9yZW5kZXIvU2hhZGVyRGF0YVwiO1xyXG5pbXBvcnQgVW5pZm9ybUJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1CdWZmZXJcIjtcclxuaW1wb3J0IHsgVW5pZm9ybUVudW0gfSBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1zXCI7XHJcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tIFwiLi9QZXJzcGVjdGl2ZUNhbWVyYVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUG9pbnRMaWdodFNoYWRvd0NhbWVyYSBleHRlbmRzIFBlcnNwZWN0aXZlQ2FtZXJhIHtcclxuXHRwdWJsaWMgdnBNYXRyaXhBcnJheTogQXJyYXk8TWF0cml4ND47XHJcblx0cHVibGljIHZwTWF0cml4SW5kZXhBcnJheTogQXJyYXk8bnVtYmVyPjtcclxuXHJcblx0Y29uc3RydWN0b3IoZm92ID0gNTAsIGFzcGVjdCA9IDEsIG5lYXIgPSAwLjEsIGZhciA9IDIwMDApIHtcclxuXHRcdHN1cGVyKGZvdiwgYXNwZWN0LCBuZWFyLCBmYXIpO1xyXG5cdFx0dGhpcy52cE1hdHJpeEFycmF5ID0gW25ldyBNYXRyaXg0KCksIG5ldyBNYXRyaXg0KCksIG5ldyBNYXRyaXg0KCksIG5ldyBNYXRyaXg0KCksIG5ldyBNYXRyaXg0KCksIG5ldyBNYXRyaXg0KCldO1xyXG5cdH1cclxuXHJcblx0Ly8gY3JlYXRlU2hhZGVyRGF0YSgpIHtcclxuXHQvLyBcdHRoaXMuc2hhZGVyRGF0YSA9IG5ldyBTaGFkZXJEYXRhKFwiY2FtZXJhXCIsIDAsIDEsIDEpO1xyXG5cclxuXHQvLyBcdGNvbnN0IHVuaWZvcm1CdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7XHJcblx0Ly8gXHRcdGxhYmVsOiBcInBvaW50TGlnaHRTaGFkb3dDYW1lcmFcIixcclxuXHQvLyBcdFx0dHlwZTogXCJyZWFkLW9ubHktc3RvcmFnZVwiLFxyXG5cdC8vIFx0XHR1c2FnZTogQnVmZmVyVXNhZ2UuU3RvcmFnZSB8IEJ1ZmZlclVzYWdlLkNvcHlEc3QsXHJcblx0Ly8gXHRcdGhhc0R5bmFtaWNPZmZzZXQ6IHRydWUsXHJcblx0Ly8gXHRcdG1pbkJpbmRpbmdTaXplOiA2NCxcclxuXHQvLyBcdFx0bWF4T2Zmc2V0OiA2LFxyXG5cdC8vIFx0XHRzaXplOiAyNTYgKiA2XHJcblx0Ly8gXHR9KTtcclxuXHQvLyBcdHVuaWZvcm1CdWZmZXIuc2V0TWF0cml4NEFycmF5KFxyXG5cdC8vIFx0XHRcInZwTWF0cml4QXJyYXlcIixcclxuXHQvLyBcdFx0KCkgPT4ge1xyXG5cdC8vIFx0XHRcdGlmICh0aGlzLnZwTWF0cml4QXJyYXkubGVuZ3RoICE9IDYpIHRocm93IG5ldyBFcnJvcihcInBvaW50TGlnaHRTaGFkb3dDYW1lcmEgdW5pZm9ybUJ1ZmZlciBoYXMgRXJyb3JcIik7XHJcblxyXG5cdC8vIFx0XHRcdHJldHVybiB0aGlzLnZwTWF0cml4QXJyYXk7XHJcblx0Ly8gXHRcdH0sXHJcblx0Ly8gXHRcdDYsXHJcblx0Ly8gXHRcdDI1NlxyXG5cdC8vIFx0KTtcclxuXHJcblx0Ly8gXHR0aGlzLnNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcihcInBvaW50TGlnaHRTaGFkb3dDYW1lcmFcIiwgdW5pZm9ybUJ1ZmZlcik7XHJcblx0Ly8gXHR0aGlzLnNoYWRlckRhdGEuc2V0RGVmaW5lKFwiaXNQb2ludExpZ2h0U2hhZG93TWFwXCIsIHRydWUpO1xyXG5cdC8vIH1cclxuXHJcblx0Y3JlYXRlU2hhZGVyRGF0YSgpIHtcclxuXHRcdHRoaXMuc2hhZGVyRGF0YSA9IG5ldyBTaGFkZXJEYXRhKFwiY2FtZXJhXCIsIDAsIDEsIDEpO1xyXG5cclxuXHRcdGNvbnN0IHVuaWZvcm1CdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7XHJcblx0XHRcdGxhYmVsOiBcInBvaW50TGlnaHRTaGFkb3dDYW1lcmFcIixcclxuXHRcdFx0dHlwZTogXCJyZWFkLW9ubHktc3RvcmFnZVwiLFxyXG5cdFx0XHR1c2FnZTogQnVmZmVyVXNhZ2UuU3RvcmFnZSB8IEJ1ZmZlclVzYWdlLkNvcHlEc3RcclxuXHRcdH0pO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcInZwTWF0cml4XCIsXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy52cE1hdHJpeDtcclxuXHRcdFx0fSxcclxuXHRcdFx0VW5pZm9ybUVudW0uTWF0NFxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcihcInBvaW50TGlnaHRTaGFkb3dDYW1lcmFcIiwgdW5pZm9ybUJ1ZmZlcik7XHJcblx0XHR0aGlzLnNoYWRlckRhdGEuc2V0RGVmaW5lKFwiaXNQb2ludExpZ2h0U2hhZG93TWFwXCIsIHRydWUpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlVnBNYXRyaXhBcnJheUFuZEluZGV4KGluZGV4OiBudW1iZXIpIHtcclxuXHRcdE1hdHJpeDQuY2xvbmUodGhpcy52cE1hdHJpeCwgdGhpcy52cE1hdHJpeEFycmF5W2luZGV4XSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDYW1lcmEgZnJvbSBcIi4uLy4uL2NhbWVyYS9DYW1lcmFcIjtcclxuaW1wb3J0IHsgVGV4dHVyZUZvcm1hdCwgVGV4dHVyZVNhbXBsZVR5cGUsIFRleHR1cmVVc2FnZSB9IGZyb20gXCIuLi8uLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCBWZWN0b3IyIGZyb20gXCIuLi8uLi9tYXRoL1ZlY3RvcjJcIjtcclxuaW1wb3J0IFZlY3RvcjQgZnJvbSBcIi4uLy4uL21hdGgvVmVjdG9yNFwiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vLi4vcmVuZGVyL1RleHR1cmVcIjtcclxuaW1wb3J0IHsgTGlnaHQgfSBmcm9tIFwiLi4vTGlnaHRcIjtcclxuZXhwb3J0IGNsYXNzIEJhc2VTaGFkb3cge1xyXG5cdHByb3RlY3RlZCBfc2hhZG93TWFwU2l6ZTogVmVjdG9yMjtcclxuXHRwcm90ZWN0ZWQgX2NhbWVyYTogQ2FtZXJhO1xyXG5cdHByb3RlY3RlZCBfc2hhZG93TWFwOiBUZXh0dXJlO1xyXG5cdHB1YmxpYyB0eXBlOiBzdHJpbmc7XHJcblx0cHVibGljIF92aWV3cG9ydHM6IEFycmF5PFZlY3RvcjQ+O1xyXG5cdHB1YmxpYyB2aWV3cG9ydFNpemU6IFZlY3RvcjI7XHJcblx0cHVibGljIGN1cnJlbnRWaWV3cG9ydEluZGV4OiBudW1iZXI7XHJcblx0cHVibGljIHZpZXdQb3J0RGlydHk6IGJvb2xlYW47XHJcblx0cHVibGljIHZwTWF0cml4RGlydHk6IGJvb2xlYW47XHJcblxyXG5cdGNvbnN0cnVjdG9yKHNoYWRvd01hcFNpemU6IFZlY3RvcjIsIGNhbWVyYTogQ2FtZXJhKSB7XHJcblx0XHR0aGlzLl9zaGFkb3dNYXBTaXplID0gc2hhZG93TWFwU2l6ZTtcclxuXHRcdHRoaXMuX2NhbWVyYSA9IGNhbWVyYTtcclxuXHRcdHRoaXMudmlld1BvcnREaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLnZwTWF0cml4RGlydHkgPSB0cnVlO1xyXG5cclxuXHRcdHRoaXMuX2luaXQoKTtcclxuXHR9XHJcblxyXG5cdGdldCBjYW1lcmEoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fY2FtZXJhO1xyXG5cdH1cclxuXHJcblx0Z2V0IHNoYWRvd01hcFNpemUoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fc2hhZG93TWFwU2l6ZTtcclxuXHR9XHJcblxyXG5cdGdldCB2aWV3cG9ydHMoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fdmlld3BvcnRzO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFNoYWRvd01hcFRleHR1cmUoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fc2hhZG93TWFwO1xyXG5cdH1cclxuXHJcblx0cHJvdGVjdGVkIF9pbml0KCkge1xyXG5cdFx0dGhpcy5faW5pdFNoYWRvd01hcFRleHR1cmUoKTtcclxuXHR9XHJcblxyXG5cdHByb3RlY3RlZCBfaW5pdFNoYWRvd01hcFRleHR1cmUoKSB7XHJcblx0XHR0aGlzLl9jcmVhdGVTaGFkb3dNYXBUZXh0dXJlKCk7XHJcblx0fVxyXG5cclxuXHRwcm90ZWN0ZWQgX2NyZWF0ZVNoYWRvd01hcFRleHR1cmUoKSB7XHJcblx0XHR0aGlzLl9zaGFkb3dNYXAgPSBuZXcgVGV4dHVyZSh7XHJcblx0XHRcdHNpemU6IHtcclxuXHRcdFx0XHR3aWR0aDogdGhpcy5fc2hhZG93TWFwU2l6ZS54LFxyXG5cdFx0XHRcdGhlaWdodDogdGhpcy5fc2hhZG93TWFwU2l6ZS55LFxyXG5cdFx0XHRcdGRlcHRoOiAxXHJcblx0XHRcdH0sXHJcblx0XHRcdGZpeGVkU2l6ZTogdHJ1ZSxcclxuXHRcdFx0c2FtcGxlVHlwZTogVGV4dHVyZVNhbXBsZVR5cGUuRGVwdGgsXHJcblx0XHRcdGZvcm1hdDogVGV4dHVyZUZvcm1hdC5EZXB0aDI0UGx1cyxcclxuXHRcdFx0dXNhZ2U6IFRleHR1cmVVc2FnZS5SZW5kZXJBdHRhY2htZW50IHwgVGV4dHVyZVVzYWdlLlRleHR1cmVCaW5kaW5nIHwgVGV4dHVyZVVzYWdlLkNvcHlTcmNcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHVwZGF0ZShsaWdodDogTGlnaHQpIHt9XHJcbn1cclxuIiwiaW1wb3J0IFBvaW50TGlnaHRTaGFkb3dDYW1lcmEgZnJvbSBcIi4uLy4uL2NhbWVyYS9Qb2ludExpZ2h0U2hhZG93Q2FtZXJhXCI7XHJcbmltcG9ydCBWZWN0b3IyIGZyb20gXCIuLi8uLi9tYXRoL1ZlY3RvcjJcIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uLy4uL21hdGgvVmVjdG9yM1wiO1xyXG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi4vLi4vbWF0aC9WZWN0b3I0XCI7XHJcbmltcG9ydCB7IFBvaW50TGlnaHQgfSBmcm9tIFwiLi4vUG9pbnRMaWdodFwiO1xyXG5pbXBvcnQgeyBCYXNlU2hhZG93IH0gZnJvbSBcIi4vQmFzZVNoYWRvd1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBvaW50TGlnaHRTaGFkb3cgZXh0ZW5kcyBCYXNlU2hhZG93IHtcclxuXHRwdWJsaWMgdHlwZTogc3RyaW5nO1xyXG5cdHByaXZhdGUgX3BvaW50TGlnaHRTaGFkb3dMb29rRGlyZWN0aW9uczogQXJyYXk8VmVjdG9yMz47XHJcblx0cHJpdmF0ZSBfcG9pbnRMaWdodFNoYWRvd1VwczogQXJyYXk8VmVjdG9yMz47XHJcblx0dnBNYXRyaXhBcnJheURpcnR5OiBib29sZWFuO1xyXG5cclxuXHRnZXQgY2FtZXJhKCk6IFBvaW50TGlnaHRTaGFkb3dDYW1lcmEge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2NhbWVyYSBhcyBQb2ludExpZ2h0U2hhZG93Q2FtZXJhO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRjb25zdCBjYW1lcmEgPSBuZXcgUG9pbnRMaWdodFNoYWRvd0NhbWVyYSg5MCwgMSwgMC4xLCA1MDApO1xyXG5cdFx0c3VwZXIobmV3IFZlY3RvcjIoMTUzNiwgMTAyNCksIGNhbWVyYSk7XHJcblx0XHR0aGlzLnZpZXdwb3J0U2l6ZSA9IG5ldyBWZWN0b3IyKDUxMiwgNTEyKTtcclxuXHRcdHRoaXMuY3VycmVudFZpZXdwb3J0SW5kZXggPSAwO1xyXG5cdFx0dGhpcy50eXBlID0gXCJwb2ludExpZ2h0U2hhZG93XCI7XHJcblx0XHR0aGlzLnZwTWF0cml4QXJyYXlEaXJ0eSA9IHRydWU7XHJcblxyXG5cdFx0dGhpcy5fdmlld3BvcnRzID0gW1xyXG5cdFx0XHQvLyBwb3NpdGl2ZSBYIDBcclxuXHRcdFx0bmV3IFZlY3RvcjQoMCwgMCwgMSAvIDMsIDEgLyAyKSxcclxuXHRcdFx0Ly8gbmVnYXRpdmUgWCAxXHJcblx0XHRcdG5ldyBWZWN0b3I0KDEsIDAsIDEgLyAzLCAxIC8gMiksXHJcblx0XHRcdC8vIHBvc2l0aXZlIFogMlxyXG5cdFx0XHRuZXcgVmVjdG9yNCgyLCAwLCAxIC8gMywgMSAvIDIpLFxyXG5cdFx0XHQvLyBuZWdhdGl2ZSBaIDNcclxuXHRcdFx0bmV3IFZlY3RvcjQoMCwgMSwgMSAvIDMsIDEgLyAyKSxcclxuXHRcdFx0Ly8gcG9zaXRpdmUgWSA0XHJcblx0XHRcdG5ldyBWZWN0b3I0KDEsIDEsIDEgLyAzLCAxIC8gMiksXHJcblx0XHRcdC8vIG5lZ2F0aXZlIFkgNVxyXG5cdFx0XHRuZXcgVmVjdG9yNCgyLCAxLCAxIC8gMywgMSAvIDIpXHJcblx0XHRdO1xyXG5cclxuXHRcdHRoaXMuX3BvaW50TGlnaHRTaGFkb3dMb29rRGlyZWN0aW9ucyA9IFtcclxuXHRcdFx0bmV3IFZlY3RvcjMoMSwgMCwgMCksXHJcblx0XHRcdG5ldyBWZWN0b3IzKC0xLCAwLCAwKSxcclxuXHRcdFx0bmV3IFZlY3RvcjMoMCwgMCwgMSksXHJcblx0XHRcdG5ldyBWZWN0b3IzKDAsIDAsIC0xKSxcclxuXHRcdFx0bmV3IFZlY3RvcjMoMCwgMSwgMCksXHJcblx0XHRcdG5ldyBWZWN0b3IzKDAsIC0xLCAwKVxyXG5cdFx0XTtcclxuXHJcblx0XHR0aGlzLl9wb2ludExpZ2h0U2hhZG93VXBzID0gW1xyXG5cdFx0XHRuZXcgVmVjdG9yMygwLCAxLCAwKSxcclxuXHRcdFx0bmV3IFZlY3RvcjMoMCwgMSwgMCksXHJcblx0XHRcdG5ldyBWZWN0b3IzKDAsIDEsIDApLFxyXG5cdFx0XHRuZXcgVmVjdG9yMygwLCAxLCAwKSxcclxuXHRcdFx0bmV3IFZlY3RvcjMoMCwgMCwgMSksXHJcblx0XHRcdG5ldyBWZWN0b3IzKDAsIDAsIC0xKVxyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyB1cGRhdGUobGlnaHQ6IFBvaW50TGlnaHQpIHtcclxuXHRcdHRoaXMudXBkYXRlTWF0cmljZXMobGlnaHQpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlTWF0cmljZXMobGlnaHQ6IFBvaW50TGlnaHQpIHtcclxuXHRcdGlmICh0aGlzLmNhbWVyYSBpbnN0YW5jZW9mIFBvaW50TGlnaHRTaGFkb3dDYW1lcmEpIHtcclxuXHRcdFx0dGhpcy5jYW1lcmEucG9zaXRpb24uY29weShsaWdodC5wb3NpdGlvbik7XHJcblx0XHRcdGNvbnN0IHRhcmdldCA9IFZlY3RvcjMuY2xvbmUobGlnaHQucG9zaXRpb24pO1xyXG5cdFx0XHR0YXJnZXQuYWRkKHRoaXMuX3BvaW50TGlnaHRTaGFkb3dMb29rRGlyZWN0aW9uc1t0aGlzLmN1cnJlbnRWaWV3cG9ydEluZGV4XSk7XHJcblx0XHRcdHRoaXMuY2FtZXJhLnVwLmNvcHkodGhpcy5fcG9pbnRMaWdodFNoYWRvd1Vwc1t0aGlzLmN1cnJlbnRWaWV3cG9ydEluZGV4XSk7XHJcblx0XHRcdGNvbnN0IHsgeCwgeSwgeiB9ID0gdGFyZ2V0O1xyXG5cdFx0XHR0aGlzLmNhbWVyYS5sb29rQXQoeCwgeSwgeik7XHJcblx0XHRcdHRoaXMuY2FtZXJhLnVwZGF0ZU1hdHJpeCgpO1xyXG5cdFx0XHR0aGlzLmNhbWVyYS51cGRhdGVWcE1hdHJpeEFycmF5QW5kSW5kZXgodGhpcy5jdXJyZW50Vmlld3BvcnRJbmRleCk7XHJcblx0XHRcdGlmICh0aGlzLmN1cnJlbnRWaWV3cG9ydEluZGV4ID09IDUpIHRoaXMudnBNYXRyaXhBcnJheURpcnR5ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgTGlnaHRUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xyXG5pbXBvcnQgeyBMaWdodCB9IGZyb20gXCIuL0xpZ2h0XCI7XHJcbmltcG9ydCB7IFBvaW50TGlnaHRTaGFkb3cgfSBmcm9tIFwiLi9zaGFkb3dzL1BvaW50TGlnaHRTaGFkb3dcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBQb2ludExpZ2h0IGV4dGVuZHMgTGlnaHQge1xyXG5cdHByaXZhdGUgX2Rpc3RhbmNlOiBudW1iZXI7XHJcblx0cHJpdmF0ZSBfZGVjYXk6IG51bWJlcjtcclxuXHRkaXN0YW5jZURpcnR5OiBib29sZWFuO1xyXG5cdGRlY2F5RGlydHk6IGJvb2xlYW47XHJcblxyXG5cdGdldCBzaGFkb3coKTogUG9pbnRMaWdodFNoYWRvdyB7XHJcblx0XHRyZXR1cm4gdGhpcy5fc2hhZG93IGFzIFBvaW50TGlnaHRTaGFkb3c7XHJcblx0fVxyXG5cclxuXHRzZXQgc2hhZG93KHZhbHVlOiBQb2ludExpZ2h0U2hhZG93KSB7XHJcblx0XHR0aGlzLnNoYWRvd0RpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX3NoYWRvdyA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0b3IoY29sb3I6IFZlY3RvcjMsIGludGVuc2l0eTogbnVtYmVyLCBkaXN0YW5jZSA9IDAsIGRlY2F5ID0gNCwgb3BlblNoYWRvdyA9IHRydWUpIHtcclxuXHRcdHN1cGVyKGNvbG9yLCBpbnRlbnNpdHkpO1xyXG5cdFx0dGhpcy5fZGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuXHRcdHRoaXMuX2RlY2F5ID0gZGVjYXk7XHJcblx0XHR0aGlzLmRpc3RhbmNlRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5kZWNheURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMubGlnaHRUeXBlID0gTGlnaHRUeXBlLlBvaW50TGlnaHQ7XHJcblx0XHRpZiAob3BlblNoYWRvdykgdGhpcy5zaGFkb3cgPSBuZXcgUG9pbnRMaWdodFNoYWRvdygpO1xyXG5cdH1cclxuXHRzZXQgZGlzdGFuY2UodmFsdWUpIHtcclxuXHRcdHRoaXMuZGlzdGFuY2VEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9kaXN0YW5jZSA9IHZhbHVlO1xyXG5cdH1cclxuXHRnZXQgZGlzdGFuY2UoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fZGlzdGFuY2U7XHJcblx0fVxyXG5cdHNldCBkZWNheSh2YWx1ZSkge1xyXG5cdFx0dGhpcy5kZWNheURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX2RlY2F5ID0gdmFsdWU7XHJcblx0fVxyXG5cdGdldCBkZWNheSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9kZWNheTtcclxuXHR9XHJcbn1cclxuLy8gdW5pZm9ybVxyXG4vLyBjb2xvcjoge30sXHJcbi8vIHBvc2l0aW9uOiB7fSxcclxuLy8gZGVjYXk6IHt9LFxyXG4vLyBkaXN0YW5jZToge31cclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vY2FtZXJhL0NhbWVyYVwiO1xyXG5pbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xyXG5pbXBvcnQgTGlnaHRNYW5nZXIgZnJvbSBcIi4uL2NvcmUvTGlnaHRNYW5nZXJcIjtcclxuaW1wb3J0IFJlbmRlclF1ZXVlIGZyb20gXCIuLi9jb3JlL1JlbmRlclF1ZXVlXCI7XHJcbmltcG9ydCB7IENvbW1hbmRTdWJUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IHsgTGlnaHQgfSBmcm9tIFwiLi4vbGlnaHQvTGlnaHRcIjtcclxuaW1wb3J0IHsgUG9pbnRMaWdodCB9IGZyb20gXCIuLi9saWdodC9Qb2ludExpZ2h0XCI7XHJcbmltcG9ydCB7IEJhc2VTaGFkb3cgfSBmcm9tIFwiLi4vbGlnaHQvc2hhZG93cy9CYXNlU2hhZG93XCI7XHJcbmltcG9ydCB7IFBvaW50TGlnaHRTaGFkb3cgfSBmcm9tIFwiLi4vbGlnaHQvc2hhZG93cy9Qb2ludExpZ2h0U2hhZG93XCI7XHJcbmltcG9ydCBTaGFkZXJNYXRlcmlhbCBmcm9tIFwiLi4vbWF0ZXJpYWwvU2hhZGVyTWF0ZXJpYWxcIjtcclxuaW1wb3J0IEF0dGFjaG1lbnQgZnJvbSBcIi4uL3JlbmRlci9BdHRhY2htZW50XCI7XHJcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9yZW5kZXIvQ29udGV4dFwiO1xyXG5pbXBvcnQgUmVuZGVyVGFyZ2V0IGZyb20gXCIuLi9yZW5kZXIvUmVuZGVyVGFyZ2V0XCI7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5pbXBvcnQgZ2V0VmVydEZyYWcgZnJvbSBcIi4uL3NoYWRlci9TaGFkZXJzXCI7XHJcbmltcG9ydCBQYXNzIGZyb20gXCIuL1Bhc3NcIjtcclxuZXhwb3J0IGNsYXNzIFNoYWRvd1Bhc3MgZXh0ZW5kcyBQYXNzIHtcclxuXHRwdWJsaWMgc2hhZG93TWF0ZXJpYWw6IFNoYWRlck1hdGVyaWFsO1xyXG5cdF90ZXN0VGV4dHVyZTogVGV4dHVyZTtcclxuXHRjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0KSB7XHJcblx0XHRzdXBlcihjb250ZXh0KTtcclxuXHRcdHRoaXMuaW5pdChjb250ZXh0KTtcclxuXHR9XHJcblx0cmVuZGVyKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUsIGNhbWVyYT86IENhbWVyYSkge1xyXG5cdFx0Y29uc3QgeyByZW5kZXJRdWV1ZSwgY29udGV4dCwgbGlnaHRNYW5nZXIgfSA9IGZyYW1lU3RhdGU7XHJcblx0XHRjb25zdCBsaWdodHMgPSBsaWdodE1hbmdlci5nZXRBbGxMaWdodHMoKTtcclxuXHRcdGlmIChsaWdodHMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaWdodHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGlnaHQ6IFBvaW50TGlnaHQgfCBMaWdodCA9IGxpZ2h0c1tpXTtcclxuXHRcdFx0Y29uc3Qgc2hhZG93ID0gbGlnaHQuc2hhZG93O1xyXG5cdFx0XHRpZiAoIXNoYWRvdykgY29udGludWU7XHJcblx0XHRcdC8vIHRoaXMuX3Rlc3RUZXh0dXJlID0gY29udGV4dC5saWdodE1hbmdlci5fdGVzdFRleHR1cmVcclxuXHRcdFx0Ly8gdGhpcy5iZWZvcmVSZW5kZXIoeyBzaGFkb3cgfSk7XHJcblx0XHRcdGlmIChzaGFkb3cgaW5zdGFuY2VvZiBQb2ludExpZ2h0U2hhZG93ICYmIGxpZ2h0IGluc3RhbmNlb2YgUG9pbnRMaWdodCkge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc2hhZG93LnZpZXdwb3J0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0Ly8g5Yqo5oCBYnVmZmVy5pqC5pyq6LCD6YCa77yM5YWI5Lul5q2k56eN5pa55byP6Kej5YazXHJcblx0XHRcdFx0XHRzd2l0Y2ggKGkpIHtcclxuXHRcdFx0XHRcdFx0Y2FzZSAwOlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucmVuZGVyVGFyZ2V0LmRlcHRoQXR0YWNobWVudC5vcCA9IFwiY2xlYXJcIjtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5yZW5kZXJUYXJnZXQuZGVwdGhBdHRhY2htZW50Lm9wID0gXCJsb2FkXCI7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLmJlZm9yZVJlbmRlcih7IHNoYWRvdyB9KTtcclxuXHJcblx0XHRcdFx0XHRjb25zdCB2aWV3cG9ydCA9IHNoYWRvdy52aWV3cG9ydHNbaV07XHJcblx0XHRcdFx0XHRjb25zdCB2aWV3cG9ydFNpemUgPSBzaGFkb3cudmlld3BvcnRTaXplO1xyXG5cdFx0XHRcdFx0c2hhZG93LmN1cnJlbnRWaWV3cG9ydEluZGV4ID0gaTtcclxuXHRcdFx0XHRcdHNoYWRvdy51cGRhdGUobGlnaHQpO1xyXG5cdFx0XHRcdFx0Ly8gbGlnaHQuZm9yY2VVcGRhdGUgPSB0cnVlO1xyXG5cdFx0XHRcdFx0Y29udGV4dC5zZXRWaWV3UG9ydChcclxuXHRcdFx0XHRcdFx0dmlld3BvcnQueCAqIHZpZXdwb3J0U2l6ZS54LFxyXG5cdFx0XHRcdFx0XHR2aWV3cG9ydC55ICogdmlld3BvcnRTaXplLnksXHJcblx0XHRcdFx0XHRcdHZpZXdwb3J0U2l6ZS54LFxyXG5cdFx0XHRcdFx0XHR2aWV3cG9ydFNpemUueVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGNvbnRleHQuc2V0U2Npc3NvclRlc3QoXHJcblx0XHRcdFx0XHRcdHZpZXdwb3J0LnggKiB2aWV3cG9ydFNpemUueCxcclxuXHRcdFx0XHRcdFx0dmlld3BvcnQueSAqIHZpZXdwb3J0U2l6ZS55LFxyXG5cdFx0XHRcdFx0XHR2aWV3cG9ydFNpemUueCxcclxuXHRcdFx0XHRcdFx0dmlld3BvcnRTaXplLnlcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR0aGlzLnN1YlJlbmRlcihyZW5kZXJRdWV1ZSwgc2hhZG93LCBsaWdodE1hbmdlcik7XHJcblx0XHRcdFx0XHRzdXBlci5hZnRlclJlbmRlcigpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLnJlbmRlclRhcmdldC5kZXB0aEF0dGFjaG1lbnQub3AgPSBcImNsZWFyXCI7XHJcblx0XHRcdFx0dGhpcy5iZWZvcmVSZW5kZXIoeyBzaGFkb3cgfSk7XHJcblx0XHRcdFx0c2hhZG93LnVwZGF0ZShsaWdodCk7XHJcblx0XHRcdFx0Y29udGV4dC5zZXRWaWV3UG9ydCgwLCAwLCBzaGFkb3cuc2hhZG93TWFwU2l6ZS54LCBzaGFkb3cuc2hhZG93TWFwU2l6ZS55KTtcclxuXHRcdFx0XHRjb250ZXh0LnNldFNjaXNzb3JUZXN0KDAsIDAsIHNoYWRvdy5zaGFkb3dNYXBTaXplLngsIHNoYWRvdy5zaGFkb3dNYXBTaXplLnkpO1xyXG5cdFx0XHRcdHRoaXMuc3ViUmVuZGVyKHJlbmRlclF1ZXVlLCBzaGFkb3csIGxpZ2h0TWFuZ2VyKTtcclxuXHRcdFx0XHRzdXBlci5hZnRlclJlbmRlcigpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHQvLyBzdXBlci5hZnRlclJlbmRlcigpO1xyXG5cdFx0bGlnaHRNYW5nZXIudXBkYXRlTGlnaHRTaGFkb3coKTtcclxuXHRcdGNvbnRleHQucmVzZXRWaWV3UG9ydFRvRnVsbENhbnZhcygpO1xyXG5cdH1cclxuXHJcblx0c3ViUmVuZGVyKHJlbmRlclF1ZXVlOiBSZW5kZXJRdWV1ZSwgc2hhZG93OiBCYXNlU2hhZG93LCBsaWdodE1hbmdlcjogTGlnaHRNYW5nZXIpIHtcclxuXHRcdHJlbmRlclF1ZXVlLnNvcnQoKTtcclxuXHRcdC8vIHJlbmRlclF1ZXVlLnByZVJlbmRlcihzaGFkb3cuY2FtZXJhLCB0aGlzLmNvbnRleHQsIHRoaXMucGFzc1JlbmRlckVuY29kZXIpO1xyXG5cdFx0cmVuZGVyUXVldWUudHJhbnNwYXJlbnRSZW5kZXIoXHJcblx0XHRcdHNoYWRvdy5jYW1lcmEsXHJcblx0XHRcdHRoaXMuY29udGV4dCxcclxuXHRcdFx0dGhpcy5wYXNzUmVuZGVyRW5jb2RlcixcclxuXHRcdFx0dGhpcy5zaGFkb3dNYXRlcmlhbCxcclxuXHRcdFx0Q29tbWFuZFN1YlR5cGUuU2hhZG93LFxyXG5cdFx0XHRsaWdodE1hbmdlclxyXG5cdFx0KTtcclxuXHRcdHJlbmRlclF1ZXVlLm9wYXF1ZVJlbmRlcihcclxuXHRcdFx0c2hhZG93LmNhbWVyYSxcclxuXHRcdFx0dGhpcy5jb250ZXh0LFxyXG5cdFx0XHR0aGlzLnBhc3NSZW5kZXJFbmNvZGVyLFxyXG5cdFx0XHR0aGlzLnNoYWRvd01hdGVyaWFsLFxyXG5cdFx0XHRDb21tYW5kU3ViVHlwZS5TaGFkb3csXHJcblx0XHRcdGxpZ2h0TWFuZ2VyXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Ly8gZ2V0RGVwdGhUZXh0dXJlKCk6IFRleHR1cmUge1xyXG5cdC8vIFx0cmV0dXJuIHRoaXMuX3Rlc3RUZXh0dXJlO1xyXG5cdC8vIH1cclxuXHRiZWZvcmVSZW5kZXIob3B0aW9uczogeyBzaGFkb3c6IEJhc2VTaGFkb3cgfSkge1xyXG5cdFx0Y29uc3QgeyBzaGFkb3cgfSA9IG9wdGlvbnM7XHJcblx0XHR0aGlzLnNldFJlbmRlclRhcmdldChzaGFkb3cpO1xyXG5cdFx0c3VwZXIuYmVmb3JlUmVuZGVyKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldFJlbmRlclRhcmdldChzaGFkb3c6IEJhc2VTaGFkb3cpIHtcclxuXHRcdHRoaXMucmVuZGVyVGFyZ2V0LmRlcHRoQXR0YWNobWVudC50ZXh0dXJlID0gc2hhZG93LmdldFNoYWRvd01hcFRleHR1cmUoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaW5pdChjb250ZXh0OiBDb250ZXh0KSB7XHJcblx0XHR0aGlzLmNyZWF0ZVJlbmRlclRhcmdldChjb250ZXh0KTtcclxuXHRcdHRoaXMuY3JlYXRlU2hhZG93TWF0ZXJpYWwoKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVhdGVSZW5kZXJUYXJnZXQoY29udGV4dDogQ29udGV4dCkge1xyXG5cdFx0Y29uc3QgZGVwdGhBdHRhY2htZW50ID0gbmV3IEF0dGFjaG1lbnQoMS4wLCB7IHRleHR1cmU6IHVuZGVmaW5lZCB9KTtcclxuXHRcdHRoaXMucmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChcInJlbmRlclwiLCBbXSwgZGVwdGhBdHRhY2htZW50KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY3JlYXRlU2hhZG93TWF0ZXJpYWwoKSB7XHJcblx0XHRjb25zdCBzaGFkb3dNYXBTaGFkZXJGdW5jdGlvbiA9IChkZWZpbmVzID0ge30pID0+IHtcclxuXHRcdFx0Y29uc3QgZmluYWxEZWZpbmVzID0gT2JqZWN0LmFzc2lnbihcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRzZWxmQmluZGluZzogMCxcclxuXHRcdFx0XHRcdGNhbWVyYUJpbmRpbmc6IDAsXHJcblx0XHRcdFx0XHRwb3NpdGlvbkxvY2F0aW9uOiAwXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRkZWZpbmVzXHJcblx0XHRcdCk7XHJcblx0XHRcdHJldHVybiBnZXRWZXJ0RnJhZyhcInNoYWRvd01hcFwiLCBmaW5hbERlZmluZXMpLnZlcnQ7XHJcblx0XHR9O1xyXG5cclxuXHRcdHRoaXMuc2hhZG93TWF0ZXJpYWwgPSBuZXcgU2hhZGVyTWF0ZXJpYWwoe1xyXG5cdFx0XHR0eXBlOiBcInNoYWRvd01hdGVyaWFsXCIsXHJcblx0XHRcdHVuaWZvcm1zOiB7XHJcblx0XHRcdFx0bW9kZWxNYXRyaXg6IHsgdHlwZTogXCJtYXQ0XCIsIHZhbHVlOiBudWxsIH1cclxuXHRcdFx0fSxcclxuXHRcdFx0dmVydDogc2hhZG93TWFwU2hhZGVyRnVuY3Rpb24sXHJcblx0XHRcdGZyYWc6IHVuZGVmaW5lZCxcclxuXHRcdFx0bGlnaHQ6IGZhbHNlIC8vIFRPRE865YWIdHJ1Ze+8jGZhbHNl5pyJ5pi+56S6YnVnXHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vY2FtZXJhL0NhbWVyYVwiO1xyXG5pbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xyXG5pbXBvcnQgeyBCYXNpY1Bhc3MgfSBmcm9tIFwiLi4vcGFzcy9CYXNpY1Bhc3NcIjtcclxuaW1wb3J0IHsgU2hhZG93UGFzcyB9IGZyb20gXCIuLi9wYXNzL1NoYWRvd1Bhc3NcIjtcclxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL3JlbmRlci9Db250ZXh0XCI7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5pbXBvcnQgSUJhc2VSZW5kZXJMaW5lIGZyb20gXCIuL0lCYXNlUmVuZGVyTGluZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRm9yd2FyZFJlbmRlckxpbmUgaW1wbGVtZW50cyBJQmFzZVJlbmRlckxpbmUge1xyXG5cdHByaXZhdGUgYmFzaWNQYXNzOiBCYXNpY1Bhc3M7XHJcblx0cHJvdGVjdGVkIHNoYWRvd1Bhc3M6IFNoYWRvd1Bhc3M7XHJcblx0Y29uc3RydWN0b3IocHVibGljIGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdHRoaXMuYmFzaWNQYXNzID0gbmV3IEJhc2ljUGFzcyhjb250ZXh0KTtcclxuXHRcdHRoaXMuc2hhZG93UGFzcyA9IG5ldyBTaGFkb3dQYXNzKGNvbnRleHQpO1xyXG5cdFx0Ly8gY29uc3QgYmxvb209bmV3IEJsb29tUG9zdEVmZmVjdCh7XHJcblx0XHQvLyBcdHdpZHRoLFxyXG5cdFx0Ly8gXHRoZWlnaHQsXHJcblx0XHQvLyBcdHN0cmVuZ3RoOjAuMyxcclxuXHRcdC8vIFx0cmFkaXVzOjAuMyxcclxuXHRcdC8vIFx0dGhyZXNob2xkOjAuNVxyXG5cdFx0Ly8gfSk7XHJcblx0XHQvLyB0aGlzLnBvc3RFZmZlY3RDb2xsZWN0aW9uLmFkZChibG9vbSlcclxuXHR9XHJcblx0Z2V0T3V0cHV0VGV4dHVyZSgpOiBUZXh0dXJlIHtcclxuXHRcdHJldHVybiB0aGlzLmJhc2ljUGFzcy5nZXRDb2xvclRleHR1cmUoMCk7XHJcblx0XHQvLyByZXR1cm4gdGhpcy5zaGFkb3dQYXNzLmdldERlcHRoVGV4dHVyZSgpXHJcblx0fVxyXG5cdHJlbmRlcihmcmFtZVN0YXRlOiBGcmFtZVN0YXRlLCBjYW1lcmE/OiBDYW1lcmEpIHtcclxuXHRcdHRoaXMuc2hhZG93UGFzcy5yZW5kZXIoZnJhbWVTdGF0ZSwgY2FtZXJhKTtcclxuXHJcblx0XHR0aGlzLmJhc2ljUGFzcy5iZWZvcmVSZW5kZXIoZnJhbWVTdGF0ZSk7XHJcblx0XHR0aGlzLmJhc2ljUGFzcy5yZW5kZXIoZnJhbWVTdGF0ZSwgY2FtZXJhKTtcclxuXHRcdHRoaXMuYmFzaWNQYXNzLmFmdGVyUmVuZGVyKCk7XHJcblx0fVxyXG5cdGRlc3Ryb3koKSB7XHJcblx0XHR0aGlzLmJhc2ljUGFzcyA9IHVuZGVmaW5lZDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi9jYW1lcmEvQ2FtZXJhXCI7XG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSBcIi4vY2FtZXJhL1BlcnNwZWN0aXZlQ2FtZXJhXCI7XG5pbXBvcnQgeyBFdmVudERpc3BhdGNoZXIgfSBmcm9tIFwiLi9jb3JlL0V2ZW50RGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgRnJhbWVTdGF0ZSwgQmFja2dyb3VuZCB9IGZyb20gXCIuL2NvcmUvRnJhbWVTdGF0ZVwiO1xuaW1wb3J0IExpZ2h0TWFuZ2VyIGZyb20gXCIuL2NvcmUvTGlnaHRNYW5nZXJcIjtcbmltcG9ydCBNZXNoTWFuZ2VyIGZyb20gXCIuL2NvcmUvTWVzaE1hbmdlclwiO1xuaW1wb3J0IHRleHR1cmVDYWNoZSBmcm9tIFwiLi9jb3JlL1RleHR1cmVDYWNoZVwiO1xuaW1wb3J0IHsgSW5zdGFuY2UsIFJlbmRlck9iamVjdFR5cGUgfSBmcm9tIFwiLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5pbXBvcnQgeyBMaWdodCB9IGZyb20gXCIuL2xpZ2h0L0xpZ2h0XCI7XG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4vbWVzaC9NZXNoXCI7XG5pbXBvcnQgTm9kZSBmcm9tIFwiLi9tZXNoL05vZGVcIjtcbmltcG9ydCBQb3N0RWZmZWN0IGZyb20gXCIuL3Bvc3QtcHJvY2Vzcy9Qb3N0RWZmZWN0XCI7XG5pbXBvcnQgUG9zdEVmZmVjdENvbGxlY3Rpb24gZnJvbSBcIi4vcG9zdC1wcm9jZXNzL1Bvc3RFZmZlY3RDb2xsZWN0aW9uXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi9yZW5kZXIvQ29udGV4dFwiO1xuaW1wb3J0IHsgVmlld1BvcnQgfSBmcm9tIFwiLi9yZW5kZXIvUmVuZGVyU3RhdGVcIjtcbmltcG9ydCBGb3J3YXJkUmVuZGVyTGluZSBmcm9tIFwiLi9yZW5kZXJwaXBlbGluZS9Gb3J3YXJkUmVuZGVyTGluZVwiO1xuaW1wb3J0IElCYXNlUmVuZGVyTGluZSBmcm9tIFwiLi9yZW5kZXJwaXBlbGluZS9JQmFzZVJlbmRlckxpbmVcIjtcblxuZXhwb3J0IGNsYXNzIFNjZW5lIGV4dGVuZHMgRXZlbnREaXNwYXRjaGVyIHtcblx0Y2FtZXJhOiBQZXJzcGVjdGl2ZUNhbWVyYTtcblx0Y29udGV4dDogQ29udGV4dDtcblx0cmVxdWVzdEFkYXB0ZXI6IG9iamVjdDtcblx0ZGV2aWNlRGVzY3JpcHRvcjogb2JqZWN0O1xuXHRwcmVzZW50YXRpb25Db250ZXh0RGVzY3JpcHRvcjogb2JqZWN0O1xuXHRjb250YWluZXI6IEhUTUxEaXZFbGVtZW50O1xuXHRmcmFtZVN0YXRlOiBGcmFtZVN0YXRlO1xuXHRjdXJyZW50UmVuZGVyUGlwZWxpbmU6IElCYXNlUmVuZGVyTGluZTtcblx0dmlld3BvcnQ6IFZpZXdQb3J0O1xuXHRiYWNrZ3JvdW5kOiBCYWNrZ3JvdW5kO1xuXHRwcml2YXRlIHJlYWR5OiBib29sZWFuO1xuXHRwcml2YXRlIGluaXRlZDogYm9vbGVhbjtcblx0cHJpdmF0ZSBtZXNoTWFuZ2VyOiBNZXNoTWFuZ2VyO1xuXHRwcml2YXRlIHBvc3RFZmZlY3RDb2xsZWN0aW9uOiBQb3N0RWZmZWN0Q29sbGVjdGlvbjtcblx0cHJpdmF0ZSBsaWdodE1hbmdlcjogTGlnaHRNYW5nZXI7XG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuY29udGFpbmVyID1cblx0XHRcdG9wdGlvbnMuY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTERpdkVsZW1lbnRcblx0XHRcdFx0PyBvcHRpb25zLmNvbnRhaW5lclxuXHRcdFx0XHQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdGlvbnMuY29udGFpbmVyKTtcblx0XHR0aGlzLm1lc2hNYW5nZXIgPSBuZXcgTWVzaE1hbmdlcigpO1xuXHRcdHRoaXMucG9zdEVmZmVjdENvbGxlY3Rpb24gPSBuZXcgUG9zdEVmZmVjdENvbGxlY3Rpb24oKTtcblx0XHR0aGlzLmNvbnRleHQgPSBuZXcgQ29udGV4dCh7XG5cdFx0XHRjYW52YXM6IG51bGwsXG5cdFx0XHRjb250YWluZXI6IHRoaXMuY29udGFpbmVyLFxuXHRcdFx0cGl4ZWxSYXRpbzogMVxuXHRcdH0pO1xuXHRcdHRoaXMucmVxdWVzdEFkYXB0ZXIgPSBvcHRpb25zLnJlcXVlc3RBZGFwdGVyIHx8IHt9O1xuXHRcdHRoaXMuZGV2aWNlRGVzY3JpcHRvciA9IG9wdGlvbnMuZGV2aWNlRGVzY3JpcHRvciB8fCB7fTtcblx0XHR0aGlzLnByZXNlbnRhdGlvbkNvbnRleHREZXNjcmlwdG9yID0gb3B0aW9ucy5wcmVzZW50YXRpb25Db250ZXh0RGVzY3JpcHRvcjtcblx0XHR0aGlzLnJlYWR5ID0gZmFsc2U7XG5cdFx0dGhpcy5pbml0ZWQgPSBmYWxzZTtcblx0XHR0aGlzLmxpZ2h0TWFuZ2VyID0gbmV3IExpZ2h0TWFuZ2VyKHsgb3BlblNoYWRvdzogdHJ1ZSB9KTtcblx0XHR0aGlzLmJhY2tncm91bmQgPSBvcHRpb25zLmJhY2tncm91bmQ7XG5cdH1cblx0cHJpdmF0ZSBhc3luYyBpbml0KCkge1xuXHRcdGF3YWl0IHRoaXMuY29udGV4dC5pbml0KHRoaXMucmVxdWVzdEFkYXB0ZXIsIHRoaXMuZGV2aWNlRGVzY3JpcHRvciwgdGhpcy5wcmVzZW50YXRpb25Db250ZXh0RGVzY3JpcHRvcik7XG5cdFx0dGhpcy5jdXJyZW50UmVuZGVyUGlwZWxpbmUgPSBuZXcgRm9yd2FyZFJlbmRlckxpbmUodGhpcy5jb250ZXh0KTtcblx0XHR0aGlzLmZyYW1lU3RhdGUgPSBuZXcgRnJhbWVTdGF0ZSh0aGlzLmNvbnRleHQsIHRoaXMubGlnaHRNYW5nZXIsIEZyYW1lU3RhdGUuZ2V0RnJhbWVTdGF0ZU9wdGlvbnNCeVNjZW5lKHRoaXMpKTtcblx0XHR0aGlzLnZpZXdwb3J0ID0gbmV3IFZpZXdQb3J0KDAsIDAsIHRoaXMuY29udGV4dC5wcmVzZW50YXRpb25TaXplLndpZHRoLCB0aGlzLmNvbnRleHQucHJlc2VudGF0aW9uU2l6ZS5oZWlnaHQpO1xuXHRcdHRoaXMucmVhZHkgPSB0cnVlO1xuXHR9XG5cdGFkZChpbnN0YW5jZTogSW5zdGFuY2UpIHtcblx0XHRpZiAoXG5cdFx0XHRbUmVuZGVyT2JqZWN0VHlwZS5Ob2RlLCBSZW5kZXJPYmplY3RUeXBlLlNreWJveCwgUmVuZGVyT2JqZWN0VHlwZS5NZXNoLCBSZW5kZXJPYmplY3RUeXBlLkRlYnVnXS5pbmNsdWRlcyhcblx0XHRcdFx0aW5zdGFuY2UudHlwZVxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0dGhpcy5tZXNoTWFuZ2VyLmFkZCg8TWVzaD5pbnN0YW5jZSk7XG5cdFx0fSBlbHNlIGlmIChpbnN0YW5jZS50eXBlID09IFJlbmRlck9iamVjdFR5cGUuTGlnaHQpIHtcblx0XHRcdHRoaXMubGlnaHRNYW5nZXIuYWRkKDxMaWdodD5pbnN0YW5jZSk7XG5cdFx0fSBlbHNlIGlmIChpbnN0YW5jZS50eXBlID09IFJlbmRlck9iamVjdFR5cGUuUG9zdEVmZmVjdCkge1xuXHRcdFx0dGhpcy5wb3N0RWZmZWN0Q29sbGVjdGlvbi5hZGQoPFBvc3RFZmZlY3Q+aW5zdGFuY2UpO1xuXHRcdH1cblx0fVxuXHRyZW1vdmUoaW5zdGFuY2U6IEluc3RhbmNlKSB7XG5cdFx0aWYgKFtSZW5kZXJPYmplY3RUeXBlLk5vZGUsIFJlbmRlck9iamVjdFR5cGUuU2t5Ym94LCBSZW5kZXJPYmplY3RUeXBlLk1lc2hdLmluY2x1ZGVzKGluc3RhbmNlLnR5cGUpKSB7XG5cdFx0XHR0aGlzLm1lc2hNYW5nZXIucmVtb3ZlKDxNZXNoPmluc3RhbmNlKTtcblx0XHR9IGVsc2UgaWYgKGluc3RhbmNlLnR5cGUgPT0gUmVuZGVyT2JqZWN0VHlwZS5MaWdodCkge1xuXHRcdFx0dGhpcy5saWdodE1hbmdlci5yZW1vdmUoPExpZ2h0Pmluc3RhbmNlKTtcblx0XHR9IGVsc2UgaWYgKGluc3RhbmNlLnR5cGUgPT0gUmVuZGVyT2JqZWN0VHlwZS5Qb3N0RWZmZWN0KSB7XG5cdFx0XHR0aGlzLnBvc3RFZmZlY3RDb2xsZWN0aW9uLnJlbW92ZSg8UG9zdEVmZmVjdD5pbnN0YW5jZSk7XG5cdFx0fVxuXHR9XG5cdHNldENhbWVyYShjYW1lcmEpIHtcblx0XHR0aGlzLmNhbWVyYSA9IGNhbWVyYTtcblx0fVxuXHRyZXNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcblx0XHR0aGlzLmNvbnRleHQucmVzaXplKHdpZHRoLCBoZWlnaHQpO1xuXHRcdHRoaXMucG9zdEVmZmVjdENvbGxlY3Rpb24uc2V0UmVzb2x2ZUZyYW1lRGlydHkodHJ1ZSk7XG5cdH1cblx0YXN5bmMgcmVuZGVyKG5vZGU/OiBOb2RlLCBjYW1lcmE/OiBDYW1lcmEpIHtcblx0XHRpZiAoIXRoaXMuaW5pdGVkKSB7XG5cdFx0XHR0aGlzLmluaXRlZCA9IHRydWU7XG5cdFx0XHRhd2FpdCB0aGlzLmluaXQoKTtcblx0XHRcdHRoaXMudXBkYXRlKG5vZGUsIGNhbWVyYSk7XG5cdFx0XHR0aGlzLmFmdGVyUmVuZGVyKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudXBkYXRlKG5vZGUsIGNhbWVyYSk7XG5cdFx0XHR0aGlzLmFmdGVyUmVuZGVyKCk7XG5cdFx0fVxuXHR9XG5cblx0YWZ0ZXJSZW5kZXIoKSB7fVxuXG5cdHB1YmxpYyBzZXRWaWV3UG9ydCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBib29sZWFuIHtcblx0XHRpZiAoIXRoaXMucmVhZHkpIHJldHVybiBmYWxzZTtcblx0XHR0aGlzLmNvbnRleHQuc2V0Vmlld1BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cHVibGljIHNldFNjaXNzb3JUZXN0KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdGlmICghdGhpcy5yZWFkeSkgcmV0dXJuIGZhbHNlO1xuXHRcdHRoaXMuY29udGV4dC5zZXRTY2lzc29yVGVzdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRwcml2YXRlIHVwZGF0ZShub2RlPzogTm9kZSwgY2FtZXJhPzogQ2FtZXJhKSB7XG5cdFx0aWYgKCF0aGlzLnJlYWR5KSByZXR1cm47XG5cdFx0Ly8g6YeK5pS+57q555CGXG5cdFx0dGV4dHVyZUNhY2hlLnJlbGVhc2VkVGV4dHVyZXMoKTtcblx0XHQvLyDmm7TmlrBGcmFtZVN0YXRlXG5cdFx0dGhpcy5mcmFtZVN0YXRlLnVwZGF0ZShjYW1lcmEgPz8gdGhpcy5jYW1lcmEsIEZyYW1lU3RhdGUuZ2V0RnJhbWVTdGF0ZU9wdGlvbnNCeVNjZW5lKHRoaXMpKTtcblx0XHQvLyB1cGRhdGUgcHJpbWl0aXZlIGFuZCBzZWxlY3Rcblx0XHQobm9kZSA/PyB0aGlzLm1lc2hNYW5nZXIpLnVwZGF0ZSh0aGlzLmZyYW1lU3RhdGUsIGNhbWVyYSA/PyB0aGlzLmNhbWVyYSk7XG5cdFx0Ly8gc2VsY3QgcmVuZGVyUGlwZWxpbmVcblx0XHR0aGlzLmN1cnJlbnRSZW5kZXJQaXBlbGluZS5yZW5kZXIodGhpcy5mcmFtZVN0YXRlLCBjYW1lcmEgPz8gdGhpcy5jYW1lcmEpO1xuXHRcdC8vIOWQjuWkhOeQhlxuXHRcdHRoaXMucG9zdEVmZmVjdENvbGxlY3Rpb24ucmVuZGVyKHRoaXMuY29udGV4dCwgdGhpcy5jdXJyZW50UmVuZGVyUGlwZWxpbmUuZ2V0T3V0cHV0VGV4dHVyZSgpKTtcblx0fVxufVxuIiwiaW1wb3J0IElDbG9uZSBmcm9tIFwiLi4vY29yZS9JQ2xvbmVcIjtcclxuaW1wb3J0IHsgUmVuZGVyT2JqZWN0VHlwZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tIFwiLi4vZ2VvbWV0cnkvR2VvbWV0cnlcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcclxuaW1wb3J0IHsgRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XHJcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9yZW5kZXIvQ29udGV4dFwiO1xyXG5pbXBvcnQgeyBQcmltaXRpdmUsIFJlbmRlclN0YXRlLCBUYXJnZXQgfSBmcm9tIFwiLi4vcmVuZGVyL1JlbmRlclN0YXRlXCI7XHJcbmltcG9ydCBSZW5kZXJUYXJnZXQgZnJvbSBcIi4uL3JlbmRlci9SZW5kZXJUYXJnZXRcIjtcclxuaW1wb3J0IFNhbXBsZXIgZnJvbSBcIi4uL3JlbmRlci9TYW1wbGVyXCI7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUG9zdEVmZmVjdCBpbXBsZW1lbnRzIElDbG9uZSB7XHJcblx0d2lkdGg6IG51bWJlcjtcclxuXHJcblx0aGVpZ2h0OiBudW1iZXI7XHJcblxyXG5cdGRlZmF1bHRTYW1wbGVyOiBTYW1wbGVyO1xyXG5cclxuXHRyZXNvbHZlVG9DYW52YXM6IGJvb2xlYW47XHJcblxyXG5cdGN1cnJlbnRSZW5kZXJUYXJnZXQ6IFJlbmRlclRhcmdldDtcclxuXHJcblx0ZnVsbFNjcmVlblF1YWQ6IE1lc2g7XHJcblxyXG5cdHJlbmRlclN0YXRlOiBSZW5kZXJTdGF0ZTtcclxuXHJcblx0aWQ6IHN0cmluZztcclxuXHJcblx0cHJpb3JpdHk6IG51bWJlcjtcclxuXHJcblx0aXNQb3N0RWZmZWN0OiBib29sZWFuO1xyXG5cclxuXHR0eXBlOiBSZW5kZXJPYmplY3RUeXBlO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgaWQ6IHN0cmluZykge1xyXG5cdFx0dGhpcy53aWR0aCA9IHdpZHRoO1xyXG5cdFx0dGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblx0XHR0aGlzLmluaXREZWZhdWx0UGFybXMoKTtcclxuXHRcdHRoaXMuaWQgPSBpZDtcclxuXHRcdHRoaXMucHJpb3JpdHkgPSAwO1xyXG5cdFx0dGhpcy5pc1Bvc3RFZmZlY3QgPSB0cnVlO1xyXG5cdFx0dGhpcy50eXBlID0gUmVuZGVyT2JqZWN0VHlwZS5Qb3N0RWZmZWN0O1xyXG5cdH1cclxuXHRyZW5kZXIoY29udGV4dDogQ29udGV4dCwgY29sb3JUZXh0dXJlOiBUZXh0dXJlKTogVGV4dHVyZSB7XHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXM/LmN1cnJlbnRSZW5kZXJUYXJnZXQ/LmRlc3Ryb3koKTtcclxuXHR9XHJcblx0cHJvdGVjdGVkIHJlbmRlck1lc2goY29udGV4dDogQ29udGV4dCkge1xyXG5cdFx0dGhpcy5mdWxsU2NyZWVuUXVhZC5tYXRlcmlhbC5kaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmZ1bGxTY3JlZW5RdWFkLm1hdGVyaWFsLnVwZGF0ZSgpO1xyXG5cdFx0Y29uc3QgZHJhd0NvbWFuZCA9IHRoaXMuZnVsbFNjcmVlblF1YWQuZ2V0RHJhd0NvbW1hbmQoKTtcclxuXHRcdGNvbnN0IGN1cnJlbnRSZW5kZXJQYXNzRW5jb2RlciA9IHRoaXMuY3VycmVudFJlbmRlclRhcmdldC5iZWdpblJlbmRlclBhc3NFbmNvZGVyKGNvbnRleHQpO1xyXG5cdFx0ZHJhd0NvbWFuZC5yZW5kZXIoY29udGV4dCwgY3VycmVudFJlbmRlclBhc3NFbmNvZGVyKTtcclxuXHRcdHRoaXMuY3VycmVudFJlbmRlclRhcmdldC5lbmRSZW5kZXJQYXNzRW5jb2RlcigpO1xyXG5cdH1cclxuXHRwcml2YXRlIGluaXREZWZhdWx0UGFybXMoKSB7XHJcblx0XHRjb25zdCBnZW9tZXRyeSA9IG5ldyBHZW9tZXRyeSh7fSk7XHJcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoXHJcblx0XHRcdG5ldyBGbG9hdDMyQXR0cmlidXRlKFwicG9zaXRpb25cIiwgWy0xLjAsIDEuMCwgLTEuMCwgLTEuMCwgMS4wLCAtMS4wLCAxLjAsIC0xLjAsIDEuMCwgMS4wLCAtMS4wLCAxLjBdLCAyKVxyXG5cdFx0KTtcclxuXHRcdGdlb21ldHJ5LmNvdW50ID0gNjtcclxuXHRcdC8vIHJzXHJcblx0XHRjb25zdCBwcmltaXRpdmUgPSBuZXcgUHJpbWl0aXZlKCk7XHJcblx0XHRjb25zdCB0YXJnZXQgPSBuZXcgVGFyZ2V0KCk7XHJcblx0XHQvLyB0YXJnZXQuZm9ybWF0PVRleHR1cmVGb3JtYXQuUkdCQThVbm9ybVxyXG5cdFx0Y29uc3QgcmVuZGVyU3RhdGUgPSBuZXcgUmVuZGVyU3RhdGUoKTtcclxuXHRcdHJlbmRlclN0YXRlLnByaW1pdGl2ZSA9IHByaW1pdGl2ZTtcclxuXHRcdHJlbmRlclN0YXRlLnRhcmdldHMgPSBbdGFyZ2V0XTtcclxuXHRcdHRoaXMucmVuZGVyU3RhdGUgPSByZW5kZXJTdGF0ZTtcclxuXHRcdHRoaXMuZnVsbFNjcmVlblF1YWQgPSBuZXcgTWVzaChnZW9tZXRyeSk7XHJcblxyXG5cdFx0dGhpcy5kZWZhdWx0U2FtcGxlciA9IG5ldyBTYW1wbGVyKCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IFRleHR1cmVGb3JtYXQsIFRleHR1cmVVc2FnZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCB7IFVuaWZvcm1zIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IFNoYWRlck1hdGVyaWFsIGZyb20gXCIuLi9tYXRlcmlhbC9TaGFkZXJNYXRlcmlhbFwiO1xyXG5pbXBvcnQgQ29sb3IgZnJvbSBcIi4uL21hdGgvQ29sb3JcIjtcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4uL21hdGgvVmVjdG9yMlwiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XHJcbmltcG9ydCBBdHRhY2htZW50IGZyb20gXCIuLi9yZW5kZXIvQXR0YWNobWVudFwiO1xyXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vcmVuZGVyL0NvbnRleHRcIjtcclxuaW1wb3J0IFJlbmRlclRhcmdldCBmcm9tIFwiLi4vcmVuZGVyL1JlbmRlclRhcmdldFwiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcclxuaW1wb3J0IGdldFZlcnRGcmFnIGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyc1wiO1xyXG5pbXBvcnQgUG9zdEVmZmVjdCBmcm9tIFwiLi9Qb3N0RWZmZWN0XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCbG9vbVBvc3RFZmZlY3QgZXh0ZW5kcyBQb3N0RWZmZWN0IHtcclxuXHRzdGF0aWMgQmx1ckRpcmVjdGlvblggPSBuZXcgVmVjdG9yMigxLjAsIDAuMCk7XHJcblx0c3RhdGljIEJsdXJEaXJlY3Rpb25ZID0gbmV3IFZlY3RvcjIoMC4wLCAxLjApO1xyXG5cdHN0cmVuZ3RoOiBudW1iZXI7XHJcblx0cmFkaXVzOiBudW1iZXI7XHJcblx0dGhyZXNob2xkOiBudW1iZXI7XHJcblx0cmVuZGVyVGFyZ2V0c0hvcml6b250YWw6IFJlbmRlclRhcmdldFtdO1xyXG5cdHJlbmRlclRhcmdldHNWZXJ0aWNhbDogUmVuZGVyVGFyZ2V0W107XHJcblx0bk1pcHM6IG51bWJlcjtcclxuXHRyZW5kZXJUYXJnZXRCcmlnaHQ6IFJlbmRlclRhcmdldDtcclxuXHRtYXRlcmlhbEhpZ2hQYXNzRmlsdGVyOiBTaGFkZXJNYXRlcmlhbDtcclxuXHRoaWdoUGFzc1VuaWZvcm1zOiBVbmlmb3JtcztcclxuXHRjb21wb3NpdGVNYXRlcmlhbDogU2hhZGVyTWF0ZXJpYWw7XHJcblx0c2VwYXJhYmxlQmx1ck1hdGVyaWFsczogU2hhZGVyTWF0ZXJpYWxbXTtcclxuXHRzZXBhcmFibGVCbHVyWU1hdGVyaWFsczogU2hhZGVyTWF0ZXJpYWxbXTtcclxuXHRibGVuZFVuaWZvcm1zOiBVbmlmb3JtcztcclxuXHRibGVuZE1hdGVyaWFsOiBTaGFkZXJNYXRlcmlhbDtcclxuXHRibGVuZFRhcmdldDogUmVuZGVyVGFyZ2V0O1xyXG5cclxuXHRjb25zdHJ1Y3RvcihvcHRpb25zOiBCbG9vbVBvc3RFZmZlY3RQcm9wcykge1xyXG5cdFx0c3VwZXIob3B0aW9ucy53aWR0aCwgb3B0aW9ucy5oZWlnaHQsIFwiYmxvb21cIik7XHJcblx0XHR0aGlzLnN0cmVuZ3RoID0gb3B0aW9ucy5zdHJlbmd0aDtcclxuXHRcdHRoaXMucmFkaXVzID0gb3B0aW9ucy5yYWRpdXM7XHJcblx0XHR0aGlzLnRocmVzaG9sZCA9IG9wdGlvbnMudGhyZXNob2xkO1xyXG5cdFx0dGhpcy5pbml0KCk7XHJcblx0fVxyXG5cdGRlc3Ryb3koKSB7XHJcblx0XHR0aGlzLnJlbmRlclRhcmdldEJyaWdodC5kZXN0cm95KCk7XHJcblx0fVxyXG5cdHJlbmRlcihjb250ZXh0OiBDb250ZXh0LCBjb2xvclRleHR1cmU6IFRleHR1cmUpOiBUZXh0dXJlIHtcclxuXHRcdC8vIDEuIEV4dHJhY3QgQnJpZ2h0IEFyZWFzXHJcblx0XHR0aGlzLmN1cnJlbnRSZW5kZXJUYXJnZXQgPSB0aGlzLnJlbmRlclRhcmdldEJyaWdodDtcclxuXHRcdHRoaXMuaGlnaFBhc3NVbmlmb3Jtcy50RGlmZnVzZS52YWx1ZSA9IGNvbG9yVGV4dHVyZTtcclxuXHRcdHRoaXMuZnVsbFNjcmVlblF1YWQubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsSGlnaFBhc3NGaWx0ZXI7XHJcblx0XHR0aGlzLnJlbmRlck1lc2goY29udGV4dCk7XHJcblx0XHQvLyAyLiBCbHVyIEFsbCB0aGUgbWlwcyBwcm9ncmVzc2l2ZWx5XHJcblx0XHRsZXQgaW5wdXRSZW5kZXJUYXJnZXQgPSB0aGlzLnJlbmRlclRhcmdldEJyaWdodDtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5uTWlwczsgaSsrKSB7XHJcblx0XHRcdHRoaXMuZnVsbFNjcmVlblF1YWQubWF0ZXJpYWwgPSB0aGlzLnNlcGFyYWJsZUJsdXJNYXRlcmlhbHNbaV07XHJcblxyXG5cdFx0XHR0aGlzLnNlcGFyYWJsZUJsdXJNYXRlcmlhbHNbaV0udW5pZm9ybXMudERpZmZ1c2UudmFsdWUgPSBpbnB1dFJlbmRlclRhcmdldC5nZXRDb2xvclRleHR1cmUoKTtcclxuXHRcdFx0dGhpcy5zZXBhcmFibGVCbHVyTWF0ZXJpYWxzW2ldLnVuaWZvcm1zLmRpcmVjdGlvbi52YWx1ZSA9IEJsb29tUG9zdEVmZmVjdC5CbHVyRGlyZWN0aW9uWDtcclxuXHRcdFx0dGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID0gdGhpcy5yZW5kZXJUYXJnZXRzSG9yaXpvbnRhbFtpXTtcclxuXHJcblx0XHRcdHRoaXMucmVuZGVyTWVzaChjb250ZXh0KTtcclxuXHRcdFx0dGhpcy5mdWxsU2NyZWVuUXVhZC5tYXRlcmlhbCA9IHRoaXMuc2VwYXJhYmxlQmx1cllNYXRlcmlhbHNbaV07XHJcblx0XHRcdHRoaXMuc2VwYXJhYmxlQmx1cllNYXRlcmlhbHNbaV0udW5pZm9ybXMudERpZmZ1c2UudmFsdWUgPSB0aGlzLnJlbmRlclRhcmdldHNIb3Jpem9udGFsW2ldLmdldENvbG9yVGV4dHVyZSgpO1xyXG5cdFx0XHR0aGlzLnNlcGFyYWJsZUJsdXJZTWF0ZXJpYWxzW2ldLnVuaWZvcm1zLmRpcmVjdGlvbi52YWx1ZSA9IEJsb29tUG9zdEVmZmVjdC5CbHVyRGlyZWN0aW9uWTtcclxuXHRcdFx0dGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID0gdGhpcy5yZW5kZXJUYXJnZXRzVmVydGljYWxbaV07XHJcblxyXG5cdFx0XHR0aGlzLnJlbmRlck1lc2goY29udGV4dCk7XHJcblxyXG5cdFx0XHRpbnB1dFJlbmRlclRhcmdldCA9IHRoaXMucmVuZGVyVGFyZ2V0c1ZlcnRpY2FsW2ldO1xyXG5cdFx0fVxyXG5cdFx0Ly8gQ29tcG9zaXRlIEFsbCB0aGUgbWlwc1xyXG5cdFx0dGhpcy5mdWxsU2NyZWVuUXVhZC5tYXRlcmlhbCA9IHRoaXMuY29tcG9zaXRlTWF0ZXJpYWw7XHJcblx0XHR0aGlzLmN1cnJlbnRSZW5kZXJUYXJnZXQgPSB0aGlzLnJlbmRlclRhcmdldHNIb3Jpem9udGFsWzBdO1xyXG5cdFx0dGhpcy5yZW5kZXJNZXNoKGNvbnRleHQpO1xyXG5cdFx0Ly8gYmxlbmRcclxuXHRcdHRoaXMuYmxlbmRVbmlmb3Jtcy5iYXNlQ29sb3JUZXh0dXJlLnZhbHVlID0gY29sb3JUZXh0dXJlO1xyXG5cdFx0dGhpcy5mdWxsU2NyZWVuUXVhZC5tYXRlcmlhbCA9IHRoaXMuYmxlbmRNYXRlcmlhbDtcclxuXHRcdHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9IHRoaXMuYmxlbmRUYXJnZXQ7XHJcblx0XHR0aGlzLnJlbmRlck1lc2goY29udGV4dCk7XHJcblx0XHRyZXR1cm4gdGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0LmdldENvbG9yVGV4dHVyZSgpO1xyXG5cdH1cclxuXHRwcml2YXRlIGluaXQoKSB7XHJcblx0XHR0aGlzLnJlbmRlclRhcmdldHNIb3Jpem9udGFsID0gW107XHJcblx0XHR0aGlzLnJlbmRlclRhcmdldHNWZXJ0aWNhbCA9IFtdO1xyXG5cdFx0dGhpcy5uTWlwcyA9IDU7XHJcblx0XHRsZXQgcmVzeCA9IE1hdGgucm91bmQodGhpcy53aWR0aCAvIDIpO1xyXG5cdFx0bGV0IHJlc3kgPSBNYXRoLnJvdW5kKHRoaXMuaGVpZ2h0IC8gMik7XHJcblxyXG5cdFx0dGhpcy5yZW5kZXJUYXJnZXRCcmlnaHQgPSBuZXcgUmVuZGVyVGFyZ2V0KFwicmVuZGVyXCIsIFt0aGlzLmNyZWF0ZUNvbG9yQXR0YWNobWVudChyZXN4LCByZXN5KV0pO1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5uTWlwczsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IHJlbmRlclRhcmdldEhvcml6b25hbCA9IG5ldyBSZW5kZXJUYXJnZXQoXCJyZW5kZXJcIiwgW3RoaXMuY3JlYXRlQ29sb3JBdHRhY2htZW50KHJlc3gsIHJlc3kpXSk7XHJcblx0XHRcdHRoaXMucmVuZGVyVGFyZ2V0c0hvcml6b250YWwucHVzaChyZW5kZXJUYXJnZXRIb3Jpem9uYWwpO1xyXG5cdFx0XHRjb25zdCByZW5kZXJUYXJnZXRWZXJ0aWNhbCA9IG5ldyBSZW5kZXJUYXJnZXQoXCJyZW5kZXJcIiwgW3RoaXMuY3JlYXRlQ29sb3JBdHRhY2htZW50KHJlc3gsIHJlc3kpXSk7XHJcblx0XHRcdHRoaXMucmVuZGVyVGFyZ2V0c1ZlcnRpY2FsLnB1c2gocmVuZGVyVGFyZ2V0VmVydGljYWwpO1xyXG5cdFx0XHRyZXN4ID0gTWF0aC5yb3VuZChyZXN4IC8gMik7XHJcblx0XHRcdHJlc3kgPSBNYXRoLnJvdW5kKHJlc3kgLyAyKTtcclxuXHRcdH1cclxuXHRcdC8vIGx1bWlub3NpdHkgaGlnaCBwYXNzIG1hdGVyaWFsXHJcblx0XHR0aGlzLmhpZ2hQYXNzVW5pZm9ybXMgPSB7XHJcblx0XHRcdHREaWZmdXNlOiB7IHR5cGU6IFwidGV4dHVyZVwiLCB2YWx1ZTogbnVsbCB9LFxyXG5cdFx0XHR0U2FtcGxlcjoge1xyXG5cdFx0XHRcdHR5cGU6IFwic2FtcGxlclwiLFxyXG5cdFx0XHRcdHZhbHVlOiB0aGlzLmRlZmF1bHRTYW1wbGVyXHJcblx0XHRcdH0sXHJcblx0XHRcdGx1bWlub3NpdHlUaHJlc2hvbDogeyB0eXBlOiBcImZsb2F0XCIsIHZhbHVlOiB0aGlzLnRocmVzaG9sZCB9LFxyXG5cdFx0XHRzbW9vdGhXaWR0aDogeyB0eXBlOiBcImZsb2F0XCIsIHZhbHVlOiAwLjAxIH0sXHJcblx0XHRcdGRlZmF1bHRDb2xvcjogeyB0eXBlOiBcImNvbG9yXCIsIHZhbHVlOiBuZXcgQ29sb3IoMC4wLCAwLCAwKSB9LFxyXG5cdFx0XHRkZWZhdWx0T3BhY2l0eTogeyB0eXBlOiBcImZsb2F0XCIsIHZhbHVlOiAxLjAgfVxyXG5cdFx0fTtcclxuXHRcdGNvbnN0IHNoYWRlciA9IGdldFZlcnRGcmFnKFwibHVtaW5vc2l0eUhpZ2hcIiwgeyBwb3NpdGlvbkxvY2F0aW9uOiAwIH0pO1xyXG5cdFx0dGhpcy5tYXRlcmlhbEhpZ2hQYXNzRmlsdGVyID0gbmV3IFNoYWRlck1hdGVyaWFsKHtcclxuXHRcdFx0dHlwZTogXCJibG9vbVwiLFxyXG5cdFx0XHR1bmlmb3JtczogdGhpcy5oaWdoUGFzc1VuaWZvcm1zLFxyXG5cdFx0XHR2ZXJ0OiBzaGFkZXIudmVydCxcclxuXHRcdFx0ZnJhZzogc2hhZGVyLmZyYWdcclxuXHRcdH0pO1xyXG5cdFx0Ly8gR2F1c3NpYW4gQmx1ciBNYXRlcmlhbHNcclxuXHRcdHRoaXMubWF0ZXJpYWxIaWdoUGFzc0ZpbHRlci5yZW5kZXJTdGF0ZSA9IHRoaXMucmVuZGVyU3RhdGU7XHJcblx0XHR0aGlzLnNlcGFyYWJsZUJsdXJNYXRlcmlhbHMgPSBbXTtcclxuXHRcdHRoaXMuc2VwYXJhYmxlQmx1cllNYXRlcmlhbHMgPSBbXTtcclxuXHRcdGNvbnN0IGtlcm5lbFNpemVBcnJheSA9IFszLCA1LCA3LCA5LCAxMV07XHJcblx0XHRyZXN4ID0gTWF0aC5yb3VuZCh0aGlzLndpZHRoIC8gMik7XHJcblx0XHRyZXN5ID0gTWF0aC5yb3VuZCh0aGlzLmhlaWdodCAvIDIpO1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5uTWlwczsgaSsrKSB7XHJcblx0XHRcdHRoaXMuc2VwYXJhYmxlQmx1ck1hdGVyaWFscy5wdXNoKHRoaXMuZ2V0U2VwZXJhYmxlQmx1ck1hdGVyaWFsKGtlcm5lbFNpemVBcnJheVtpXSwgXCJCbHVyTWF0ZXJpYWxcIiArIGkpKTtcclxuXHRcdFx0dGhpcy5zZXBhcmFibGVCbHVyWU1hdGVyaWFscy5wdXNoKHRoaXMuZ2V0U2VwZXJhYmxlQmx1ck1hdGVyaWFsKGtlcm5lbFNpemVBcnJheVtpXSwgXCJCbHVyTWF0ZXJpYWxZXCIgKyBpKSk7XHJcblx0XHRcdHJlc3ggPSBNYXRoLnJvdW5kKHJlc3ggLyAyKTtcclxuXHJcblx0XHRcdHJlc3kgPSBNYXRoLnJvdW5kKHJlc3kgLyAyKTtcclxuXHRcdH1cclxuXHRcdC8vIENvbXBvc2l0ZSBtYXRlcmlhbFxyXG5cdFx0dGhpcy5jb21wb3NpdGVNYXRlcmlhbCA9IHRoaXMuZ2V0Q29tcG9zaXRlTWF0ZXJpYWwodGhpcy5uTWlwcywgXCJjb21wb3NpdGVNYXRlcmlhbFwiKTtcclxuXHRcdHRoaXMuY29tcG9zaXRlTWF0ZXJpYWwucmVuZGVyU3RhdGUgPSB0aGlzLnJlbmRlclN0YXRlO1xyXG5cdFx0dGhpcy5ibGVuZFVuaWZvcm1zID0ge1xyXG5cdFx0XHR0RGlmZnVzZTogeyB0eXBlOiBcInRleHR1cmVcIiwgdmFsdWU6IHRoaXMucmVuZGVyVGFyZ2V0c0hvcml6b250YWxbMF0uZ2V0Q29sb3JUZXh0dXJlKCkgfSxcclxuXHRcdFx0YmFzZUNvbG9yVGV4dHVyZTogeyB0eXBlOiBcInRleHR1cmVcIiwgdmFsdWU6IG51bGwgfSxcclxuXHRcdFx0dFNhbXBsZXI6IHtcclxuXHRcdFx0XHR0eXBlOiBcInNhbXBsZXJcIixcclxuXHRcdFx0XHR2YWx1ZTogdGhpcy5kZWZhdWx0U2FtcGxlclxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdFx0Y29uc3QgYmxlbmRTaGFkZXIgPSBnZXRWZXJ0RnJhZyhcImJsZW5kXCIsIHsgcG9zaXRpb25Mb2NhdGlvbjogMCB9KTtcclxuXHRcdHRoaXMuYmxlbmRNYXRlcmlhbCA9IG5ldyBTaGFkZXJNYXRlcmlhbCh7XHJcblx0XHRcdHR5cGU6IFwicG9zdEJsZW5kXCIsXHJcblx0XHRcdHVuaWZvcm1zOiB0aGlzLmJsZW5kVW5pZm9ybXMsXHJcblx0XHRcdHZlcnQ6IGJsZW5kU2hhZGVyLnZlcnQsXHJcblx0XHRcdGZyYWc6IGJsZW5kU2hhZGVyLmZyYWdcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5ibGVuZE1hdGVyaWFsLnJlbmRlclN0YXRlID0gdGhpcy5yZW5kZXJTdGF0ZTtcclxuXHRcdHRoaXMuYmxlbmRUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0KFwicmVuZGVyXCIsIFt0aGlzLmNyZWF0ZUNvbG9yQXR0YWNobWVudCh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCldKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVhdGVDb2xvckF0dGFjaG1lbnQod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBBdHRhY2htZW50IHtcclxuXHRcdGNvbnN0IGNvbG9yVGV4dHVyZSA9IG5ldyBUZXh0dXJlKHtcclxuXHRcdFx0c2l6ZTogeyB3aWR0aCwgaGVpZ2h0LCBkZXB0aDogMSB9LFxyXG5cdFx0XHRmb3JtYXQ6IFRleHR1cmVGb3JtYXQuQkdSQThVbm9ybSxcclxuXHRcdFx0dXNhZ2U6IFRleHR1cmVVc2FnZS5SZW5kZXJBdHRhY2htZW50IHwgVGV4dHVyZVVzYWdlLlRleHR1cmVCaW5kaW5nXHJcblx0XHR9KTtcclxuXHRcdGNvbnN0IGNvbG9yQXR0YWNobWVudCA9IG5ldyBBdHRhY2htZW50KHsgcjogMC4wLCBnOiAwLjAsIGI6IDAuMCwgYTogMC4wIH0sIHsgdGV4dHVyZTogY29sb3JUZXh0dXJlIH0pO1xyXG5cdFx0cmV0dXJuIGNvbG9yQXR0YWNobWVudDtcclxuXHR9XHJcblx0cHJpdmF0ZSBnZXRDb21wb3NpdGVNYXRlcmlhbChuTWlwczogbnVtYmVyLCB0eXBlKTogU2hhZGVyTWF0ZXJpYWwge1xyXG5cdFx0cmV0dXJuIG5ldyBTaGFkZXJNYXRlcmlhbCh7XHJcblx0XHRcdHR5cGUsXHJcblx0XHRcdHVuaWZvcm1zOiB7XHJcblx0XHRcdFx0Ymx1clRleHR1cmUxOiB7IHR5cGU6IFwidGV4dHVyZVwiLCB2YWx1ZTogdGhpcy5yZW5kZXJUYXJnZXRzVmVydGljYWxbMF0uZ2V0Q29sb3JUZXh0dXJlKCkgfSxcclxuXHRcdFx0XHRibHVyVGV4dHVyZTI6IHsgdHlwZTogXCJ0ZXh0dXJlXCIsIHZhbHVlOiB0aGlzLnJlbmRlclRhcmdldHNWZXJ0aWNhbFsxXS5nZXRDb2xvclRleHR1cmUoKSB9LFxyXG5cdFx0XHRcdGJsdXJUZXh0dXJlMzogeyB0eXBlOiBcInRleHR1cmVcIiwgdmFsdWU6IHRoaXMucmVuZGVyVGFyZ2V0c1ZlcnRpY2FsWzJdLmdldENvbG9yVGV4dHVyZSgpIH0sXHJcblx0XHRcdFx0Ymx1clRleHR1cmU0OiB7IHR5cGU6IFwidGV4dHVyZVwiLCB2YWx1ZTogdGhpcy5yZW5kZXJUYXJnZXRzVmVydGljYWxbM10uZ2V0Q29sb3JUZXh0dXJlKCkgfSxcclxuXHRcdFx0XHRibHVyVGV4dHVyZTU6IHsgdHlwZTogXCJ0ZXh0dXJlXCIsIHZhbHVlOiB0aGlzLnJlbmRlclRhcmdldHNWZXJ0aWNhbFs0XS5nZXRDb2xvclRleHR1cmUoKSB9LFxyXG5cdFx0XHRcdHRTYW1wbGVyOiB7XHJcblx0XHRcdFx0XHR0eXBlOiBcInNhbXBsZXJcIixcclxuXHRcdFx0XHRcdHZhbHVlOiB0aGlzLmRlZmF1bHRTYW1wbGVyXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRibG9vbVN0cmVuZ3RoOiB7IHR5cGU6IFwiZmxvYXRcIiwgdmFsdWU6IHRoaXMuc3RyZW5ndGggfSxcclxuXHRcdFx0XHRibG9vbVJhZGl1czogeyB0eXBlOiBcImZsb2F0XCIsIHZhbHVlOiB0aGlzLnJhZGl1cyB9LFxyXG5cdFx0XHRcdGJsb29tRmFjdG9yczogeyB0eXBlOiBcImZsb2F0LWFycmF5XCIsIHZhbHVlOiBbMS4wLCAwLjgsIDAuNiwgMC40LCAwLjJdIH0sXHJcblx0XHRcdFx0Ymxvb21UaW50Q29sb3JzOiB7XHJcblx0XHRcdFx0XHR0eXBlOiBcInZlYzMtYXJyYXlcIixcclxuXHRcdFx0XHRcdHZhbHVlOiBbXHJcblx0XHRcdFx0XHRcdG5ldyBWZWN0b3IzKDEsIDEsIDEpLFxyXG5cdFx0XHRcdFx0XHRuZXcgVmVjdG9yMygxLCAxLCAxKSxcclxuXHRcdFx0XHRcdFx0bmV3IFZlY3RvcjMoMSwgMSwgMSksXHJcblx0XHRcdFx0XHRcdG5ldyBWZWN0b3IzKDEsIDEsIDEpLFxyXG5cdFx0XHRcdFx0XHRuZXcgVmVjdG9yMygxLCAxLCAxKVxyXG5cdFx0XHRcdFx0XVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdHZlcnQ6IChkZWZpbmVzKSA9PiB7XHJcblx0XHRcdFx0YFxyXG4gICAgICAgICAgICAgIHN0cnVjdCBWZXJ0ZXhJbnB1dCB7XHJcbiAgICAgICAgICAgICAgICAgICAgQGxvY2F0aW9uKDApIHBvc2l0aW9uOiB2ZWMyPGYzMj4sICAgICAgIFxyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIHN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgICAgICAgICAgICAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxyXG4gICAgICAgICAgICAgICAgICAgIEBsb2NhdGlvbigwKSB1djogdmVjMjxmMzI+LFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgQHZlcnRleFxyXG4gICAgICAgICAgICAgICBmbiBtYWluKGlucHV0OiBWZXJ0ZXhJbnB1dCkgLT4gVmVydGV4T3V0cHV0IHtcclxuICAgICAgICAgICAgICAgIHZhciBvdXRwdXQ6VmVydGV4T3V0cHV0O1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0LnV2ID0gaW5wdXQucG9zaXRpb24gKiAwLjUgKyAwLjU7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQucG9zaXRpb24gPSB2ZWM0PGYzMj4oaW5wdXQucG9zaXRpb24sIDAuMCwgMS4wKTs7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBgO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0ZnJhZzogKGRlZmluZXMpID0+IHtcclxuXHRcdFx0XHRgXHJcbiAgICAgICAgICAgICAgICBzdHJ1Y3QgRnJhZ0lucHV0IHtcclxuICAgICAgICAgICAgICAgICAgICBAbG9jYXRpb24oMCkgdXY6IHZlYzI8ZjMyPixcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBzdHJ1Y3QgQmxvb21Vbmlmb3Jtc3tcclxuICAgICAgICAgICAgICAgICAgICBibG9vbVN0cmVuZ3RoOmYzMixcclxuICAgICAgICAgICAgICAgICAgICBibG9vbVJhZGl1czpmMzIsXHJcbiAgICAgICAgICAgICAgICAgICAgYmxvb21GYWN0b3JzIDogYXJyYXk8ZjMyLDU+LFxyXG4gICAgICAgICAgICAgICAgICAgIGJsb29tVGludENvbG9ycyA6IGFycmF5PHZlYzM8ZjMyPiw1PlxyXG4gICAgICAgICAgICAgICAgfSAgXHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgIHZhcjxzdG9yYWdlLCByZWFkPiBibG9vbVVuaWZvcm1zIDogQmxvb21Vbmlmb3JtcztcclxuXHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmJsdXJUZXh0dXJlMUJpbmRpbmd9KSB2YXIgYmx1clRleHR1cmUxOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmJsdXJUZXh0dXJlMkJpbmRpbmd9KSB2YXIgYmx1clRleHR1cmUyOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmJsdXJUZXh0dXJlM0JpbmRpbmd9KSB2YXIgYmx1clRleHR1cmUzOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmJsdXJUZXh0dXJlNEJpbmRpbmd9KSB2YXIgYmx1clRleHR1cmU0OiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmJsdXJUZXh0dXJlNUJpbmRpbmd9KSB2YXIgYmx1clRleHR1cmU1OiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnRTYW1wbGVyQmluZGluZ319KSB2YXIgdFNhbXBsZXI6IHNhbXBsZXI7XHJcblxyXG5cdFx0XHRcdGZuIGxlcnBCbG9vbUZhY3RvcihmYWN0b3I6ZjMyKS0+ZjMyIHtcclxuXHRcdFx0XHRcdGxldCBtaXJyb3JGYWN0b3I6ZjMyID0gMS4yIC0gZmFjdG9yO1xyXG5cdFx0XHRcdFx0cmV0dXJuIG1peChmYWN0b3IsIG1pcnJvckZhY3RvciwgYmxvb21Vbmlmb3Jtcy5ibG9vbVJhZGl1cyk7XHJcblx0XHRcdFx0fVxyXG4gICAgICAgICAgICAgICAgQGZyYWdtZW50XHJcblx0XHRcdFx0Zm4gbWFpbihpbnB1dDpGcmFnSW5wdXQpLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiAge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGJsb29tVW5pZm9ybXMuYmxvb21TdHJlbmd0aCAqICggbGVycEJsb29tRmFjdG9yKGJsb29tVW5pZm9ybXMuYmxvb21GYWN0b3JzWzBdKSAqIHZlYzQoYmxvb21Vbmlmb3Jtcy5ibG9vbVRpbnRDb2xvcnNbMF0sIDEuMCkgKiB0ZXh0dXJlU2FtcGxlKGJsdXJUZXh0dXJlMSwgdFNhbXBsZXIsIGlucHV0LnV2KSArXHJcblx0XHRcdFx0XHRcdGxlcnBCbG9vbUZhY3RvcihibG9vbVVuaWZvcm1zLmJsb29tRmFjdG9yc1sxXSkgKiB2ZWM0PGYzMj4oYmxvb21Vbmlmb3Jtcy5ibG9vbVRpbnRDb2xvcnNbMV0sIDEuMCkgKiB0ZXh0dXJlU2FtcGxlKGJsdXJUZXh0dXJlMiwgdFNhbXBsZXIsIGlucHV0LnV2KSArXHJcblx0XHRcdFx0XHRcdGxlcnBCbG9vbUZhY3RvcihibG9vbVVuaWZvcm1zLmJsb29tRmFjdG9yc1syXSkgKiB2ZWM0PGYzMj4oYmxvb21Vbmlmb3Jtcy5ibG9vbVRpbnRDb2xvcnNbMl0sIDEuMCkgKiB0ZXh0dXJlU2FtcGxlKGJsdXJUZXh0dXJlMywgdFNhbXBsZXIsIGlucHV0LnV2KSArXHJcblx0XHRcdFx0XHRcdGxlcnBCbG9vbUZhY3RvcihibG9vbVVuaWZvcm1zLmJsb29tRmFjdG9yc1szXSkgKiB2ZWM0PGYzMj4oYmxvb21Vbmlmb3Jtcy5ibG9vbVRpbnRDb2xvcnNbM10sIDEuMCkgKiB0ZXh0dXJlU2FtcGxlKGJsdXJUZXh0dXJlNCwgdFNhbXBsZXIsIGlucHV0LnV2KSArXHJcblx0XHRcdFx0XHRcdGxlcnBCbG9vbUZhY3RvcihibG9vbVVuaWZvcm1zLmJsb29tRmFjdG9yc1s0XSkgKiB2ZWM0PGYzMj4oYmxvb21Vbmlmb3Jtcy5ibG9vbVRpbnRDb2xvcnNbNF0sIDEuMCkgKiB0ZXh0dXJlU2FtcGxlKGJsdXJUZXh0dXJlNSwgdFNhbXBsZXIsIGlucHV0LnV2KSApO1xyXG5cdFx0XHRcdH1gO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblx0cHJpdmF0ZSBnZXRTZXBlcmFibGVCbHVyTWF0ZXJpYWwoa2VybmVsUmFkaXVzLCB0eXBlKSB7XHJcblx0XHRjb25zdCBzaGFkZXIgPSBnZXRWZXJ0RnJhZyhcImJsdXJcIiwge1xyXG5cdFx0XHRLRVJORUxfUkFESVVTOiBrZXJuZWxSYWRpdXMsXHJcblx0XHRcdFNJR01BOiBrZXJuZWxSYWRpdXMsXHJcblx0XHRcdHBvc2l0aW9uTG9jYXRpb246IDBcclxuXHRcdH0pO1xyXG5cdFx0Y29uc3QgbWF0ID0gbmV3IFNoYWRlck1hdGVyaWFsKHtcclxuXHRcdFx0dHlwZSxcclxuXHRcdFx0dW5pZm9ybXM6IHtcclxuXHRcdFx0XHR0RGlmZnVzZTogeyB0eXBlOiBcInRleHR1cmVcIiwgdmFsdWU6IG51bGwgfSxcclxuXHRcdFx0XHRkaXJlY3Rpb246IHsgdHlwZTogXCJ2ZWMyXCIsIHZhbHVlOiBuZXcgVmVjdG9yMigwLjAsIDAuMCkgfSxcclxuXHRcdFx0XHR0U2FtcGxlcjoge1xyXG5cdFx0XHRcdFx0dHlwZTogXCJzYW1wbGVyXCIsXHJcblx0XHRcdFx0XHR2YWx1ZTogdGhpcy5kZWZhdWx0U2FtcGxlclxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdHZlcnQ6IHNoYWRlci52ZXJ0LFxyXG5cclxuXHRcdFx0ZnJhZzogc2hhZGVyLmZyYWdcclxuXHRcdH0pO1xyXG5cdFx0bWF0LnJlbmRlclN0YXRlID0gdGhpcy5yZW5kZXJTdGF0ZTtcclxuXHRcdHJldHVybiBtYXQ7XHJcblx0fVxyXG59XHJcblxyXG50eXBlIEJsb29tUG9zdEVmZmVjdFByb3BzID0ge1xyXG5cdHdpZHRoOiBudW1iZXI7XHJcblx0aGVpZ2h0OiBudW1iZXI7XHJcblx0c3RyZW5ndGg6IG51bWJlcjtcclxuXHRyYWRpdXM6IG51bWJlcjtcclxuXHR0aHJlc2hvbGQ6IG51bWJlcjtcclxufTtcclxuIiwiaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4uL21hdGgvTWF0cml4NFwiO1xyXG5pbXBvcnQgQ2FtZXJhIGZyb20gXCIuL0NhbWVyYVwiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcnRob2dyYXBoaWNDYW1lcmEgZXh0ZW5kcyBDYW1lcmEge1xyXG5cdHJpZ2h0OiBudW1iZXI7XHJcblx0aXNPcnRob2dyYXBoaWNDYW1lcmE6IGJvb2xlYW47XHJcblx0Ym90dG9tOiBudW1iZXI7XHJcblx0bGVmdDogbnVtYmVyO1xyXG5cdG5lYXI6IG51bWJlcjtcclxuXHRmYXI6IG51bWJlcjtcclxuXHR0b3A6IG51bWJlcjtcclxuXHRjb25zdHJ1Y3RvcihsZWZ0ID0gLTEsIHJpZ2h0ID0gMSwgdG9wID0gMSwgYm90dG9tID0gLTEsIG5lYXIgPSAwLjEsIGZhciA9IDIwMDApIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHR0aGlzLm5lYXIgPSBuZWFyO1xyXG5cdFx0dGhpcy5mYXIgPSBmYXI7XHJcblx0XHR0aGlzLmxlZnQgPSBsZWZ0O1xyXG5cdFx0dGhpcy50b3AgPSB0b3A7XHJcblx0XHR0aGlzLmJvdHRvbSA9IGJvdHRvbTtcclxuXHRcdHRoaXMucmlnaHQgPSByaWdodDtcclxuXHRcdHRoaXMuaXNPcnRob2dyYXBoaWNDYW1lcmEgPSB0cnVlO1xyXG5cdH1cclxuXHRwcml2YXRlIHVwZGF0ZUNhbWVyYVBhcm1zKCkge1xyXG5cdFx0Y29uc3QgZHggPSAodGhpcy5yaWdodCAtIHRoaXMubGVmdCkgLyAyO1xyXG5cdFx0Y29uc3QgZHkgPSAodGhpcy50b3AgLSB0aGlzLmJvdHRvbSkgLyAyO1xyXG5cdFx0Y29uc3QgY3ggPSAodGhpcy5yaWdodCArIHRoaXMubGVmdCkgLyAyO1xyXG5cdFx0Y29uc3QgY3kgPSAodGhpcy50b3AgKyB0aGlzLmJvdHRvbSkgLyAyO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0bGVmdDogY3ggLSBkeCxcclxuXHRcdFx0cmlnaHQ6IGN4ICsgZHgsXHJcblx0XHRcdHRvcDogY3kgKyBkeSxcclxuXHRcdFx0Ym90dG9tOiBjeSAtIGR5XHJcblx0XHR9O1xyXG5cdH1cclxuXHRwdWJsaWMgdXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpIHtcclxuXHRcdGlmICh0aGlzLnByb2plY3RNYXRyaXhEaXJ0eSkge1xyXG5cdFx0XHRjb25zdCB7IGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSB9ID0gdGhpcy51cGRhdGVDYW1lcmFQYXJtcygpO1xyXG5cdFx0XHR0aGlzLl9wcm9qZWN0aW9uTWF0cml4ID0gTWF0cml4NC5tYWtlT3J0aG9ncmFwaGljKGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgdGhpcy5uZWFyLCB0aGlzLmZhcik7XHJcblx0XHRcdHRoaXMucHJvamVjdE1hdHJpeERpcnR5ID0gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tIFwiLi4vLi4vY2FtZXJhL1BlcnNwZWN0aXZlQ2FtZXJhXCI7XG5pbXBvcnQgVmVjdG9yMiBmcm9tIFwiLi4vLi4vbWF0aC9WZWN0b3IyXCI7XG5pbXBvcnQgeyBTcG90TGlnaHQgfSBmcm9tIFwiLi4vU3BvdExpZ2h0XCI7XG5pbXBvcnQgeyBCYXNlU2hhZG93IH0gZnJvbSBcIi4vQmFzZVNoYWRvd1wiO1xuXG5leHBvcnQgY2xhc3MgU3BvdExpZ2h0U2hhZG93IGV4dGVuZHMgQmFzZVNoYWRvdyB7XG5cdHB1YmxpYyB0eXBlOiBzdHJpbmc7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGNvbnN0IGNhbWVyYSA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSg2MCwgMSwgMC4xLCA1MDApO1xuXHRcdHN1cGVyKG5ldyBWZWN0b3IyKDEwMjQsIDEwMjQpLCBjYW1lcmEpO1xuXHRcdHRoaXMudHlwZSA9IFwic3BvdExpZ2h0U2hhZG93XCI7XG5cdH1cblxuXHRwdWJsaWMgdXBkYXRlKGxpZ2h0OiBTcG90TGlnaHQpIHtcblx0XHR0aGlzLnVwZGF0ZU1hdHJpY2VzKGxpZ2h0KTtcblx0fVxuXG5cdHVwZGF0ZU1hdHJpY2VzKGxpZ2h0OiBTcG90TGlnaHQpIHtcblx0XHR0aGlzLmNhbWVyYS5wb3NpdGlvbi5jb3B5KGxpZ2h0LnBvc2l0aW9uKTtcblx0XHRjb25zdCB7IHgsIHksIHogfSA9IGxpZ2h0LnRhcmdldDtcblx0XHR0aGlzLmNhbWVyYS5sb29rQXQoeCwgeSwgeik7XG5cdFx0dGhpcy5jYW1lcmEudXBkYXRlTWF0cml4KCk7XG5cdFx0dGhpcy52cE1hdHJpeERpcnR5ID0gdHJ1ZTtcblx0fVxufVxuIiwiaW1wb3J0IHsgTGlnaHRUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xyXG5pbXBvcnQgeyBMaWdodCB9IGZyb20gXCIuL0xpZ2h0XCI7XHJcbmltcG9ydCB7IFNwb3RMaWdodFNoYWRvdyB9IGZyb20gXCIuL3NoYWRvd3MvU3BvdExpZ2h0U2hhZG93XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3BvdExpZ2h0IGV4dGVuZHMgTGlnaHQge1xyXG5cdHByaXZhdGUgX2Rpc3RhbmNlOiBudW1iZXI7XHJcblx0cHJpdmF0ZSBfYW5nbGU6IG51bWJlcjtcclxuXHRwcml2YXRlIF9wZW51bWJyYTogbnVtYmVyO1xyXG5cdHByaXZhdGUgX2RlY2F5OiBudW1iZXI7XHJcblx0ZGVjYXlEaXJ0eTogYm9vbGVhbjtcclxuXHRkaXN0YW5jZURpcnR5OiBib29sZWFuO1xyXG5cdHByaXZhdGUgX2NvbmVDb3M6IG51bWJlcjtcclxuXHRwcml2YXRlIF9wZW51bWJyYUNvczogbnVtYmVyO1xyXG5cdGNvbmVDb3NEaXJ0eTogYm9vbGVhbjtcclxuXHRwZW51bWJyYURpcnR5OiBib29sZWFuO1xyXG5cdGFuZ2xlRGlydHk6IGJvb2xlYW47XHJcblx0cGVudW1icmFDb3NEaXJ0eTogYm9vbGVhbjtcclxuXHRjb25zdHJ1Y3Rvcihjb2xvciwgaW50ZW5zaXR5LCBkaXN0YW5jZSA9IDAsIGFuZ2xlID0gNjAsIHBlbnVtYnJhID0gNjAsIGRlY2F5ID0gNCwgb3BlblNoYWRvdyA9IHRydWUpIHtcclxuXHRcdHN1cGVyKGNvbG9yLCBpbnRlbnNpdHkpO1xyXG5cdFx0dGhpcy5fZGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuXHRcdHRoaXMuX2FuZ2xlID0gKGFuZ2xlIC8gMTgwKSAqIE1hdGguUEk7XHJcblx0XHR0aGlzLl9wZW51bWJyYSA9IChwZW51bWJyYSAvIDE4MCkgKiBNYXRoLlBJO1xyXG5cdFx0dGhpcy5fZGVjYXkgPSBkZWNheTtcclxuXHRcdHRoaXMubGlnaHRUeXBlID0gTGlnaHRUeXBlLlNwb3RMaWdodDtcclxuXHRcdHRoaXMuYW5nbGVEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLnBlbnVtYnJhRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5kaXN0YW5jZURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuZGVjYXlEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmNvbmVDb3NEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLnBlbnVtYnJhQ29zRGlydHkgPSB0cnVlO1xyXG5cdFx0aWYgKG9wZW5TaGFkb3cpIHRoaXMuc2hhZG93ID0gbmV3IFNwb3RMaWdodFNoYWRvdygpO1xyXG5cdFx0dGhpcy51cGRhdGVDb25lQ29zT3JQZW51bWJyYUNvcygpO1xyXG5cdH1cclxuXHJcblx0Z2V0IGRpcnRlY3REaXJ0eSgpIHtcclxuXHRcdHJldHVybiB0aGlzLnBvc2l0aW9uRGlydHkgfHwgdGhpcy50YXJnZXREaXJ0eTtcclxuXHR9XHJcblxyXG5cdHNldCBkaXJ0ZWN0RGlydHkodmFsdWUpIHtcclxuXHRcdHRoaXMucG9zaXRpb25EaXJ0eSA9IHZhbHVlO1xyXG5cdFx0dGhpcy50YXJnZXREaXJ0eSA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Z2V0IGRpcmVjdGlvbmFsKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdFZlY3RvcjMuc3VidHJhY3QodGhpcy5wb3NpdGlvbiwgdGhpcy50YXJnZXQsIHJlc3VsdCk7XHJcblx0XHRyZXR1cm4gVmVjdG9yMy5ub3JtYWxpemUocmVzdWx0LCBuZXcgVmVjdG9yMygpKTtcclxuXHR9XHJcblx0Z2V0IGFuZ2xlKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2FuZ2xlO1xyXG5cdH1cclxuXHRzZXQgYW5nbGUodmFsdWUpIHtcclxuXHRcdHRoaXMuYW5nbGVEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9hbmdsZSA9ICh2YWx1ZSAvIDE4MCkgKiBNYXRoLlBJO1xyXG5cdFx0dGhpcy51cGRhdGVDb25lQ29zT3JQZW51bWJyYUNvcygpO1xyXG5cdH1cclxuXHRnZXQgcGVudW1icmEoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fcGVudW1icmE7XHJcblx0fVxyXG5cdHNldCBwZW51bWJyYSh2YWx1ZSkge1xyXG5cdFx0dGhpcy5wZW51bWJyYURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX3BlbnVtYnJhID0gKHZhbHVlIC8gMTgwKSAqIE1hdGguUEk7XHJcblx0XHR0aGlzLnVwZGF0ZUNvbmVDb3NPclBlbnVtYnJhQ29zKCk7XHJcblx0fVxyXG5cdHNldCBkaXN0YW5jZSh2YWx1ZSkge1xyXG5cdFx0dGhpcy5kaXN0YW5jZURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX2Rpc3RhbmNlID0gdmFsdWU7XHJcblx0fVxyXG5cdGdldCBkaXN0YW5jZSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9kaXN0YW5jZTtcclxuXHR9XHJcblx0c2V0IGRlY2F5KHZhbHVlKSB7XHJcblx0XHR0aGlzLmRlY2F5RGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fZGVjYXkgPSB2YWx1ZTtcclxuXHR9XHJcblx0Z2V0IGRlY2F5KCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2RlY2F5O1xyXG5cdH1cclxuXHRzZXQgY29uZUNvcyh2YWx1ZSkge1xyXG5cdFx0dGhpcy5jb25lQ29zRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fY29uZUNvcyA9IHZhbHVlO1xyXG5cdH1cclxuXHRnZXQgY29uZUNvcygpIHtcclxuXHRcdHJldHVybiB0aGlzLl9jb25lQ29zO1xyXG5cdH1cclxuXHRzZXQgcGVudW1icmFDb3ModmFsdWUpIHtcclxuXHRcdHRoaXMucGVudW1icmFDb3NEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9wZW51bWJyYUNvcyA9IHZhbHVlO1xyXG5cdH1cclxuXHRnZXQgcGVudW1icmFDb3MoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fcGVudW1icmFDb3M7XHJcblx0fVxyXG5cdHByaXZhdGUgdXBkYXRlQ29uZUNvc09yUGVudW1icmFDb3MoKSB7XHJcblx0XHR0aGlzLl9jb25lQ29zID0gTWF0aC5jb3ModGhpcy5hbmdsZSk7XHJcblx0XHR0aGlzLl9wZW51bWJyYUNvcyA9IE1hdGguY29zKHRoaXMuYW5nbGUgKyB0aGlzLnBlbnVtYnJhKTtcclxuXHR9XHJcbn1cclxuLy8gdW5pZm9ybVxyXG4vLyBjb2xvcjoge30sXHJcbi8vIHBvc2l0aW9uOiB7fSxcclxuLy8gZGlyZWN0aW9uOiB7fSxcclxuLy8gZGlzdGFuY2U6IHt9LFxyXG4vLyBjb25lQ29zOiB7fSxcclxuLy8gcGVudW1icmFDb3M6IHt9LFxyXG4vLyBkZWNheToge31cclxuIiwiaW1wb3J0IE9ydGhvZ3JhcGhpY0NhbWVyYSBmcm9tIFwiLi4vLi4vY2FtZXJhL09ydGhvZ3JhcGhpY0NhbWVyYVwiO1xuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4uLy4uL21hdGgvVmVjdG9yMlwiO1xuaW1wb3J0IHsgRGlyZWN0aW9uYWxMaWdodCB9IGZyb20gXCIuLi9EaXJlY3Rpb25hbExpZ2h0XCI7XG5pbXBvcnQgeyBCYXNlU2hhZG93IH0gZnJvbSBcIi4vQmFzZVNoYWRvd1wiO1xuXG5leHBvcnQgY2xhc3MgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBleHRlbmRzIEJhc2VTaGFkb3cge1xuXHRwdWJsaWMgdHlwZTogc3RyaW5nO1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRjb25zdCBjYW1lcmEgPSBuZXcgT3J0aG9ncmFwaGljQ2FtZXJhKC01MCwgNTAsIDUwLCAtNTAsIDAsIDEwMCk7XG5cdFx0c3VwZXIobmV3IFZlY3RvcjIoMTAyNCwgMTAyNCksIGNhbWVyYSk7XG5cdFx0dGhpcy50eXBlID0gXCJkaXJlY3Rpb25hbExpZ2h0U2hhZG93XCI7XG5cdH1cblxuXHRwdWJsaWMgdXBkYXRlKGxpZ2h0OiBEaXJlY3Rpb25hbExpZ2h0KSB7XG5cdFx0dGhpcy51cGRhdGVNYXRyaWNlcyhsaWdodCk7XG5cdH1cblxuXHR1cGRhdGVNYXRyaWNlcyhsaWdodDogRGlyZWN0aW9uYWxMaWdodCkge1xuXHRcdHRoaXMuY2FtZXJhLnBvc2l0aW9uLmNvcHkobGlnaHQucG9zaXRpb24pO1xuXHRcdGNvbnN0IHsgeCwgeSwgeiB9ID0gbGlnaHQudGFyZ2V0O1xuXHRcdHRoaXMuY2FtZXJhLmxvb2tBdCh4LCB5LCB6KTtcblx0XHR0aGlzLmNhbWVyYS51cGRhdGVNYXRyaXgoKTtcblx0XHR0aGlzLnZwTWF0cml4RGlydHkgPSB0cnVlO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBMaWdodFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xuaW1wb3J0IHsgTGlnaHQgfSBmcm9tIFwiLi9MaWdodFwiO1xuaW1wb3J0IHsgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB9IGZyb20gXCIuL3NoYWRvd3MvRGlyZWN0aW9uYWxMaWdodFNoYWRvd1wiO1xuXG5leHBvcnQgY2xhc3MgRGlyZWN0aW9uYWxMaWdodCBleHRlbmRzIExpZ2h0IHtcblx0Y29uc3RydWN0b3IoY29sb3I6IFZlY3RvcjMsIGludGVuc2l0eTogbnVtYmVyLCBvcGVuU2hhZG93ID0gdHJ1ZSkge1xuXHRcdHN1cGVyKGNvbG9yLCBpbnRlbnNpdHkpO1xuXHRcdHRoaXMubGlnaHRUeXBlID0gTGlnaHRUeXBlLkRpcmVjdGlvbmFsTGlnaHQ7XG5cdFx0aWYgKG9wZW5TaGFkb3cpIHRoaXMuc2hhZG93ID0gbmV3IERpcmVjdGlvbmFsTGlnaHRTaGFkb3coKTtcblx0fVxuXG5cdGdldCBkaXJ0ZWN0RGlydHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMucG9zaXRpb25EaXJ0eSB8fCB0aGlzLnRhcmdldERpcnR5O1xuXHR9XG5cblx0c2V0IGRpcnRlY3REaXJ0eSh2YWx1ZSkge1xuXHRcdHRoaXMucG9zaXRpb25EaXJ0eSA9IHZhbHVlO1xuXHRcdHRoaXMudGFyZ2V0RGlydHkgPSB2YWx1ZTtcblx0fVxuXG5cdGdldCBkaXJlY3Rpb25hbCgpIHtcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFZlY3RvcjMuc3VidHJhY3QodGhpcy50YXJnZXQsIHRoaXMucG9zaXRpb24sIHJlc3VsdCk7XG5cdFx0cmV0dXJuIHJlc3VsdC5ub3JtYWxpemUoKTtcblx0fVxufVxuLy8gdW5pZm9ybVxuLy8gZGlyZWN0aW9uOiB7fSxcbi8vIGNvbG9yOiB7fVxuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vY2FtZXJhL0NhbWVyYVwiO1xyXG5pbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xyXG5pbXBvcnQgUmVuZGVyT2JqZWN0IGZyb20gXCIuLi9jb3JlL1JlbmRlck9iamVjdFwiO1xyXG5pbXBvcnQgeyBSZW5kZXJPYmplY3RUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IGNyZWF0ZUd1aWQgZnJvbSBcIi4uL3V0aWxzL2NyZWF0ZUd1aWRcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuL01lc2hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vZGUgZXh0ZW5kcyBSZW5kZXJPYmplY3Qge1xyXG5cdHVpZDogc3RyaW5nO1xyXG5cdGNoaWxkcmVuOiBNYXA8c3RyaW5nLCBOb2RlIHwgTWVzaD47XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHRcdHRoaXMudHlwZSA9IFJlbmRlck9iamVjdFR5cGUuTm9kZTtcclxuXHRcdHRoaXMuY2hpbGRyZW4gPSBuZXcgTWFwKCk7XHJcblx0XHR0aGlzLnBhcmVudCA9IG51bGw7XHJcblx0XHR0aGlzLnVpZCA9IGNyZWF0ZUd1aWQoKTtcclxuXHR9XHJcblx0YWRkKG5vZGU6IE5vZGUgfCBNZXNoKSB7XHJcblx0XHRub2RlLnBhcmVudCA9IHRoaXM7XHJcblx0XHR0aGlzLmNoaWxkcmVuLnNldChub2RlLnVpZCwgbm9kZSk7XHJcblx0fVxyXG5cdHJlbW92ZShub2RlOiBOb2RlIHwgTWVzaCkge1xyXG5cdFx0dGhpcy5jaGlsZHJlbi5kZWxldGUobm9kZS51aWQpO1xyXG5cdH1cclxuXHR1cGRhdGUoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSwgY2FtZXJhPzogQ2FtZXJhKSB7XHJcblx0XHR0aGlzLnVwZGF0ZU1hdHJpeCh0aGlzPy5wYXJlbnQ/Lm1vZGVsTWF0cml4Py5jbG9uZSgpKTtcclxuXHRcdHRoaXM/LmNoaWxkcmVuPy5mb3JFYWNoPy4oKG5vZGUpID0+IHtcclxuXHRcdFx0bm9kZS51cGRhdGUoZnJhbWVTdGF0ZSwgY2FtZXJhKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRkZXN0cm95KCkge1xyXG5cdFx0dGhpcy5jaGlsZHJlbi5mb3JFYWNoKChub2RlKSA9PiB7XHJcblx0XHRcdG5vZGUuZGVzdHJveSgpO1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzPy5jaGlsZHJlbj8uY2xlYXIoKTtcclxuXHR9XHJcblx0dHJhdmVyc2UodHJhdmVyc2VGdW5jdGlvbjogRnVuY3Rpb24sIHBhcmFtOiB7IFtwcm9wOiBzdHJpbmddOiBhbnkgfSk6IHZvaWQge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuY2hpbGRyZW4uc2l6ZTsgaSA8IGxlbjsgaSsrKSB7XHJcblx0XHRcdHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuXHRcdFx0XHRjaGlsZC50cmF2ZXJzZSh0cmF2ZXJzZUZ1bmN0aW9uLCBwYXJhbSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XG5pbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xuaW1wb3J0IHsgQnVmZmVyQmluZGluZ1R5cGUsIEJ1ZmZlclVzYWdlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcbmltcG9ydCB7IFJlbmRlck9iamVjdFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuLi9nZW9tZXRyeS9HZW9tZXRyeVwiO1xuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi4vbWF0ZXJpYWwvTWF0ZXJpYWxcIjtcbmltcG9ydCBNYXRyaXg0IGZyb20gXCIuLi9tYXRoL01hdHJpeDRcIjtcbmltcG9ydCBVbmlmb3JtQnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybUJ1ZmZlclwiO1xuaW1wb3J0IHsgVW5pZm9ybUVudW0gfSBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1zXCI7XG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4vTWVzaFwiO1xuaW1wb3J0IE5vZGUgZnJvbSBcIi4vTm9kZVwiO1xuXG5leHBvcnQgY2xhc3MgU0tpbk1lc2ggZXh0ZW5kcyBNZXNoIHtcblx0aW52ZXJzZUJpbmRNYXRyaWNlczogQXJyYXk8TWF0cml4ND47XG5cdHVuaWZvcm1NYXRyaXhzOiBBcnJheTxNYXRyaXg0Pjtcblx0am9pbnRzOiBBcnJheTxOb2RlPjtcblx0cHJpdmF0ZSBoYXNBZGRKb2ludHM6IGJvb2xlYW47XG5cdGNvbnN0cnVjdG9yKGdlb21ldHJ5PzogR2VvbWV0cnksIG1hdGVyaWFsPzogTWF0ZXJpYWwpIHtcblx0XHRzdXBlcihnZW9tZXRyeSwgbWF0ZXJpYWwpO1xuXHRcdHRoaXMudHlwZSA9IFJlbmRlck9iamVjdFR5cGUuU2tpbk1lc2g7XG5cdFx0dGhpcy51bmlmb3JtTWF0cml4cyA9IFtdO1xuXHRcdHRoaXMuaGFzQWRkSm9pbnRzID0gZmFsc2U7XG5cdH1cblx0c2V0U2tpbkRhdGEoZGF0YTogU2tpbkRhdGFUeXBlKSB7XG5cdFx0dGhpcy5pbnZlcnNlQmluZE1hdHJpY2VzID0gZGF0YS5pbnZlcnNlQmluZE1hdHJpY2VzO1xuXHRcdHRoaXMuam9pbnRzID0gZGF0YS5qb2ludHM7XG5cdH1cblx0dXBkYXRlKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUsIGNhbWVyYT86IENhbWVyYSkge1xuXHRcdHRoaXMudW5pZm9ybU1hdHJpeHMgPSB0aGlzLmpvaW50cy5tYXAoKGpvaW50KSA9PiAoam9pbnQgYXMgTm9kZSkubW9kZWxNYXRyaXgpO1xuXHRcdHN1cGVyLnVwZGF0ZShmcmFtZVN0YXRlLCBjYW1lcmEpO1xuXHRcdGlmICghdGhpcy5oYXNBZGRKb2ludHMpIHRoaXMuYWRkVW5pZm9ybXNUb01hdGVyaWFsKCk7XG5cdH1cblx0cHJpdmF0ZSBhZGRVbmlmb3Jtc1RvTWF0ZXJpYWwoKSB7XG5cdFx0aWYgKCF0aGlzLm1hdGVyaWFsLnNoYWRlckRhdGEpIHJldHVybjtcblx0XHR0aGlzLmhhc0FkZEpvaW50cyA9IHRydWU7XG5cdFx0aWYgKHRoaXMuam9pbnRzKSB7XG5cdFx0XHRjb25zdCBza2luSm9pbnRzQnVmZmVyID0gbmV3IFVuaWZvcm1CdWZmZXIoe1xuXHRcdFx0XHRsYWJlbDogXCJza2luSm9pbnRzQnVmZmVyXCIsXG5cdFx0XHRcdHR5cGU6IEJ1ZmZlckJpbmRpbmdUeXBlLlJlYWRPbmx5U3RvcmFnZSxcblx0XHRcdFx0dXNhZ2U6IEJ1ZmZlclVzYWdlLlN0b3JhZ2UgfCBCdWZmZXJVc2FnZS5Db3B5RHN0LFxuXHRcdFx0XHRzaXplOiAzMDAwXG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGludnNCdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7XG5cdFx0XHRcdGxhYmVsOiBcImludnNCdWZmZXJcIixcblx0XHRcdFx0dHlwZTogQnVmZmVyQmluZGluZ1R5cGUuUmVhZE9ubHlTdG9yYWdlLFxuXHRcdFx0XHR1c2FnZTogQnVmZmVyVXNhZ2UuU3RvcmFnZSB8IEJ1ZmZlclVzYWdlLkNvcHlEc3QsXG5cdFx0XHRcdHNpemU6IDMwMDBcblx0XHRcdH0pO1xuXHRcdFx0c2tpbkpvaW50c0J1ZmZlci5zZXRVbmlmb3JtKFxuXHRcdFx0XHRcImpvaW50c1wiLFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMudW5pZm9ybU1hdHJpeHM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdFVuaWZvcm1FbnVtLk1hdDRBcnJheSxcblx0XHRcdFx0dGhpcy51bmlmb3JtTWF0cml4cy5sZW5ndGhcblx0XHRcdCk7XG5cdFx0XHRpbnZzQnVmZmVyLnNldFVuaWZvcm0oXG5cdFx0XHRcdFwiam9pbnRzSW52XCIsXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5pbnZlcnNlQmluZE1hdHJpY2VzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRVbmlmb3JtRW51bS5NYXQ0QXJyYXksXG5cdFx0XHRcdHRoaXMuaW52ZXJzZUJpbmRNYXRyaWNlcy5sZW5ndGhcblx0XHRcdCk7XG5cdFx0XHR0aGlzLm1hdGVyaWFsLnNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcihcInNraW5Kb2ludHNCdWZmZXJcIiwgc2tpbkpvaW50c0J1ZmZlcik7XG5cdFx0XHR0aGlzLm1hdGVyaWFsLnNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcihcImludnNCdWZmZXJcIiwgaW52c0J1ZmZlcik7XG5cdFx0fVxuXHR9XG59XG5leHBvcnQgdHlwZSBTa2luRGF0YVR5cGUgPSB7XG5cdGludmVyc2VCaW5kTWF0cmljZXM/OiBBcnJheTxNYXRyaXg0Pjtcblx0am9pbnRzPzogQXJyYXk8Tm9kZT47XG59O1xuIiwiaW1wb3J0IHsgUXVhdGVybmlvbiB9IGZyb20gXCIuLi9tYXRoL1F1YXRlcm5pb25cIjtcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4uL21hdGgvVmVjdG9yMlwiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2xhbXAobnVtOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcikge1xyXG5cdHJldHVybiBNYXRoLm1pbihNYXRoLm1heChudW0sIG1pbiksIG1heCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0b0Zsb2F0KG51bTogbnVtYmVyIHwgdW5kZWZpbmVkLCBkZWZhdWx0VmFsdWUgPSAxKSB7XHJcblx0Y29uc3QgbiA9IG51bSAhPT0gdW5kZWZpbmVkID8gbnVtIDogZGVmYXVsdFZhbHVlO1xyXG5cdGlmIChOdW1iZXIuaXNJbnRlZ2VyKG4pKSB7XHJcblx0XHRyZXR1cm4gYCR7bn0uMGA7XHJcblx0fVxyXG5cdHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBUeXBlZEFycmF5ID0gSW50OEFycmF5IHwgVWludDhBcnJheSB8IEludDE2QXJyYXkgfCBVaW50MTZBcnJheSB8IFVpbnQzMkFycmF5IHwgRmxvYXQzMkFycmF5O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5ld1R5cGVkQXJyYXkodHlwZTogbnVtYmVyLCBidWZmZXI6IEFycmF5QnVmZmVyLCBieXRlT2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKSB7XHJcblx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRjYXNlIDUxMjA6XHJcblx0XHRcdHJldHVybiBuZXcgSW50OEFycmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcclxuXHRcdGNhc2UgNTEyMTpcclxuXHRcdFx0cmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcclxuXHRcdGNhc2UgNTEyMjpcclxuXHRcdFx0cmV0dXJuIG5ldyBJbnQxNkFycmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcclxuXHRcdGNhc2UgNTEyMzpcclxuXHRcdFx0cmV0dXJuIG5ldyBVaW50MTZBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XHJcblx0XHRjYXNlIDUxMjQ6XHJcblx0XHRcdHJldHVybiBuZXcgSW50MzJBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XHJcblx0XHRjYXNlIDUxMjU6XHJcblx0XHRcdHJldHVybiBuZXcgVWludDMyQXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xyXG5cdFx0Y2FzZSA1MTI2OlxyXG5cdFx0XHRyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XHJcblx0XHRkZWZhdWx0OlxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNvbXBvbmVudCB0eXBlXCIpO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHRvSW5kaWNlcyhhcnJheTogVHlwZWRBcnJheSk6IFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXkge1xyXG5cdGlmIChhcnJheSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5IHx8IGFycmF5IGluc3RhbmNlb2YgVWludDMyQXJyYXkpIHtcclxuXHRcdHJldHVybiBhcnJheTtcclxuXHR9XHJcblx0bGV0IHRvQXJyYXk7XHJcblx0aWYgKGFycmF5IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSB7XHJcblx0XHR0b0FycmF5ID0gbmV3IFVpbnQzMkFycmF5KGFycmF5Lmxlbmd0aCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdHRvQXJyYXkgPSBuZXcgVWludDE2QXJyYXkoYXJyYXkubGVuZ3RoKTtcclxuXHR9XHJcblx0YXJyYXkuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcclxuXHRcdHRvQXJyYXlbaW5kZXhdID0gZWxlbWVudDtcclxuXHR9KTtcclxuXHRyZXR1cm4gdG9BcnJheTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGpvaW5BcnJheShhcnJheXM6IEFycmF5PEZsb2F0MzJBcnJheT4pIHtcclxuXHRsZXQgbGVuZ3RoID0gMDtcclxuXHRhcnJheXMuZm9yRWFjaCgoYXJyYXkpID0+IHtcclxuXHRcdGxlbmd0aCArPSBhcnJheS5sZW5ndGg7XHJcblx0fSk7XHJcblx0Y29uc3Qgam9pbmVkID0gbmV3IEZsb2F0MzJBcnJheShsZW5ndGgpO1xyXG5cdGxlbmd0aCA9IDA7XHJcblx0YXJyYXlzLmZvckVhY2goKGFycmF5KSA9PiB7XHJcblx0XHRqb2luZWQuc2V0KGFycmF5LCBsZW5ndGgpO1xyXG5cdFx0bGVuZ3RoICs9IGFycmF5Lmxlbmd0aDtcclxuXHR9KTtcclxuXHRyZXR1cm4gam9pbmVkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR1BVQnVmZmVyKGFycmF5OiBUeXBlZEFycmF5LCB1c2FnZTogbnVtYmVyLCBkZXZpY2U6IEdQVURldmljZSkge1xyXG5cdGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xyXG5cdFx0c2l6ZTogKGFycmF5LmJ5dGVMZW5ndGggKyAzKSAmIH4zLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWJpdHdpc2VcclxuXHRcdHVzYWdlLFxyXG5cdFx0bWFwcGVkQXRDcmVhdGlvbjogdHJ1ZVxyXG5cdH0pO1xyXG5cdGxldCB3cml0ZUFyYXJ5O1xyXG5cdGlmIChhcnJheSBpbnN0YW5jZW9mIEludDhBcnJheSkge1xyXG5cdFx0d3JpdGVBcmFyeSA9IG5ldyBJbnQ4QXJyYXkoYnVmZmVyLmdldE1hcHBlZFJhbmdlKCkpO1xyXG5cdH0gZWxzZSBpZiAoYXJyYXkgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XHJcblx0XHR3cml0ZUFyYXJ5ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLmdldE1hcHBlZFJhbmdlKCkpO1xyXG5cdH0gZWxzZSBpZiAoYXJyYXkgaW5zdGFuY2VvZiBJbnQxNkFycmF5KSB7XHJcblx0XHR3cml0ZUFyYXJ5ID0gbmV3IEludDE2QXJyYXkoYnVmZmVyLmdldE1hcHBlZFJhbmdlKCkpO1xyXG5cdH0gZWxzZSBpZiAoYXJyYXkgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkge1xyXG5cdFx0d3JpdGVBcmFyeSA9IG5ldyBVaW50MTZBcnJheShidWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKSk7XHJcblx0fSBlbHNlIGlmIChhcnJheSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KSB7XHJcblx0XHR3cml0ZUFyYXJ5ID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlci5nZXRNYXBwZWRSYW5nZSgpKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0d3JpdGVBcmFyeSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmdldE1hcHBlZFJhbmdlKCkpO1xyXG5cdH1cclxuXHR3cml0ZUFyYXJ5LnNldChhcnJheSk7XHJcblx0YnVmZmVyLnVubWFwKCk7XHJcblx0cmV0dXJuIGJ1ZmZlcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTm9ybWFscyhpbmRpY2VzOiBUeXBlZEFycmF5IHwgbnVsbCwgcG9zaXRpb25zOiBUeXBlZEFycmF5KSB7XHJcblx0Y29uc3Qgbm9ybWFscyA9IG5ldyBGbG9hdDMyQXJyYXkocG9zaXRpb25zLmxlbmd0aCk7XHJcblx0Y29uc3QgdmVydGV4Q291bnQgPSBpbmRpY2VzID8gaW5kaWNlcy5sZW5ndGggOiBwb3NpdGlvbnMubGVuZ3RoO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4Q291bnQ7IGkgKz0gMykge1xyXG5cdFx0Y29uc3QgdHJpSW5kaWNlcyA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgbiA9IDA7IG4gPCAzOyBuICs9IDEpIHtcclxuXHRcdFx0aWYgKGluZGljZXMpIHtcclxuXHRcdFx0XHR0cmlJbmRpY2VzLnB1c2goaW5kaWNlc1tpICsgbl0pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRyaUluZGljZXMucHVzaChpICsgbik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGNvbnN0IHRyaWFuZ2xlID0gdHJpSW5kaWNlcy5tYXAoKHZlcnRleEluZGV4KSA9PiB7XHJcblx0XHRcdGNvbnN0IGluZGV4ID0gdmVydGV4SW5kZXggKiAzO1xyXG5cdFx0XHRyZXR1cm4gbmV3IFZlY3RvcjMocG9zaXRpb25zW2luZGV4XSwgcG9zaXRpb25zW2luZGV4ICsgMV0sIHBvc2l0aW9uc1tpbmRleCArIDJdKTtcclxuXHRcdH0pO1xyXG5cdFx0Y29uc3QgZHYxID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdFZlY3RvcjMuc3VidHJhY3QodHJpYW5nbGVbMV0sIHRyaWFuZ2xlWzBdLCBkdjEpO1xyXG5cdFx0Y29uc3QgZHYyID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdFZlY3RvcjMuc3VidHJhY3QodHJpYW5nbGVbMl0sIHRyaWFuZ2xlWzBdLCBkdjIpO1xyXG5cdFx0Y29uc3Qgbm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdFZlY3RvcjMuY3Jvc3MoZHYxLm5vcm1hbGl6ZSgpLCBkdjIubm9ybWFsaXplKCksIG5vcm1hbCk7XHJcblx0XHRmb3IgKGxldCBuID0gMDsgbiA8IDM7IG4gKz0gMSkge1xyXG5cdFx0XHRjb25zdCBpbmRleCA9IChpICsgbikgKiAzO1xyXG5cdFx0XHRub3JtYWxzW2luZGV4ICsgMF0gKz0gbm9ybWFsLng7XHJcblx0XHRcdG5vcm1hbHNbaW5kZXggKyAxXSArPSBub3JtYWwueTtcclxuXHRcdFx0bm9ybWFsc1tpbmRleCArIDJdICs9IG5vcm1hbC56O1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gbm9ybWFscztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlVGFuZ2VudHMoXHJcblx0aW5kaWNlczogVHlwZWRBcnJheSB8IG51bGwsXHJcblx0cG9zaXRpb25zOiBUeXBlZEFycmF5LFxyXG5cdG5vcm1hbHM6IFR5cGVkQXJyYXksXHJcblx0dXZzOiBUeXBlZEFycmF5XHJcbikge1xyXG5cdGNvbnN0IHRhbmdlbnRzID0gbmV3IEZsb2F0MzJBcnJheSgobm9ybWFscy5sZW5ndGggLyAzKSAqIDQpO1xyXG5cdGNvbnN0IHZlcnRleENvdW50ID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIDogcG9zaXRpb25zLmxlbmd0aDtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRleENvdW50OyBpICs9IDMpIHtcclxuXHRcdGNvbnN0IHRyaUluZGljZXMgPSBbXTtcclxuXHRcdGZvciAobGV0IG4gPSAwOyBuIDwgMzsgbiArPSAxKSB7XHJcblx0XHRcdGlmIChpbmRpY2VzKSB7XHJcblx0XHRcdFx0dHJpSW5kaWNlcy5wdXNoKGluZGljZXNbaSArIG5dKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0cmlJbmRpY2VzLnB1c2goaSArIG4pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRjb25zdCBwb3MgPSB0cmlJbmRpY2VzLm1hcCgodmVydGV4SW5kZXgpID0+IHtcclxuXHRcdFx0Y29uc3QgaW5kZXggPSB2ZXJ0ZXhJbmRleCAqIDM7XHJcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yMyhwb3NpdGlvbnNbaW5kZXhdLCBwb3NpdGlvbnNbaW5kZXggKyAxXSwgcG9zaXRpb25zW2luZGV4ICsgMl0pO1xyXG5cdFx0fSk7XHJcblx0XHRjb25zdCB1diA9IHRyaUluZGljZXMubWFwKCh2ZXJ0ZXhJbmRleCkgPT4ge1xyXG5cdFx0XHRjb25zdCBpbmRleCA9IHZlcnRleEluZGV4ICogMjtcclxuXHRcdFx0cmV0dXJuIG5ldyBWZWN0b3IyKHV2cz8uW2luZGV4XSwgdXZzPy5baW5kZXggKyAxXSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRjb25zdCBkdjEgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0VmVjdG9yMy5zdWJ0cmFjdChwb3NbMV0sIHBvc1swXSwgZHYxKTtcclxuXHRcdGNvbnN0IGR2MiA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHRWZWN0b3IzLnN1YnRyYWN0KHBvc1syXSwgcG9zWzBdLCBkdjIpO1xyXG5cdFx0Y29uc3QgZHV2MSA9IG5ldyBWZWN0b3IyKCk7XHJcblx0XHRWZWN0b3IyLnN1YnRyYWN0KHV2WzFdLCB1dlswXSwgZHV2MSk7XHJcblx0XHRjb25zdCBkdXYyID0gbmV3IFZlY3RvcjIoKTtcclxuXHRcdFZlY3RvcjIuc3VidHJhY3QodXZbMl0sIHV2WzBdLCBkdXYyKTtcclxuXHJcblx0XHRjb25zdCB0YW5nZW50ID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcihkdjEsIGR1djEueSwgZHYxKTtcclxuXHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcihkdjIsIGR1djIueSwgZHYyKTtcclxuXHRcdFZlY3RvcjMuc3VidHJhY3QoZHYxLCBkdjIsIHRhbmdlbnQpO1xyXG5cclxuXHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcih0YW5nZW50LCBkdXYyLnkgKiBkdXYxLnggLSBkdXYxLnkgKiBkdXYyLngsIHRhbmdlbnQpO1xyXG5cclxuXHRcdHRhbmdlbnQubm9ybWFsaXplKCk7XHJcblx0XHRmb3IgKGxldCBuID0gMDsgbiA8IDM7IG4gKz0gMSkge1xyXG5cdFx0XHRjb25zdCBpbmRleCA9IChpICsgbikgKiA0O1xyXG5cclxuXHRcdFx0dGFuZ2VudHNbaW5kZXggKyAwXSArPSB0YW5nZW50Lng7XHJcblx0XHRcdHRhbmdlbnRzW2luZGV4ICsgMV0gKz0gdGFuZ2VudC55O1xyXG5cdFx0XHR0YW5nZW50c1tpbmRleCArIDJdICs9IHRhbmdlbnQuejtcclxuXHRcdFx0dGFuZ2VudHNbaW5kZXggKyAzXSA9IDE7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiB0YW5nZW50cztcclxufVxyXG5cclxuZnVuY3Rpb24gbGVycChhOiBudW1iZXIsIGI6IG51bWJlciwgeDogbnVtYmVyKSB7XHJcblx0aWYgKHggPCBhKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0aWYgKHggPiBiKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9XHJcblx0cmV0dXJuICh4IC0gYSkgLyAoYiAtIGEpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJwUXVhdChpbnB1dDogVHlwZWRBcnJheSwgbzogVHlwZWRBcnJheSwgdGltZTogbnVtYmVyLCBtZXRob2Q6IHN0cmluZykge1xyXG5cdGxldCBpbmRleCA9IDE7XHJcblx0d2hpbGUgKGluZGV4IDwgaW5wdXQubGVuZ3RoIC0gMSAmJiB0aW1lID49IGlucHV0W2luZGV4XSkge1xyXG5cdFx0aW5kZXggKz0gMTtcclxuXHR9XHJcblx0Y29uc3QgdCA9IGxlcnAoaW5wdXRbaW5kZXggLSAxXSwgaW5wdXRbaW5kZXhdLCB0aW1lKTtcclxuXHJcblx0aWYgKG1ldGhvZCA9PT0gXCJDVUJJQ1NQTElORVwiKSB7XHJcblx0XHRjb25zdCB0ZCA9IGlucHV0W2luZGV4XSAtIGlucHV0W2luZGV4IC0gMV07XHJcblx0XHRjb25zdCB0MiA9IHQgKiB0O1xyXG5cdFx0Y29uc3QgdDMgPSB0MiAqIHQ7XHJcblx0XHRjb25zdCBpID0gMTIgKiBpbmRleDtcclxuXHJcblx0XHRjb25zdCB2MCA9IG5ldyBRdWF0ZXJuaW9uKG9baSAtIDhdLCBvW2kgLSA3XSwgb1tpIC0gNl0sIG9baSAtIDVdKTtcclxuXHRcdGNvbnN0IGIwID0gbmV3IFF1YXRlcm5pb24ob1tpIC0gNF0sIG9baSAtIDNdLCBvW2kgLSAyXSwgb1tpIC0gMV0pO1xyXG5cdFx0Y29uc3QgdjEgPSBuZXcgUXVhdGVybmlvbihvW2kgKyA0XSwgb1tpICsgNV0sIG9baSArIDZdLCBvW2kgKyA3XSk7XHJcblx0XHRjb25zdCBhMSA9IG5ldyBRdWF0ZXJuaW9uKG9baV0sIG9baSArIDFdLCBvW2kgKyAyXSwgb1tpICsgM10pO1xyXG5cdFx0UXVhdGVybmlvbi5tdWx0aXBseUJ5U2NhbGFyKHYwLCAyICogdDMgLSAzICogdDIgKyAxLCB2MCk7XHJcblx0XHRRdWF0ZXJuaW9uLm11bHRpcGx5QnlTY2FsYXIoYjAsIHRkICogKHQzIC0gMiAqIHQyICsgdCksIGIwKTtcclxuXHRcdFF1YXRlcm5pb24ubXVsdGlwbHlCeVNjYWxhcih2MSwgLTIgKiB0MyArIDMgKiB0MiwgdjEpO1xyXG5cdFx0UXVhdGVybmlvbi5tdWx0aXBseUJ5U2NhbGFyKGExLCB0ZCAqICh0MyAtIHQyKSwgYTEpO1xyXG5cclxuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBRdWF0ZXJuaW9uKCk7XHJcblx0XHRRdWF0ZXJuaW9uLmFkZChyZXN1bHQsIHYwLCByZXN1bHQpO1xyXG5cdFx0UXVhdGVybmlvbi5hZGQocmVzdWx0LCBiMCwgcmVzdWx0KTtcclxuXHRcdFF1YXRlcm5pb24uYWRkKHJlc3VsdCwgdjEsIHJlc3VsdCk7XHJcblx0XHRRdWF0ZXJuaW9uLmFkZChyZXN1bHQsIGExLCByZXN1bHQpO1xyXG5cdFx0UXVhdGVybmlvbi5ub3JtYWxpemUocmVzdWx0LCByZXN1bHQpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNvbnN0IHEgPSBbXTtcclxuXHRmb3IgKGxldCBuID0gLTE7IG4gPCAxOyBuICs9IDEpIHtcclxuXHRcdGNvbnN0IGkgPSA0ICogKGluZGV4ICsgbik7XHJcblx0XHRxLnB1c2gobmV3IFF1YXRlcm5pb24ob1tpXSwgb1tpICsgMV0sIG9baSArIDJdLCBvW2kgKyAzXSkpO1xyXG5cdH1cclxuXHJcblx0aWYgKG1ldGhvZCA9PT0gXCJTVEVQXCIpIHtcclxuXHRcdHJldHVybiB0IDwgMSA/IHFbMF0gOiBxWzFdO1xyXG5cdH1cclxuXHRjb25zdCByZXN1bHQgPSBuZXcgUXVhdGVybmlvbigpO1xyXG5cdFF1YXRlcm5pb24uc2xlcnAocVswXSwgcVsxXSwgdCwgcmVzdWx0KTtcclxuXHRyZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJwVmVjMyhpbnB1dDogVHlwZWRBcnJheSwgb3V0cHV0OiBUeXBlZEFycmF5LCB0aW1lOiBudW1iZXIsIG1ldGhvZDogc3RyaW5nKSB7XHJcblx0bGV0IGluZGV4ID0gMTtcclxuXHR3aGlsZSAoaW5kZXggPCBpbnB1dC5sZW5ndGggLSAxICYmIHRpbWUgPj0gaW5wdXRbaW5kZXhdKSB7XHJcblx0XHRpbmRleCArPSAxO1xyXG5cdH1cclxuXHRjb25zdCB0ID0gbGVycChpbnB1dFtpbmRleCAtIDFdLCBpbnB1dFtpbmRleF0sIHRpbWUpO1xyXG5cclxuXHRpZiAobWV0aG9kID09PSBcIkNVQklDU1BMSU5FXCIpIHtcclxuXHRcdGNvbnN0IHRkID0gaW5wdXRbaW5kZXhdIC0gaW5wdXRbaW5kZXggLSAxXTtcclxuXHRcdGNvbnN0IHQyID0gdCAqIHQ7XHJcblx0XHRjb25zdCB0MyA9IHQyICogdDtcclxuXHRcdGNvbnN0IGkgPSA5ICogaW5kZXg7XHJcblx0XHRjb25zdCB2MCA9IG5ldyBWZWN0b3IzKG91dHB1dFtpIC0gNl0sIG91dHB1dFtpIC0gNV0sIG91dHB1dFtpIC0gNF0pO1xyXG5cdFx0Y29uc3QgYjAgPSBuZXcgVmVjdG9yMyhvdXRwdXRbaSAtIDNdLCBvdXRwdXRbaSAtIDJdLCBvdXRwdXRbaSAtIDFdKTtcclxuXHRcdGNvbnN0IHYxID0gbmV3IFZlY3RvcjMob3V0cHV0W2kgKyAzXSwgb3V0cHV0W2kgKyA0XSwgb3V0cHV0W2kgKyA1XSk7XHJcblx0XHRjb25zdCBhMSA9IG5ldyBWZWN0b3IzKG91dHB1dFtpXSwgb3V0cHV0W2kgKyAxXSwgb3V0cHV0W2kgKyAyXSk7XHJcblx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIodjAsIDIgKiB0MyAtIDMgKiB0MiArIDEsIHYwKTtcclxuXHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcihiMCwgdGQgKiAodDMgLSAyICogdDIgKyB0KSwgYjApO1xyXG5cdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKHYxLCAtMiAqIHQzICsgMyAqIHQyLCB2MSk7XHJcblx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIoYTEsIHRkICogKHQzIC0gdDIpLCBhMSk7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0VmVjdG9yMy5hZGQocmVzdWx0LCB2MCwgcmVzdWx0KTtcclxuXHRcdFZlY3RvcjMuYWRkKHJlc3VsdCwgYjAsIHJlc3VsdCk7XHJcblx0XHRWZWN0b3IzLmFkZChyZXN1bHQsIHYxLCByZXN1bHQpO1xyXG5cdFx0VmVjdG9yMy5hZGQocmVzdWx0LCBhMSwgcmVzdWx0KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjb25zdCB2ID0gW107XHJcblx0Zm9yIChsZXQgbiA9IC0xOyBuIDwgMTsgbiArPSAxKSB7XHJcblx0XHRjb25zdCBpID0gMyAqIChpbmRleCArIG4pO1xyXG5cdFx0di5wdXNoKG5ldyBWZWN0b3IzKG91dHB1dFtpXSwgb3V0cHV0W2kgKyAxXSwgb3V0cHV0W2kgKyAyXSkpO1xyXG5cdH1cclxuXHJcblx0aWYgKG1ldGhvZCA9PT0gXCJTVEVQXCIpIHtcclxuXHRcdHJldHVybiB0IDwgMSA/IHZbMF0gOiB2WzFdO1xyXG5cdH1cclxuXHRjb25zdCByZXN1bHQgPSBuZXcgVmVjdG9yMygpO1xyXG5cdHJldHVybiBWZWN0b3IzLmxlcnAodlswXSwgdlsxXSwgdCwgcmVzdWx0KTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdsdGZFbnVtOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB9ID0ge1xyXG5cdFNDQUxBUjogMSxcclxuXHRWRUMyOiAyLFxyXG5cdFZFQzM6IDMsXHJcblx0VkVDNDogNCxcclxuXHRNQVQyOiA0LFxyXG5cdE1BVDM6IDksXHJcblx0TUFUNDogMTYsXHJcblx0NTEyMDogMSxcclxuXHQ1MTIxOiAxLFxyXG5cdDUxMjI6IDIsXHJcblx0NTEyMzogMixcclxuXHQ1MTI1OiA0LFxyXG5cdDUxMjY6IDQsXHJcblx0OTcyODogXCJuZWFyZXN0XCIsXHJcblx0OTcyOTogXCJsaW5lYXJcIixcclxuXHQ5OTg0OiBcImxpbmVhclwiLFxyXG5cdDk5ODU6IFwibGluZWFyXCIsXHJcblx0OTk4NjogXCJsaW5lYXJcIixcclxuXHQ5OTg3OiBcImxpbmVhclwiLFxyXG5cdDMzMDcxOiBcImNsYW1wLXRvLWVkZ2VcIixcclxuXHQzMzY0ODogXCJtaXJyb3ItcmVwZWF0XCIsXHJcblx0MTA0OTc6IFwicmVwZWF0XCJcclxufTtcclxuIiwiaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4uLy4uLy4uL21hdGgvTWF0cml4NFwiO1xyXG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi4vLi4vLi4vbWF0aC9WZWN0b3I0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQWNjZXNzb3Ige1xyXG5cdHZhbHVlczogYW55O1xyXG5cdGlkOiBudW1iZXI7XHJcblx0Y291bnQ6IG51bWJlcjtcclxuXHRjb21wb25lbnRUeXBlOiBudW1iZXI7XHJcblx0dHlwZTogbnVtYmVyO1xyXG5cdG1pbjogbnVtYmVyW107XHJcblx0bWF4OiBudW1iZXJbXTtcclxuXHRjb25zdHJ1Y3RvcihvcHRpb25zOiBBY2Nlc3NvclBhcm1zKSB7XHJcblx0XHR0aGlzLnZhbHVlcyA9IG9wdGlvbnMudmFsdWVzID8/IFtdO1xyXG5cdFx0dGhpcy5pZCA9IG9wdGlvbnMuaWQ7XHJcblx0XHR0aGlzLmNvdW50ID0gb3B0aW9ucy5jb3VudDtcclxuXHRcdHRoaXMuY29tcG9uZW50VHlwZSA9IG9wdGlvbnMuY29tcG9uZW50VHlwZTtcclxuXHRcdHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcclxuXHRcdHRoaXMubWluID0gb3B0aW9ucy5taW47XHJcblx0XHR0aGlzLm1heCA9IG9wdGlvbnMubWF4O1xyXG5cdH1cclxuXHRnZXRBcnJheSgpOiBudW1iZXJbXSB7XHJcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnZhbHVlcyk7XHJcblx0fVxyXG5cdGdldFZlYzRBcnJheSgpOiBWZWN0b3I0W10ge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaSArPSA0KSB7XHJcblx0XHRcdHJlc3VsdC5wdXNoKG5ldyBWZWN0b3I0KHRoaXMudmFsdWVzW2ldLCB0aGlzLnZhbHVlc1tpICsgMV0sIHRoaXMudmFsdWVzW2kgKyAyXSwgdGhpcy52YWx1ZXNbaSArIDNdKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHRnZXRNYXQ0QXJyYXkoKTogTWF0cml4NFtdIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlcy5sZW5ndGg7IGkgKz0gMTYpIHtcclxuXHRcdFx0Y29uc3QgbWF0NCA9IG5ldyBNYXRyaXg0KCk7XHJcblx0XHRcdE1hdHJpeDQuZnJvbUNvbHVtbk1ham9yQXJyYXkodGhpcy52YWx1ZXMuc2xpY2UoaSwgaSArIDE2KSwgbWF0NCk7XHJcblx0XHRcdHJlc3VsdC5wdXNoKG1hdDQpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcbn1cclxuZXhwb3J0IHR5cGUgQWNjZXNzb3JQYXJtcyA9IFBhcnRpYWw8QWNjZXNzb3I+O1xyXG4iLCJpbXBvcnQgeyBRdWF0ZXJuaW9uIH0gZnJvbSBcIi4uLy4uLy4uL21hdGgvUXVhdGVybmlvblwiO1xuaW1wb3J0IFZlY3RvcjQgZnJvbSBcIi4uLy4uLy4uL21hdGgvVmVjdG9yNFwiO1xuaW1wb3J0IHsgQW5pbWF0aW9uQ2hhbm5lbCB9IGZyb20gXCIuL0FuaW1hdGlvbkNoYW5uZWxcIjtcbmltcG9ydCB7IEFuaW1hdGlvblNhbXBsZXIgfSBmcm9tIFwiLi9BbmltYXRpb25TYW1wbGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBBbmltYXRpb24ge1xuXHRjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nLCBwdWJsaWMgc2FtcGxlcnM6IEFuaW1hdGlvblNhbXBsZXJbXSwgcHVibGljIGNoYW5uZWxzOiBBbmltYXRpb25DaGFubmVsW10pIHt9XG5cdHBsYXkodGltZTogbnVtYmVyKSB7XG5cdFx0bGV0IG5vZGUsIGFuaW1hdGlvblNhbXBsZXIsIHRhcmdldDtcblx0XHR0aGlzPy5jaGFubmVscz8ubWFwKChjaGFubmVsKSA9PiB7XG5cdFx0XHRhbmltYXRpb25TYW1wbGVyID0gY2hhbm5lbC5zYW1wbGVyO1xuXHRcdFx0YW5pbWF0aW9uU2FtcGxlci5nZXRWYWx1ZSh0aW1lKTtcblx0XHRcdHRhcmdldCA9IGNoYW5uZWwudGFyZ2V0O1xuXHRcdFx0bm9kZSA9IHRhcmdldC5ub2RlO1xuXHRcdFx0c3dpdGNoICh0YXJnZXQucGF0aCkge1xuXHRcdFx0XHRjYXNlIFwicm90YXRpb25cIjpcblx0XHRcdFx0XHRRdWF0ZXJuaW9uLmNsb25lKGFuaW1hdGlvblNhbXBsZXIuY3VycmVudFZhbHVlLCBub2RlLnF1YXRlcm5pb24pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwidHJhbnNsYXRpb25cIjpcblx0XHRcdFx0XHRWZWN0b3I0LmNsb25lKGFuaW1hdGlvblNhbXBsZXIuY3VycmVudFZhbHVlLCBub2RlLnBvc2l0aW9uKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInNjYWxlXCI6XG5cdFx0XHRcdFx0VmVjdG9yNC5jbG9uZShhbmltYXRpb25TYW1wbGVyLmN1cnJlbnRWYWx1ZSwgbm9kZS5zY2FsZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFuaW1hdGlvbkNoYW5uZWxUYXJnZXQgfSBmcm9tIFwiLi9BbmltYXRpb25DaGFubmVsVGFyZ2V0XCI7XG5pbXBvcnQgeyBBbmltYXRpb25TYW1wbGVyIH0gZnJvbSBcIi4vQW5pbWF0aW9uU2FtcGxlclwiO1xuXG5leHBvcnQgY2xhc3MgQW5pbWF0aW9uQ2hhbm5lbCB7XG5cdHNhbXBsZXI6IEFuaW1hdGlvblNhbXBsZXI7XG5cdHRhcmdldDogQW5pbWF0aW9uQ2hhbm5lbFRhcmdldDtcblx0Y29uc3RydWN0b3IoKSB7fVxufVxuIiwiaW1wb3J0IE5vZGUgZnJvbSBcIi4uLy4uLy4uL21lc2gvTm9kZVwiO1xuXG5leHBvcnQgY2xhc3MgQW5pbWF0aW9uQ2hhbm5lbFRhcmdldCB7XG5cdG5vZGU6IE5vZGU7XG5cdHBhdGg6IFwidHJhbnNsYXRpb25cIiB8IFwicm90YXRpb25cIiB8IFwic2NhbGVcIiB8IFwid2VpZ2h0c1wiO1xuXHRjb25zdHJ1Y3Rvcihub2RlLCBwYXRoKSB7XG5cdFx0dGhpcy5ub2RlID0gbm9kZTtcblx0XHR0aGlzLnBhdGggPSBwYXRoO1xuXHR9XG59XG4iLCJleHBvcnQgZW51bSBUeXBlMk51bU9mQ29tcG9uZW50IHtcclxuXHRcIlNDQUxBUlwiID0gMSxcclxuXHRcIlZFQzJcIiA9IDIsXHJcblx0XCJWRUMzXCIgPSAzLFxyXG5cdFwiVkVDNFwiID0gNCxcclxuXHRcIk1BVDJcIiA9IDQsXHJcblx0XCJNQVQzXCIgPSA5LFxyXG5cdFwiTUFUNFwiID0gMTZcclxufVxyXG4iLCJpbXBvcnQgeyBRdWF0ZXJuaW9uIH0gZnJvbSBcIi4uLy4uLy4uL21hdGgvUXVhdGVybmlvblwiO1xyXG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi4vLi4vLi4vbWF0aC9WZWN0b3I0XCI7XHJcbmltcG9ydCB7IFR5cGUyTnVtT2ZDb21wb25lbnQgfSBmcm9tIFwiLi4vdHlwZXMvZ2x0ZlR5cGVcIjtcclxuZXhwb3J0IGNsYXNzIEFuaW1hdGlvblNhbXBsZXIge1xyXG5cdGlucHV0OiBhbnk7XHJcblx0aW50ZXJwb2xhdGlvbjogXCJMSU5FQVJcIiB8IFwiU1RFUFwiIHwgXCJDVUJJQ1NQTElORVwiO1xyXG5cdG91dHB1dDogYW55O1xyXG5cdGN1cnJlbnRJbmRleDogbnVtYmVyO1xyXG5cdHN0YXJ0VGltZTogbnVtYmVyO1xyXG5cdGVuZFRpbWU6IG51bWJlcjtcclxuXHRjdXJyZW50VmFsdWU6IFZlY3RvcjQgfCBRdWF0ZXJuaW9uO1xyXG5cdGR1cmF0aW9uOiBudW1iZXI7XHJcblx0aW5wdXRNYXg6IG51bWJlcjtcclxuXHRwcml2YXRlIGlucHV0VHlwZTogc3RyaW5nO1xyXG5cdHByaXZhdGUgb3V0cHV0VHlwZTogc3RyaW5nO1xyXG5cdGNvbnN0cnVjdG9yKCkge31cclxuXHRmb3JtR2x0ZihnbHRmLCBzYW1wbGVyKSB7XHJcblx0XHR0aGlzLmlucHV0ID0gZ2x0Zi5hY2Nlc3NvcnNbc2FtcGxlci5pbnB1dF0udmFsdWVzOyAvL3JlcXVpcmVkLCBhY2Nlc3NvciBvYmplY3RcclxuXHRcdHRoaXMub3V0cHV0ID0gZ2x0Zi5hY2Nlc3NvcnNbc2FtcGxlci5vdXRwdXRdLnZhbHVlczsgLy9yZXF1aXJlZCwgYWNjZXNzb3Igb2JqZWN0XHJcblx0XHR0aGlzLmludGVycG9sYXRpb24gPSBzYW1wbGVyLmludGVycG9sYXRpb24gIT09IHVuZGVmaW5lZCA/IHNhbXBsZXIuaW50ZXJwb2xhdGlvbiA6IFwiTElORUFSXCI7XHJcblx0XHR0aGlzLmN1cnJlbnRJbmRleCA9IDA7XHJcblx0XHQvLyB0aGlzLmN1cnJlbnRWYWx1ZT1uZXcgVmVjdG9yNCgpO1xyXG5cdFx0dGhpcy5lbmRUaW1lID0gdGhpcy5pbnB1dFt0aGlzLmlucHV0Lmxlbmd0aCAtIDFdO1xyXG5cdFx0dGhpcy5pbnB1dE1heCA9IHRoaXMuZW5kVGltZSAtIHRoaXMuaW5wdXRbMF07XHJcblx0XHR0aGlzLmlucHV0VHlwZSA9IGdsdGY/Lmpzb24/LmFjY2Vzc29yc1tzYW1wbGVyLmlucHV0XT8udHlwZTtcclxuXHRcdHRoaXMub3V0cHV0VHlwZSA9IGdsdGY/Lmpzb24/LmFjY2Vzc29yc1tzYW1wbGVyLm91dHB1dF0/LnR5cGU7XHJcblx0fVxyXG5cdGdldFZhbHVlKHRpbWU6IG51bWJlcik6IHZvaWQge1xyXG5cdFx0aWYgKHRpbWUgPiB0aGlzLmVuZFRpbWUpIHtcclxuXHRcdFx0dGltZSAtPSB0aGlzLmlucHV0TWF4ICogTWF0aC5jZWlsKCh0aW1lIC0gdGhpcy5lbmRUaW1lKSAvIHRoaXMuaW5wdXRNYXgpO1xyXG5cdFx0XHR0aGlzLmN1cnJlbnRJbmRleCA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgbGVuID0gdGhpcy5pbnB1dC5sZW5ndGg7XHJcblx0XHR3aGlsZSAodGhpcy5jdXJyZW50SW5kZXggPD0gbGVuIC0gMiAmJiB0aW1lID49IHRoaXMuaW5wdXRbdGhpcy5jdXJyZW50SW5kZXggKyAxXSkge1xyXG5cdFx0XHR0aGlzLmN1cnJlbnRJbmRleCsrO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmN1cnJlbnRJbmRleCA+PSBsZW4gLSAxKSB7XHJcblx0XHRcdC8vIGxvb3BcclxuXHRcdFx0dGltZSAtPSB0aGlzLmlucHV0TWF4O1xyXG5cdFx0XHR0aGlzLmN1cnJlbnRJbmRleCA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQHRtcDogYXNzdW1lIG5vIHN0cmlkZVxyXG5cdFx0Y29uc3QgY291bnQgPSBUeXBlMk51bU9mQ29tcG9uZW50W3RoaXMub3V0cHV0VHlwZV07XHJcblxyXG5cdFx0Y29uc3QgYW5pbWF0aW9uT3V0cHV0VmFsdWVWZWM0YSA9IGNvdW50ID09PSA0ID8gbmV3IFF1YXRlcm5pb24oKSA6IG5ldyBWZWN0b3I0KCk7XHJcblx0XHRjb25zdCBhbmltYXRpb25PdXRwdXRWYWx1ZVZlYzRiID0gY291bnQgPT09IDQgPyBuZXcgUXVhdGVybmlvbigpIDogbmV3IFZlY3RvcjQoKTtcclxuXHRcdGlmICghdGhpcy5jdXJyZW50VmFsdWUpIHRoaXMuY3VycmVudFZhbHVlID0gY291bnQgPT09IDQgPyBuZXcgUXVhdGVybmlvbigpIDogbmV3IFZlY3RvcjQoKTtcclxuXHRcdGNvbnN0IGkgPSB0aGlzLmN1cnJlbnRJbmRleDtcclxuXHRcdGNvbnN0IG8gPSBpICogY291bnQ7XHJcblx0XHRjb25zdCBvbiA9IG8gKyBjb3VudDtcclxuXHJcblx0XHRjb25zdCB1ID0gTWF0aC5tYXgoMCwgdGltZSAtIHRoaXMuaW5wdXRbaV0pIC8gKHRoaXMuaW5wdXRbaSArIDFdIC0gdGhpcy5pbnB1dFtpXSk7XHJcblx0XHRhbmltYXRpb25PdXRwdXRWYWx1ZVZlYzRhLnNldCh0aGlzLm91dHB1dFtvICsgMF0sIHRoaXMub3V0cHV0W28gKyAxXSwgdGhpcy5vdXRwdXRbbyArIDJdLCB0aGlzLm91dHB1dFtvICsgM10pO1xyXG5cdFx0YW5pbWF0aW9uT3V0cHV0VmFsdWVWZWM0Yi5zZXQoXHJcblx0XHRcdHRoaXMub3V0cHV0W29uICsgMF0sXHJcblx0XHRcdHRoaXMub3V0cHV0W29uICsgMV0sXHJcblx0XHRcdHRoaXMub3V0cHV0W29uICsgMl0sXHJcblx0XHRcdHRoaXMub3V0cHV0W29uICsgM11cclxuXHRcdCk7XHJcblx0XHRzd2l0Y2ggKHRoaXMuaW50ZXJwb2xhdGlvbikge1xyXG5cdFx0XHRjYXNlIFwiTElORUFSXCI6XHJcblx0XHRcdFx0Y291bnQgPT09IDRcclxuXHRcdFx0XHRcdD8gUXVhdGVybmlvbi5zbGVycChcclxuXHRcdFx0XHRcdFx0XHQ8UXVhdGVybmlvbj5hbmltYXRpb25PdXRwdXRWYWx1ZVZlYzRhLFxyXG5cdFx0XHRcdFx0XHRcdDxRdWF0ZXJuaW9uPmFuaW1hdGlvbk91dHB1dFZhbHVlVmVjNGIsXHJcblx0XHRcdFx0XHRcdFx0dSxcclxuXHRcdFx0XHRcdFx0XHQ8UXVhdGVybmlvbj50aGlzLmN1cnJlbnRWYWx1ZVxyXG5cdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHQ6IFZlY3RvcjQubGVycChcclxuXHRcdFx0XHRcdFx0XHQ8VmVjdG9yND5hbmltYXRpb25PdXRwdXRWYWx1ZVZlYzRhLFxyXG5cdFx0XHRcdFx0XHRcdDxWZWN0b3I0PmFuaW1hdGlvbk91dHB1dFZhbHVlVmVjNGIsXHJcblx0XHRcdFx0XHRcdFx0dSxcclxuXHRcdFx0XHRcdFx0XHQ8VmVjdG9yND50aGlzLmN1cnJlbnRWYWx1ZVxyXG5cdFx0XHRcdFx0ICApO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBSZW5kZXJPYmplY3RUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuLi9nZW9tZXRyeS9HZW9tZXRyeVwiO1xyXG5pbXBvcnQgUGJyTWF0ZXJpYWwgZnJvbSBcIi4uL21hdGVyaWFsL1Bick1hdGVyaWFsXCI7XHJcbmltcG9ydCBDb2xvciBmcm9tIFwiLi4vbWF0aC9Db2xvclwiO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tIFwiLi4vbWF0aC9NYXRyaXg0XCI7XHJcbmltcG9ydCB7IFF1YXRlcm5pb24gfSBmcm9tIFwiLi4vbWF0aC9RdWF0ZXJuaW9uXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcclxuaW1wb3J0IE5vZGUgZnJvbSBcIi4uL21lc2gvTm9kZVwiO1xyXG5pbXBvcnQgeyBTS2luTWVzaCB9IGZyb20gXCIuLi9tZXNoL1NLaW5NZXNoXCI7XHJcbmltcG9ydCB7IEZsb2F0MzJBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vcmVuZGVyL0F0dHJpYnV0ZVwiO1xyXG5pbXBvcnQgU2FtcGxlciBmcm9tIFwiLi4vcmVuZGVyL1NhbXBsZXJcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcbmltcG9ydCB7IGdlbmVyYXRlTm9ybWFscywgZ2x0ZkVudW0sIG5ld1R5cGVkQXJyYXksIHRvSW5kaWNlcywgVHlwZWRBcnJheSB9IGZyb20gXCIuLi91dGlscy9nbHRmVXRpbHNcIjtcclxuaW1wb3J0IHsgQWNjZXNzb3IgfSBmcm9tIFwiLi9nbHRmL2xpYnMvQWNjZXNzb3JcIjtcclxuaW1wb3J0IHsgQW5pbWF0aW9uIH0gZnJvbSBcIi4vZ2x0Zi9saWJzL0FuaW1hdGlvblwiO1xyXG5pbXBvcnQgeyBBbmltYXRpb25DaGFubmVsIH0gZnJvbSBcIi4vZ2x0Zi9saWJzL0FuaW1hdGlvbkNoYW5uZWxcIjtcclxuaW1wb3J0IHsgQW5pbWF0aW9uQ2hhbm5lbFRhcmdldCB9IGZyb20gXCIuL2dsdGYvbGlicy9BbmltYXRpb25DaGFubmVsVGFyZ2V0XCI7XHJcbmltcG9ydCB7IEFuaW1hdGlvblNhbXBsZXIgfSBmcm9tIFwiLi9nbHRmL2xpYnMvQW5pbWF0aW9uU2FtcGxlclwiO1xyXG5cclxuZXhwb3J0IHR5cGUgR0xURlByaW1pdGl2ZSA9IHtcclxuXHR2ZXJ0ZXhDb3VudDogbnVtYmVyO1xyXG5cdGluZGljZXM6IFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXkgfCBudWxsO1xyXG5cdHBvc2l0aW9uczogVHlwZWRBcnJheTtcclxuXHRub3JtYWxzOiBUeXBlZEFycmF5O1xyXG5cdHV2czogVHlwZWRBcnJheSB8IG51bGw7XHJcblx0dXYxczogVHlwZWRBcnJheSB8IG51bGw7XHJcblx0dGFuZ2VudHM6IFR5cGVkQXJyYXkgfCBudWxsO1xyXG5cdGNvbG9yczogVHlwZWRBcnJheSB8IG51bGw7XHJcblx0bWF0ZXJpYWw6IGFueTtcclxuXHRib3VuZGluZ0JveDoge1xyXG5cdFx0bWF4OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XHJcblx0XHRtaW46IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcclxuXHR9O1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgR0xURk1lc2ggPSBBcnJheTxHTFRGUHJpbWl0aXZlPjtcclxuXHJcbmV4cG9ydCB0eXBlIEdMVEZBbmltYXRpb24gPSB7XHJcblx0Y2hhbm5lbHM6IEFycmF5PHtcclxuXHRcdGlucHV0OiBUeXBlZEFycmF5O1xyXG5cdFx0b3V0cHV0OiBUeXBlZEFycmF5O1xyXG5cdFx0aW50ZXJwb2xhdGlvbjogc3RyaW5nO1xyXG5cdFx0bm9kZTogbnVtYmVyO1xyXG5cdFx0cGF0aDogc3RyaW5nO1xyXG5cdH0+O1xyXG5cdGxlbmd0aDogbnVtYmVyO1xyXG59O1xyXG5cclxuZXhwb3J0IGNsYXNzIEdMVEYge1xyXG5cdHNjZW5lczogQXJyYXk8Tm9kZT47XHJcblxyXG5cdG5vZGVzOiBBcnJheTxhbnk+O1xyXG5cclxuXHRjYW1lcmFzOiBBcnJheTxhbnk+O1xyXG5cclxuXHRtZXNoZXM6IEFycmF5PGFueT47XHJcblxyXG5cdGltYWdlczogQXJyYXk8SW1hZ2VCaXRtYXA+O1xyXG5cclxuXHRhbmltYXRpb25zOiBBcnJheTxHTFRGQW5pbWF0aW9uPjtcclxuXHJcblx0cHJpdmF0ZSBnbGJPZmZzZXQ6IG51bWJlcjtcclxuXHJcblx0cHJpdmF0ZSBidWZmZXJzOiBBcnJheUJ1ZmZlcltdO1xyXG5cclxuXHRwcml2YXRlIGJ1ZmZlclZpZXdzOiBhbnk7XHJcblxyXG5cdGFjY2Vzc29yczogYW55O1xyXG5cclxuXHRqc29uOiBhbnk7XHJcblxyXG5cdHByaXZhdGUgbWF0ZXJpYWxzOiBhbnk7XHJcblxyXG5cdHByaXZhdGUgZ2xiQmluPzogQXJyYXlCdWZmZXI7XHJcblxyXG5cdHByaXZhdGUgcm9vdFVybDogc3RyaW5nO1xyXG5cclxuXHR0ZXh0dXJlczogYW55W107XHJcblxyXG5cdHNhbXBsZXJzOiBTYW1wbGVyW107XHJcblxyXG5cdGNvbnN0cnVjdG9yKGpzb246IGFueSwgcm9vdFVybDogc3RyaW5nLCBnbGJPZmZzZXQgPSAwLCBnbGJCaW4/OiBBcnJheUJ1ZmZlcikge1xyXG5cdFx0dGhpcy5qc29uID0ganNvbjtcclxuXHRcdHRoaXMuYnVmZmVyVmlld3MgPSBqc29uLmJ1ZmZlclZpZXdzO1xyXG5cdFx0dGhpcy5nbGJPZmZzZXQgPSBnbGJPZmZzZXQ7XHJcblx0XHR0aGlzLnJvb3RVcmwgPSByb290VXJsO1xyXG5cdFx0dGhpcy5zY2VuZXMgPSBqc29uLnNjZW5lcztcclxuXHRcdHRoaXMuY2FtZXJhcyA9IGpzb24uY2FtZXJhcyB8fCBbXTtcclxuXHRcdHRoaXMuZ2xiQmluID0gZ2xiQmluO1xyXG5cdFx0dGhpcy5tZXNoZXMgPSBbXTtcclxuXHR9XHJcblx0YXN5bmMgcGFyc2VEYXRhKCkge1xyXG5cdFx0dGhpcy5idWZmZXJzID0gYXdhaXQgdGhpcy5sb2FkQnVmZmVzKCk7XHJcblx0XHR0aGlzLmltYWdlcyA9IGF3YWl0IHRoaXMubG9hZEltYWdlcygpO1xyXG5cdFx0dGhpcy5wYXJzZVNhbXBsZXJzKCk7XHJcblx0XHR0aGlzLnBhcnNlVGV4dHVyZXMoKTtcclxuXHRcdHRoaXMucGFyc2VNYXRlcmlhbHMoKTtcclxuXHRcdHRoaXMucGFyc2VBY2Nlc3NvcnMoKTtcclxuXHRcdHRoaXMucGFyc2VNZXNocygpO1xyXG5cdFx0dGhpcy5wYXJzZU5vZGVzKCk7XHJcblx0XHR0aGlzLm5vcm1hbGl6ZURhdGEoKTtcclxuXHRcdHRoaXMucGFyc2VTY2VuZXMoKTtcclxuXHRcdHRoaXMucGFyc2VBbmltYXRpb25zKCk7XHJcblx0fVxyXG5cdHByaXZhdGUgZ2V0QWNjZXNzb3IoaW5kZXg6IG51bWJlcikge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWNjZXNzb3JzW2luZGV4XTtcclxuXHR9XHJcblx0cHJpdmF0ZSBwYXJzZVNhbXBsZXJzKCkge1xyXG5cdFx0dGhpcy5zYW1wbGVycyA9IHRoaXMuanNvbi5zYW1wbGVyc1xyXG5cdFx0XHQ/ICh0aGlzLmpzb24uc2FtcGxlcnMgYXMgQXJyYXk8YW55PikubWFwKChzYW1wbGVyKSA9PiB0aGlzLmdldFNhbXBsZXIoc2FtcGxlcikpXHJcblx0XHRcdDogW107XHJcblx0fVxyXG5cdHByaXZhdGUgcGFyc2VTY2VuZXMoKSB7XHJcblx0XHR0aGlzLnNjZW5lcyA9IHRoaXMuanNvbi5zY2VuZXMubWFwKChzY2VuZSkgPT4ge1xyXG5cdFx0XHRjb25zdCBub2RlcyA9IHNjZW5lPy5ub2Rlcz8ubWFwKChub2RlSWQpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5ub2Rlc1tub2RlSWRdO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0cmV0dXJuIG5vZGVzO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgcGFyc2VUZXh0dXJlcygpIHtcclxuXHRcdHRoaXMudGV4dHVyZXMgPSB0aGlzLmpzb24udGV4dHVyZXNcclxuXHRcdFx0PyAodGhpcy5qc29uLnRleHR1cmVzIGFzIEFycmF5PGFueT4pLm1hcCgodGV4dHVyZSkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0c2FtcGxlcjogdGV4dHVyZS5zYW1wbGVyICE9PSB1bmRlZmluZWQgPyB0aGlzLnNhbXBsZXJzW3RleHR1cmUuc2FtcGxlcl0gOiB0aGlzLmdldFNhbXBsZXIoe30pLFxyXG5cdFx0XHRcdFx0XHR0ZXh0dXJlOiB0aGlzLmNyZWF0ZVRleHR1cmUodGV4dHVyZS5zb3VyY2UpXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHQgIH0pXHJcblx0XHRcdDogW107XHJcblx0fVxyXG5cdHByaXZhdGUgcGFyc2VNYXRlcmlhbHMoKSB7XHJcblx0XHR0aGlzLm1hdGVyaWFscyA9IHRoaXMuanNvbi5tYXRlcmlhbHNcclxuXHRcdFx0PyAodGhpcy5qc29uLm1hdGVyaWFscyBhcyBBcnJheTxhbnk+KS5tYXAoKG1hdGVyaWFsKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBtYXQgPSBuZXcgUGJyTWF0ZXJpYWwoKTtcclxuXHRcdFx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRcdFx0YmFzZUNvbG9yRmFjdG9yLFxyXG5cdFx0XHRcdFx0XHRtZXRhbGxpY0ZhY3RvcixcclxuXHRcdFx0XHRcdFx0bWV0YWxsaWNSb3VnaG5lc3NUZXh0dXJlLFxyXG5cdFx0XHRcdFx0XHRiYXNlQ29sb3JUZXh0dXJlLFxyXG5cdFx0XHRcdFx0XHRyb3VnaG5lc3NGYWN0b3JcclxuXHRcdFx0XHRcdH0gPSBtYXRlcmlhbC5wYnJNZXRhbGxpY1JvdWdobmVzcztcclxuXHRcdFx0XHRcdGlmIChtYXRlcmlhbC5ub3JtYWxUZXh0dXJlKSBtYXQubm9ybWFsVGV4dHVyZSA9IHRoaXMudGV4dHVyZXNbbWF0ZXJpYWwubm9ybWFsVGV4dHVyZS5pbmRleF0udGV4dHVyZTtcclxuXHRcdFx0XHRcdGlmIChtYXRlcmlhbC5vY2NsdXNpb25UZXh0dXJlKVxyXG5cdFx0XHRcdFx0XHRtYXQuYW9UZXh0dXJlID0gdGhpcy50ZXh0dXJlc1ttYXRlcmlhbC5vY2NsdXNpb25UZXh0dXJlLmluZGV4XS50ZXh0dXJlO1xyXG5cdFx0XHRcdFx0aWYgKG1hdGVyaWFsLmVtaXNzaXZlVGV4dHVyZSlcclxuXHRcdFx0XHRcdFx0bWF0LmVtaXNzaXZlVGV4dHVyZSA9IHRoaXMudGV4dHVyZXNbbWF0ZXJpYWwuZW1pc3NpdmVUZXh0dXJlLmluZGV4XS50ZXh0dXJlO1xyXG5cdFx0XHRcdFx0aWYgKGJhc2VDb2xvclRleHR1cmUpIG1hdC5iYXNlVGV4dHVyZSA9IHRoaXMudGV4dHVyZXNbYmFzZUNvbG9yVGV4dHVyZS5pbmRleF0udGV4dHVyZTtcclxuXHRcdFx0XHRcdGlmIChtZXRhbGxpY1JvdWdobmVzc1RleHR1cmUpXHJcblx0XHRcdFx0XHRcdG1hdC5tZXRhbG5lc3NSb3VnaG5lc3NUZXh0dXJlID0gdGhpcy50ZXh0dXJlc1ttZXRhbGxpY1JvdWdobmVzc1RleHR1cmUuaW5kZXhdLnRleHR1cmU7XHJcblx0XHRcdFx0XHRpZiAoYmFzZUNvbG9yRmFjdG9yKVxyXG5cdFx0XHRcdFx0XHRtYXQuY29sb3IgPSBuZXcgQ29sb3IoYmFzZUNvbG9yRmFjdG9yWzBdLCBiYXNlQ29sb3JGYWN0b3JbMV0sIGJhc2VDb2xvckZhY3RvclsyXSk7XHJcblx0XHRcdFx0XHRtYXQubWV0YWxuZXNzID0gbWV0YWxsaWNGYWN0b3IgPz8gMS4wO1xyXG5cdFx0XHRcdFx0bWF0LnJvdWdobmVzcyA9IHJvdWdobmVzc0ZhY3RvciA/PyAwLjA7XHJcblx0XHRcdFx0XHRtYXQuYmFzZVNhbXBsZXIgPSBuZXcgU2FtcGxlcih7XHJcblx0XHRcdFx0XHRcdG1hZ0ZpbHRlcjogXCJsaW5lYXJcIixcclxuXHRcdFx0XHRcdFx0bWluRmlsdGVyOiBcImxpbmVhclwiLFxyXG5cdFx0XHRcdFx0XHRhZGRyZXNzTW9kZVU6IFwicmVwZWF0XCIsXHJcblx0XHRcdFx0XHRcdGFkZHJlc3NNb2RlVjogXCJyZXBlYXRcIlxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRyZXR1cm4gbWF0O1xyXG5cdFx0XHQgIH0pXHJcblx0XHRcdDogW107XHJcblx0fVxyXG5cdHByaXZhdGUgcGFyc2VBY2Nlc3NvcnMoKSB7XHJcblx0XHR0aGlzLmFjY2Vzc29ycyA9ICh0aGlzLmpzb24uYWNjZXNzb3JzIGFzIEFycmF5PGFueT4pLm1hcCgoYWNjZXNzb3IsIGluZGV4KSA9PiB7XHJcblx0XHRcdGNvbnN0IG4gPSBnbHRmRW51bVthY2Nlc3Nvci50eXBlXSBhcyBudW1iZXI7XHJcblx0XHRcdGxldCBhcnJheTtcclxuXHRcdFx0aWYgKGFjY2Vzc29yLmJ1ZmZlclZpZXcgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGFycmF5ID0gbmV3VHlwZWRBcnJheShcclxuXHRcdFx0XHRcdGFjY2Vzc29yLmNvbXBvbmVudFR5cGUsXHJcblx0XHRcdFx0XHRuZXcgQXJyYXlCdWZmZXIobiAqIGFjY2Vzc29yLmNvdW50ICogKGdsdGZFbnVtW2FjY2Vzc29yLmNvbXBvbmVudFR5cGVdIGFzIG51bWJlcikpLFxyXG5cdFx0XHRcdFx0MCxcclxuXHRcdFx0XHRcdGFjY2Vzc29yLmNvdW50ICogblxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJyYXkgPSB0aGlzLmdldEJ1ZmZlclZpZXcoYWNjZXNzb3IsIG4pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoYWNjZXNzb3Iuc3BhcnNlKSB7XHJcblx0XHRcdFx0YWNjZXNzb3Iuc3BhcnNlLmluZGljZXMuY291bnQgPSBhY2Nlc3Nvci5zcGFyc2UuY291bnQ7XHJcblx0XHRcdFx0YWNjZXNzb3Iuc3BhcnNlLnZhbHVlcy5jb3VudCA9IGFjY2Vzc29yLnNwYXJzZS5jb3VudDtcclxuXHRcdFx0XHRhY2Nlc3Nvci5zcGFyc2UudmFsdWVzLmNvbXBvbmVudFR5cGUgPSBhY2Nlc3Nvci5jb21wb25lbnRUeXBlO1xyXG5cdFx0XHRcdGNvbnN0IGluZGljZXMgPSB0aGlzLmdldEJ1ZmZlclZpZXcoYWNjZXNzb3Iuc3BhcnNlLmluZGljZXMsIDEpO1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0QnVmZmVyVmlldyhhY2Nlc3Nvci5zcGFyc2UudmFsdWVzLCBuKTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFjY2Vzc29yLnNwYXJzZS5jb3VudDsgaSArPSAxKSB7XHJcblx0XHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IG47IGogKz0gMSkge1xyXG5cdFx0XHRcdFx0XHRhcnJheVtpbmRpY2VzW2ldICogbiArIGpdID0gdmFsdWVzW2kgKiBuICsgal07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBuZXcgQWNjZXNzb3Ioe1xyXG5cdFx0XHRcdGNvbXBvbmVudFR5cGU6IDxudW1iZXI+Z2x0ZkVudW1bYWNjZXNzb3IuY29tcG9uZW50VHlwZV0sXHJcblx0XHRcdFx0Y291bnQ6IGFjY2Vzc29yLmNvdW50LFxyXG5cdFx0XHRcdHR5cGU6IG4sXHJcblx0XHRcdFx0dmFsdWVzOiBhcnJheSxcclxuXHRcdFx0XHRpZDogaW5kZXgsXHJcblx0XHRcdFx0bWluOiBhY2Nlc3Nvcj8ubWluLFxyXG5cdFx0XHRcdG1heDogYWNjZXNzb3I/Lm1heFxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRwcml2YXRlIHBhcnNlQW5pbWF0aW9ucygpIHtcclxuXHRcdHRoaXMuYW5pbWF0aW9ucyA9IHRoaXM/Lmpzb24/LmFuaW1hdGlvbnM/Lm1hcCgoZ2x0ZkFuaW1hdGlvbiwgaW5kZXgpID0+IHtcclxuXHRcdFx0Y29uc3Qgc2FtcGxlcnMgPSBnbHRmQW5pbWF0aW9uPy5zYW1wbGVycz8ubWFwKChnbHRmU2FtcGxlcikgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNhbXBsZXIgPSBuZXcgQW5pbWF0aW9uU2FtcGxlcigpO1xyXG5cdFx0XHRcdHNhbXBsZXIuZm9ybUdsdGYodGhpcywgZ2x0ZlNhbXBsZXIpO1xyXG5cdFx0XHRcdHJldHVybiBzYW1wbGVyO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0Y29uc3QgY2hhbm5lbHMgPSBnbHRmQW5pbWF0aW9uPy5jaGFubmVscz8ubWFwKChnbHRmQ2hhbm5lbCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGFuaW1hdGlvbkNoYW5uZWwgPSBuZXcgQW5pbWF0aW9uQ2hhbm5lbCgpO1xyXG5cdFx0XHRcdGFuaW1hdGlvbkNoYW5uZWwuc2FtcGxlciA9IHNhbXBsZXJzW2dsdGZDaGFubmVsLnNhbXBsZXJdO1xyXG5cdFx0XHRcdGFuaW1hdGlvbkNoYW5uZWwudGFyZ2V0ID0gbmV3IEFuaW1hdGlvbkNoYW5uZWxUYXJnZXQoXHJcblx0XHRcdFx0XHR0aGlzLm5vZGVzW2dsdGZDaGFubmVsLnRhcmdldC5ub2RlXSxcclxuXHRcdFx0XHRcdGdsdGZDaGFubmVsLnRhcmdldC5wYXRoXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRyZXR1cm4gYW5pbWF0aW9uQ2hhbm5lbDtcclxuXHRcdFx0fSk7XHJcblx0XHRcdGNvbnN0IGFuaW1hdGlvbiA9IG5ldyBBbmltYXRpb24oaW5kZXgudG9TdHJpbmcoKSwgc2FtcGxlcnMsIGNoYW5uZWxzKTtcclxuXHRcdFx0cmV0dXJuIGFuaW1hdGlvbjtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRwcml2YXRlIHBhcnNlTWVzaHMoKSB7XHJcblx0XHR0aGlzLm1lc2hlcyA9IHRoaXM/Lmpzb24/Lm1lc2hlcz8ubWFwPy4oKGdsdGZtZXNoKSA9PiB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0bmFtZTogZ2x0Zm1lc2gubmFtZSxcclxuXHRcdFx0XHRwcmltaXRpdmVzOiBnbHRmbWVzaD8ucHJpbWl0aXZlcz8ubWFwPy4oKHByaW1pdGl2ZSkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwgPVxyXG5cdFx0XHRcdFx0XHRwcmltaXRpdmUubWF0ZXJpYWwgIT09IHVuZGVmaW5lZFxyXG5cdFx0XHRcdFx0XHRcdD8gdGhpcy5tYXRlcmlhbHNbcHJpbWl0aXZlLm1hdGVyaWFsXVxyXG5cdFx0XHRcdFx0XHRcdDogeyBwYnJNZXRhbGxpY1JvdWdobmVzczoge30gfTtcclxuXHRcdFx0XHRcdGNvbnN0IGdlbyA9IHRoaXMuY3JlYXRlR2VvbWV0cnkocHJpbWl0aXZlLCBtYXRlcmlhbCk7XHJcblx0XHRcdFx0XHRjb25zdCBtZXNoID0gbmV3IE1lc2goZ2VvLCBtYXRlcmlhbCk7XHJcblx0XHRcdFx0XHRtZXNoLm5hbWUgPSBnbHRmbWVzaC5uYW1lO1xyXG5cdFx0XHRcdFx0cmV0dXJuIG1lc2g7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRwcml2YXRlIGdldFNhbXBsZXIoc2FtcGxlckpzb246IGFueSkge1xyXG5cdFx0cmV0dXJuIG5ldyBTYW1wbGVyKHtcclxuXHRcdFx0bWFnRmlsdGVyOiBnbHRmRW51bVtzYW1wbGVySnNvbi5tYWdGaWx0ZXIgfHwgOTcyOV0gYXMgR1BVRmlsdGVyTW9kZSxcclxuXHRcdFx0bWluRmlsdGVyOiBnbHRmRW51bVtzYW1wbGVySnNvbi5taW5GaWx0ZXIgfHwgOTcyOV0gYXMgR1BVRmlsdGVyTW9kZSxcclxuXHRcdFx0YWRkcmVzc01vZGVVOiBnbHRmRW51bVtzYW1wbGVySnNvbi53cmFwUyB8fCAxMDQ5N10gYXMgR1BVQWRkcmVzc01vZGUsXHJcblx0XHRcdGFkZHJlc3NNb2RlVjogZ2x0ZkVudW1bc2FtcGxlckpzb24ud3JhcFQgfHwgMTA0OTddIGFzIEdQVUFkZHJlc3NNb2RlXHJcblx0XHR9KTtcclxuXHR9XHJcblx0cHJpdmF0ZSBnZXRCdWZmZXJWaWV3KGFjY2Vzc29yOiBhbnksIG46IG51bWJlcikge1xyXG5cdFx0Y29uc3QgYnVmZmVyVmlldyA9IHRoaXMuYnVmZmVyVmlld3NbYWNjZXNzb3IuYnVmZmVyVmlld107XHJcblx0XHRjb25zdCBvZmZzZXQgPSAoYnVmZmVyVmlldy5ieXRlT2Zmc2V0IHx8IDApICsgKGFjY2Vzc29yLmJ5dGVPZmZzZXQgfHwgMCk7XHJcblx0XHRjb25zdCBzdHJpZGUgPSBNYXRoLm1heChidWZmZXJWaWV3LmJ5dGVTdHJpZGUgLyA0IHx8IDAsIG4pO1xyXG5cdFx0bGV0IGFycmF5ID0gbmV3VHlwZWRBcnJheShcclxuXHRcdFx0YWNjZXNzb3IuY29tcG9uZW50VHlwZSxcclxuXHRcdFx0dGhpcy5idWZmZXJzW2J1ZmZlclZpZXcuYnVmZmVyXSxcclxuXHRcdFx0YnVmZmVyVmlldy5idWZmZXIgPT09IDAgPyBvZmZzZXQgKyB0aGlzLmdsYk9mZnNldCA6IG9mZnNldCxcclxuXHRcdFx0KGFjY2Vzc29yLmNvdW50IC0gMSkgKiBzdHJpZGUgKyBuXHJcblx0XHQpO1xyXG5cdFx0aWYgKHN0cmlkZSA+IG4pIHtcclxuXHRcdFx0Y29uc3QgVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgYXMge1xyXG5cdFx0XHRcdG5ldyAoLi4uYXJnczogYW55KTogVHlwZWRBcnJheTtcclxuXHRcdFx0fTtcclxuXHRcdFx0Y29uc3Qgc3RyaWRlZCA9IG5ldyBUeXBlZEFycmF5Q29uc3RydWN0b3IoYWNjZXNzb3IuY291bnQgKiBuKTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGogPSAwOyBpIDwgc3RyaWRlZC5sZW5ndGg7IGkgKz0gbiwgaiArPSBzdHJpZGUpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBrID0gMDsgayA8IG47IGsgKz0gMSkge1xyXG5cdFx0XHRcdFx0c3RyaWRlZFtpICsga10gPSBhcnJheVtqICsga107XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGFycmF5ID0gc3RyaWRlZDtcclxuXHRcdH1cclxuXHRcdHJldHVybiBhcnJheTtcclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVhdGVHZW9tZXRyeShwcmltaXRpdmUsIG1hdGVyaWFsKSB7XHJcblx0XHRsZXQgaW5kaWNlcyA9IG51bGw7XHJcblx0XHRsZXQgYWNjZXNzb3IgPSBudWxsO1xyXG5cdFx0Y29uc3QgZGVmaW5lczogeyBbcHJvcDogc3RyaW5nXTogYm9vbGVhbiB8IG51bWJlciB9ID0geyBIQVNfTk9STUFMOiB0cnVlIH07XHJcblx0XHRsZXQgdmVydGV4Q291bnQ7XHJcblx0XHRhY2Nlc3NvciA9IHRoaXMuZ2V0QWNjZXNzb3IocHJpbWl0aXZlLmF0dHJpYnV0ZXMuUE9TSVRJT04pO1xyXG5cdFx0Y29uc3QgcG9zaXRpb25zID0gYWNjZXNzb3IuZ2V0QXJyYXkoKTtcclxuXHRcdHZlcnRleENvdW50ID0gYWNjZXNzb3IuY291bnQ7XHJcblx0XHQvLyBjb25zdCB7IG1heCwgbWluIH0gPSBhY2Nlc3NvcjtcclxuXHRcdC8vIGNvbnN0IGJvdW5kaW5nQm94ID0geyBtYXgsIG1pbiB9O1xyXG5cdFx0aWYgKHByaW1pdGl2ZS5pbmRpY2VzICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0YWNjZXNzb3IgPSB0aGlzLmdldEFjY2Vzc29yKHByaW1pdGl2ZS5pbmRpY2VzKTtcclxuXHRcdFx0aW5kaWNlcyA9IHRvSW5kaWNlcyhhY2Nlc3Nvci5nZXRBcnJheSgpKTtcclxuXHRcdFx0dmVydGV4Q291bnQgPSBhY2Nlc3Nvci5jb3VudDtcclxuXHRcdH1cclxuXHRcdGxldCBub3JtYWxzO1xyXG5cclxuXHRcdGlmIChwcmltaXRpdmUuYXR0cmlidXRlcy5OT1JNQUwgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRhY2Nlc3NvciA9IHRoaXMuZ2V0QWNjZXNzb3IocHJpbWl0aXZlLmF0dHJpYnV0ZXMuTk9STUFMKTtcclxuXHRcdFx0bm9ybWFscyA9IGFjY2Vzc29yLmdldEFycmF5KCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRub3JtYWxzID0gZ2VuZXJhdGVOb3JtYWxzKGluZGljZXMsIHBvc2l0aW9ucyk7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IHV2cyA9IG51bGw7XHJcblx0XHRpZiAocHJpbWl0aXZlLmF0dHJpYnV0ZXMuVEVYQ09PUkRfMCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGFjY2Vzc29yID0gdGhpcy5nZXRBY2Nlc3NvcihwcmltaXRpdmUuYXR0cmlidXRlcy5URVhDT09SRF8wKTtcclxuXHRcdFx0dXZzID0gYWNjZXNzb3IuZ2V0QXJyYXkoKTtcclxuXHRcdFx0ZGVmaW5lcy5IQVNfVVYgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHV2MXMgPSBudWxsO1xyXG5cdFx0aWYgKHByaW1pdGl2ZS5hdHRyaWJ1dGVzLlRFWENPT1JEXzEgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRhY2Nlc3NvciA9IHRoaXMuZ2V0QWNjZXNzb3IocHJpbWl0aXZlLmF0dHJpYnV0ZXMuVEVYQ09PUkRfMSk7XHJcblx0XHRcdHV2MXMgPSBhY2Nlc3Nvci5nZXRBcnJheSgpO1xyXG5cdFx0XHRkZWZpbmVzLkhBU19VVjEgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCB0YW5nZW50cyA9IG51bGw7XHJcblx0XHRpZiAocHJpbWl0aXZlLmF0dHJpYnV0ZXMuVEFOR0VOVCAhPT0gdW5kZWZpbmVkICYmIHByaW1pdGl2ZS5hdHRyaWJ1dGVzLk5PUk1BTCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGFjY2Vzc29yID0gdGhpcy5nZXRBY2Nlc3NvcihwcmltaXRpdmUuYXR0cmlidXRlcy5UQU5HRU5UKTtcclxuXHRcdFx0dGFuZ2VudHMgPSBhY2Nlc3Nvci5nZXRBcnJheSgpO1xyXG5cdFx0XHQvLyBkZWZpbmVzLkhBU19UQU5HRU5UID0gdHJ1ZTtcclxuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwubm9ybWFsVGV4dHVyZSkge1xyXG5cdFx0XHQvLyB0YW5nZW50cyA9IGdlbmVyYXRlVGFuZ2VudHMoaW5kaWNlcywgcG9zaXRpb25zLCBub3JtYWxzLCB1dnMhKTtcclxuXHRcdH1cclxuXHRcdGxldCBjb2xvcnMgPSBudWxsO1xyXG5cdFx0aWYgKHByaW1pdGl2ZS5hdHRyaWJ1dGVzLkNPTE9SXzAgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb2xvcnMgPSB0aGlzLmFjY2Vzc29yc1twcmltaXRpdmUuYXR0cmlidXRlcy5DT0xPUl8wXTtcclxuXHRcdFx0ZGVmaW5lcy5IQVNfQ09MT1IgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0bGV0IGpvaW50cyA9IG51bGw7XHJcblx0XHRpZiAocHJpbWl0aXZlLmF0dHJpYnV0ZXMuSk9JTlRTXzAgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRhY2Nlc3NvciA9IHRoaXMuZ2V0QWNjZXNzb3IocHJpbWl0aXZlLmF0dHJpYnV0ZXMuSk9JTlRTXzApO1xyXG5cdFx0XHRqb2ludHMgPSBhY2Nlc3Nvci5nZXRBcnJheSgpO1xyXG5cdFx0XHRkZWZpbmVzLkhBU19TS0lOID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGxldCB3ZWlnaHRzID0gbnVsbDtcclxuXHRcdGlmIChwcmltaXRpdmUuYXR0cmlidXRlcy5XRUlHSFRTXzAgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRhY2Nlc3NvciA9IHRoaXMuZ2V0QWNjZXNzb3IocHJpbWl0aXZlLmF0dHJpYnV0ZXMuV0VJR0hUU18wKTtcclxuXHRcdFx0d2VpZ2h0cyA9IGFjY2Vzc29yLmdldEFycmF5KCk7XHJcblx0XHR9XHJcblx0XHRjb25zdCBnZW8gPSBuZXcgR2VvbWV0cnkoeyB0eXBlOiBcInBickdlb210cnlcIiB9KTtcclxuXHRcdGlmIChpbmRpY2VzKSBnZW8uc2V0SW5kaWNlKEFycmF5LmZyb20oaW5kaWNlcykpO1xyXG5cdFx0aWYgKHBvc2l0aW9ucykgZ2VvLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcInBvc2l0aW9uXCIsIEFycmF5LmZyb20ocG9zaXRpb25zKSwgMykpO1xyXG5cdFx0aWYgKG5vcm1hbHMpIGdlby5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJub3JtYWxcIiwgQXJyYXkuZnJvbShub3JtYWxzKSwgMykpO1xyXG5cdFx0aWYgKGNvbG9ycykgZ2VvLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcImNvbG9yXCIsIEFycmF5LmZyb20oY29sb3JzKSwgMykpO1xyXG5cdFx0aWYgKHV2cykgZ2VvLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcInV2XCIsIEFycmF5LmZyb20odXZzKSwgMikpO1xyXG5cdFx0aWYgKGpvaW50cykgZ2VvLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcImpvaW50MFwiLCBBcnJheS5mcm9tKGpvaW50cyksIDQpKTtcclxuXHRcdGlmICh3ZWlnaHRzKSBnZW8uc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwid2VpZ2h0MFwiLCBBcnJheS5mcm9tKHdlaWdodHMpLCA0KSk7XHJcblx0XHRnZW8uZGVmaW5lcyA9IGRlZmluZXM7XHJcblx0XHRnZW8uY29tcHV0ZUJvdW5kaW5nU3BoZXJlKEFycmF5LmZyb20ocG9zaXRpb25zKSk7XHJcblx0XHRnZW8uY291bnQgPSB2ZXJ0ZXhDb3VudDtcclxuXHRcdHJldHVybiBnZW87XHJcblx0fVxyXG5cdHByaXZhdGUgY3JlYXRlVGV4dHVyZShzb3VyY2U6IG51bWJlcikge1xyXG5cdFx0cmV0dXJuIG5ldyBUZXh0dXJlKHtcclxuXHRcdFx0c2l6ZToge1xyXG5cdFx0XHRcdHdpZHRoOiB0aGlzLmltYWdlc1tzb3VyY2VdLndpZHRoLFxyXG5cdFx0XHRcdGhlaWdodDogdGhpcy5pbWFnZXNbc291cmNlXS5oZWlnaHQsXHJcblx0XHRcdFx0ZGVwdGg6IDFcclxuXHRcdFx0fSxcclxuXHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdHNvdXJjZTogdGhpcy5pbWFnZXNbc291cmNlXVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRmb3JtYXQ6IFwicmdiYTh1bm9ybVwiLFxyXG5cdFx0XHR1c2FnZTogR1BVVGV4dHVyZVVzYWdlLlRFWFRVUkVfQklORElORyB8IEdQVVRleHR1cmVVc2FnZS5DT1BZX0RTVCB8IEdQVVRleHR1cmVVc2FnZS5SRU5ERVJfQVRUQUNITUVOVFxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgYXN5bmMgbG9hZEltYWdlcygpIHtcclxuXHRcdGNvbnN0IGltYWdlczogQXJyYXk8SW1hZ2VCaXRtYXA+ID0gW107XHJcblx0XHRsZXQgbG9hZEV4dGVybmFsSW1hZ2VzOiBQcm9taXNlPGFueT4gPSBQcm9taXNlLnJlc29sdmUoKTtcclxuXHRcdGlmICh0aGlzLmpzb24uaW1hZ2VzKSB7XHJcblx0XHRcdGxvYWRFeHRlcm5hbEltYWdlcyA9IFByb21pc2UuYWxsKFxyXG5cdFx0XHRcdHRoaXMuanNvbi5pbWFnZXMubWFwKGFzeW5jIChpbWFnZTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoaW1hZ2UudXJpKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGltYWdlVXJsID0gaW1hZ2UudXJpLnNsaWNlKDAsIDUpID09PSBcImRhdGE6XCIgPyBpbWFnZS51cmkgOiBgJHt0aGlzLnJvb3RVcmx9LyR7aW1hZ2UudXJpfWA7XHJcblx0XHRcdFx0XHRcdGltYWdlc1tpbmRleF0gPSBhd2FpdCBmZXRjaChpbWFnZVVybClcclxuXHRcdFx0XHRcdFx0XHQudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJsb2IoKSlcclxuXHRcdFx0XHRcdFx0XHQudGhlbigoYmxvYikgPT5cclxuXHRcdFx0XHRcdFx0XHRcdGNyZWF0ZUltYWdlQml0bWFwKGJsb2IsIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sb3JTcGFjZUNvbnZlcnNpb246IFwibm9uZVwiXHJcblx0XHRcdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHRcdGxldCBsb2FkSW50ZXJuYWxJbWFnZXM6IFByb21pc2U8YW55PiA9IFByb21pc2UucmVzb2x2ZSgpO1xyXG5cdFx0aWYgKHRoaXMuanNvbi5pbWFnZXMpIHtcclxuXHRcdFx0bG9hZEludGVybmFsSW1hZ2VzID0gUHJvbWlzZS5hbGwoXHJcblx0XHRcdFx0dGhpcy5qc29uLmltYWdlcy5tYXAoYXN5bmMgKGltYWdlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuXHRcdFx0XHRcdGlmIChpbWFnZS5idWZmZXJWaWV3ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgeyBidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGggfSA9IHRoaXMuanNvbi5idWZmZXJWaWV3c1tpbWFnZS5idWZmZXJWaWV3XTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgYXJyYXkgPSBuZXcgVWludDhBcnJheShcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmJ1ZmZlcnNbYnVmZmVyXSxcclxuXHRcdFx0XHRcdFx0XHRidWZmZXIgPT09IDAgPyBieXRlT2Zmc2V0ICsgdGhpcy5nbGJPZmZzZXQgOiBieXRlT2Zmc2V0LFxyXG5cdFx0XHRcdFx0XHRcdGJ5dGVMZW5ndGhcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0bGV0IHR5cGU7XHJcblx0XHRcdFx0XHRcdGlmIChpbWFnZS5taW1lVHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdHR5cGUgPSBpbWFnZS5taW1lVHlwZTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR0eXBlID0gYXJyYXlbMF0gPT09IDB4ZmYgPyBcImltYWdlL2pwZWdcIiA6IFwiaW1hZ2UvcG5nXCI7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0Y29uc3QgYmxvYiA9IG5ldyBCbG9iKFthcnJheV0sIHsgdHlwZSB9KTtcclxuXHRcdFx0XHRcdFx0aW1hZ2VzW2luZGV4XSA9IGF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKGJsb2IsIHtcclxuXHRcdFx0XHRcdFx0XHRjb2xvclNwYWNlQ29udmVyc2lvbjogXCJub25lXCJcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRhd2FpdCBQcm9taXNlLmFsbChbbG9hZEV4dGVybmFsSW1hZ2VzLCBsb2FkSW50ZXJuYWxJbWFnZXNdKTtcclxuXHRcdHJldHVybiBpbWFnZXM7XHJcblx0fVxyXG5cdHByaXZhdGUgYXN5bmMgbG9hZEJ1ZmZlcygpIHtcclxuXHRcdGNvbnN0IGJ1ZmZlcnM6IEFycmF5PEFycmF5QnVmZmVyPiA9IFtdO1xyXG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoXHJcblx0XHRcdHRoaXMuanNvbi5idWZmZXJzLm1hcCgoYnVmZmVyOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuXHRcdFx0XHRpZiAoIWJ1ZmZlci51cmkpIHtcclxuXHRcdFx0XHRcdGlmIChpbmRleCAhPT0gMCkge1xyXG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJidWZmZXIgdXJpIHVuZGVmaW5lZFwiKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJ1ZmZlcnNbaW5kZXhdID0gdGhpcy5nbGJCaW4hO1xyXG5cdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBidWZmZXJVcmwgPSBidWZmZXIudXJpLnNsaWNlKDAsIDUpID09PSBcImRhdGE6XCIgPyBidWZmZXIudXJpIDogYCR7dGhpcy5yb290VXJsfS8ke2J1ZmZlci51cml9YDtcclxuXHRcdFx0XHRyZXR1cm4gZmV0Y2goYnVmZmVyVXJsKVxyXG5cdFx0XHRcdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5hcnJheUJ1ZmZlcigpKVxyXG5cdFx0XHRcdFx0LnRoZW4oKGFycmF5QnVmZmVyOiBBcnJheUJ1ZmZlcikgPT4ge1xyXG5cdFx0XHRcdFx0XHRidWZmZXJzW2luZGV4XSA9IGFycmF5QnVmZmVyO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdFx0cmV0dXJuIGJ1ZmZlcnM7XHJcblx0fVxyXG5cdHByaXZhdGUgcGFyc2VOb2RlcygpIHtcclxuXHRcdHRoaXMubm9kZXMgPSB0aGlzPy5qc29uPy5ub2Rlcz8ubWFwKChnbHRmTm9kZSkgPT4ge1xyXG5cdFx0XHRjb25zdCBub2RlID0gbmV3IE5vZGUoKTtcclxuXHRcdFx0dGhpcy5wYXJzZU5vZGVUUlMobm9kZSwgZ2x0Zk5vZGUpO1xyXG5cdFx0XHRpZiAoZ2x0Zk5vZGUubmFtZSkgbm9kZS5uYW1lID0gZ2x0Zk5vZGUubmFtZTtcclxuXHRcdFx0aWYgKGdsdGZOb2RlLm1lc2ggIT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0bGV0IGdsdGZTa2luID0gdW5kZWZpbmVkLFxyXG5cdFx0XHRcdFx0aXNTa2luTWVzaCA9IGZhbHNlO1xyXG5cdFx0XHRcdGlmIChnbHRmTm9kZS5za2luICE9IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0Z2x0ZlNraW4gPSB0aGlzLmpzb24uc2tpbnNbZ2x0Zk5vZGUuc2tpbl07XHJcblx0XHRcdFx0XHRpc1NraW5NZXNoID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5tZXNoZXNbZ2x0Zk5vZGUubWVzaF0ucHJpbWl0aXZlcy5mb3JFYWNoKChwcmltaXRpdmU6IE1lc2gsIGluZGV4OiBudW1iZXIsIHNvdXJjZTogQXJyYXk8TWVzaD4pID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHRlbXBQcmltaXRpdmUgPVxyXG5cdFx0XHRcdFx0XHRpc1NraW5NZXNoICYmIHByaW1pdGl2ZS50eXBlID09IFJlbmRlck9iamVjdFR5cGUuTWVzaFxyXG5cdFx0XHRcdFx0XHRcdD8gbmV3IFNLaW5NZXNoKHByaW1pdGl2ZS5nZW9tZXRyeSwgcHJpbWl0aXZlLm1hdGVyaWFsKVxyXG5cdFx0XHRcdFx0XHRcdDogcHJpbWl0aXZlO1xyXG5cdFx0XHRcdFx0aWYgKGlzU2tpbk1lc2ggJiYgcHJpbWl0aXZlLnR5cGUgPT0gUmVuZGVyT2JqZWN0VHlwZS5NZXNoKSB7XHJcblx0XHRcdFx0XHRcdHNvdXJjZVtpbmRleF0gPSB0ZW1wUHJpbWl0aXZlO1xyXG5cdFx0XHRcdFx0XHR0ZW1wUHJpbWl0aXZlLnNldFNraW5EYXRhKHtcclxuXHRcdFx0XHRcdFx0XHRpbnZlcnNlQmluZE1hdHJpY2VzOiB0aGlzLmdldEFjY2Vzc29yKGdsdGZTa2luLmludmVyc2VCaW5kTWF0cmljZXMpLmdldE1hdDRBcnJheSgpLFxyXG5cdFx0XHRcdFx0XHRcdGpvaW50czogZ2x0ZlNraW4uam9pbnRzXHJcblx0XHRcdFx0XHRcdFx0Ly8gbmFtZTogZ2x0ZlNraW4ubmFtZSxcclxuXHRcdFx0XHRcdFx0XHQvLyBza2VsZXRvbjogZ2x0ZlNraW4uc2tlbGV0b25cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRub2RlLmFkZCh0ZW1wUHJpbWl0aXZlKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gbm9kZTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRwcml2YXRlIHBhcnNlTm9kZVRSUyhub2RlOiBOb2RlLCBnbHRmTm9kZTogR0xURk5vZGVQYXJtcyk6IE5vZGUge1xyXG5cdFx0bGV0IHsgbWF0cml4LCByb3RhdGlvbiwgdHJhbnNsYXRpb24sIHNjYWxlIH0gPSBnbHRmTm9kZTtcclxuXHRcdGlmIChtYXRyaXgpIHtcclxuXHRcdFx0Y29uc3QgdGVtcE1hdHJpeDQgPSBuZXcgTWF0cml4NCgpLFxyXG5cdFx0XHRcdHRlbXBTY2FsZSA9IG5ldyBWZWN0b3IzKCksXHJcblx0XHRcdFx0dGVtcFRyYW5zbGF0aW9uID0gbmV3IFZlY3RvcjMoKSxcclxuXHRcdFx0XHR0ZW1wUm90YXRpb24gPSBuZXcgUXVhdGVybmlvbigpO1xyXG5cdFx0XHRNYXRyaXg0LmZyb21Db2x1bW5NYWpvckFycmF5KG1hdHJpeCwgdGVtcE1hdHJpeDQpO1xyXG5cdFx0XHRNYXRyaXg0LmdldFNjYWxlKHRlbXBNYXRyaXg0LCB0ZW1wU2NhbGUpO1xyXG5cdFx0XHRNYXRyaXg0LmdldFRyYW5zbGF0aW9uKHRlbXBNYXRyaXg0LCB0ZW1wVHJhbnNsYXRpb24pO1xyXG5cdFx0XHRNYXRyaXg0LmdldFJvdGF0aW9uKHRlbXBNYXRyaXg0LCB0ZW1wUm90YXRpb24pO1xyXG5cdFx0XHRyb3RhdGlvbiA9IHRlbXBSb3RhdGlvbi50b0FycmF5KCk7XHJcblx0XHRcdHRyYW5zbGF0aW9uID0gdGVtcFRyYW5zbGF0aW9uLnRvQXJyYXkoKTtcclxuXHRcdFx0c2NhbGUgPSB0ZW1wU2NhbGUudG9BcnJheSgpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHJvdGF0aW9uKSBub2RlLnF1YXRlcm5pb24uc2V0KHJvdGF0aW9uWzBdLCByb3RhdGlvblsxXSwgcm90YXRpb25bMl0sIHJvdGF0aW9uWzNdKTtcclxuXHRcdGlmICh0cmFuc2xhdGlvbikgbm9kZS5wb3NpdGlvbi5zZXQodHJhbnNsYXRpb25bMF0sIHRyYW5zbGF0aW9uWzFdLCB0cmFuc2xhdGlvblsyXSk7XHJcblx0XHRpZiAoc2NhbGUpIG5vZGUuc2NhbGUuc2V0KHNjYWxlWzBdLCBzY2FsZVsxXSwgc2NhbGVbMl0pO1xyXG5cdFx0cmV0dXJuIG5vZGU7XHJcblx0fVxyXG5cdHByaXZhdGUgbm9ybWFsaXplRGF0YSgpIHtcclxuXHRcdHRoaXM/Lm5vZGVzPy5tYXA/Ligobm9kZTogTm9kZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0dGhpcy5qc29uPy5ub2Rlc1tpbmRleF0/LmNoaWxkcmVuPy5tYXAoKG5vZGVJZDogbnVtYmVyKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY2hpbGROb2RlID0gdGhpcy5ub2Rlc1tub2RlSWRdO1xyXG5cdFx0XHRcdG5vZGUuYWRkKGNoaWxkTm9kZSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzLm1lc2hlcy5tYXAoKG1lc2gpID0+IHtcclxuXHRcdFx0bWVzaC5wcmltaXRpdmVzLm1hcCgocHJpbWl0aXZlKSA9PiB7XHJcblx0XHRcdFx0aWYgKHByaW1pdGl2ZS50eXBlID09IFJlbmRlck9iamVjdFR5cGUuU2tpbk1lc2gpXHJcblx0XHRcdFx0XHRwcmltaXRpdmUuam9pbnRzID0gcHJpbWl0aXZlLmpvaW50cy5tYXAoKGpvaW50KSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm5vZGVzWzxudW1iZXI+am9pbnRdO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkR0xURih1cmw6IHN0cmluZykge1xyXG5cdGxldCBnbHRmO1xyXG5cdGNvbnN0IGV4dCA9IHVybC5zcGxpdChcIi5cIikucG9wKCk7XHJcblx0Y29uc3Qgcm9vdFVybCA9IHVybC5zdWJzdHJpbmcoMCwgdXJsLmxhc3RJbmRleE9mKFwiL1wiKSk7XHJcblx0aWYgKGV4dCA9PT0gXCJnbHRmXCIpIHtcclxuXHRcdGNvbnN0IGpzb24gPSBhd2FpdCBmZXRjaCh1cmwpLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5qc29uKCkpO1xyXG5cdFx0Z2x0ZiA9IG5ldyBHTFRGKGpzb24sIHJvb3RVcmwsIDApO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRjb25zdCBnbGIgPSBhd2FpdCBmZXRjaCh1cmwpLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5hcnJheUJ1ZmZlcigpKTtcclxuXHRcdGNvbnN0IGpzb25MZW5ndGggPSBuZXcgVWludDMyQXJyYXkoZ2xiLCAxMiwgMSlbMF07XHJcblx0XHRjb25zdCBqc29uQ2h1bmsgPSBuZXcgVWludDhBcnJheShnbGIsIDIwLCBqc29uTGVuZ3RoKTtcclxuXHRcdGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKG5ldyBUZXh0RGVjb2RlcihcInV0Zi04XCIpLmRlY29kZShqc29uQ2h1bmspKTtcclxuXHRcdGdsdGYgPSBuZXcgR0xURihqc29uLCByb290VXJsLCAyOCArIGpzb25MZW5ndGgsIGdsYik7XHJcblx0fVxyXG5cdGF3YWl0IGdsdGYucGFyc2VEYXRhKCk7XHJcblx0cmV0dXJuIGdsdGY7XHJcbn1cclxudHlwZSBHTFRGTm9kZVBhcm1zID0ge1xyXG5cdGNoaWxkcmVuPzogbnVtYmVyW107XHJcblx0bWF0cml4PzogbnVtYmVyW107XHJcblx0c2NhbGU/OiBudW1iZXJbXTtcclxuXHRyb3RhdGlvbj86IG51bWJlcltdO1xyXG5cdHRyYW5zbGF0aW9uPzogbnVtYmVyW107XHJcbn07XHJcbiIsImltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFBiclRleHR1cmUoYnJkZiwgZGlmZnVzZSwgc3BlY3VsYXIpIHtcclxuXHRpZiAoIWJyZGYpIHJldHVybjtcclxuXHRjb25zdCBicmRmVGV4dHVyZSA9IGF3YWl0IGxvYWRUZXh0dXJlKGJyZGYpO1xyXG5cdGNvbnN0IGRpZmZ1c2VUZXh0dXJlID0gYXdhaXQgbG9hZEN1YmVUZXh0dXJlKGRpZmZ1c2UpO1xyXG5cdGNvbnN0IHNwZWN1bGFyVGV4dHVyZSA9IGF3YWl0IGxvYWRDdWJlVGV4dHVyZShzcGVjdWxhcik7XHJcblx0cmV0dXJuIHtcclxuXHRcdGJyZGZUZXh0dXJlLFxyXG5cdFx0ZGlmZnVzZVRleHR1cmUsXHJcblx0XHRzcGVjdWxhclRleHR1cmVcclxuXHR9O1xyXG59XHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQ3ViZVRleHR1cmUodXJscykge1xyXG5cdGNvbnN0IHByb21pc2VzID0gdXJscy5tYXAoKHNyYykgPT4ge1xyXG5cdFx0Y29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcclxuXHRcdGltZy5zcmMgPSBzcmM7XHJcblx0XHRyZXR1cm4gaW1nLmRlY29kZSgpLnRoZW4oKCkgPT4gY3JlYXRlSW1hZ2VCaXRtYXAoaW1nKSk7XHJcblx0fSk7XHJcblx0Y29uc3QgaW1hZ2VzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG5cdGF3YWl0IFByb21pc2UuYWxsKGltYWdlcyk7XHJcblx0Y29uc3QgZGF0YSA9IGltYWdlcy5tYXAoKGltYWdlLCBpKSA9PiB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRzb3VyY2U6IGltYWdlLFxyXG5cdFx0XHR3aWR0aDogaW1hZ2Uud2lkdGgsXHJcblx0XHRcdGhlaWdodDogaW1hZ2UuaGVpZ2h0LFxyXG5cdFx0XHRkZXB0aDogMSxcclxuXHRcdFx0eDogMCxcclxuXHRcdFx0eTogMCxcclxuXHRcdFx0ejogaVxyXG5cdFx0fTtcclxuXHR9KTtcclxuXHRyZXR1cm4gbmV3IFRleHR1cmUoe1xyXG5cdFx0c2l6ZToge1xyXG5cdFx0XHR3aWR0aDogaW1hZ2VzWzBdLndpZHRoLFxyXG5cdFx0XHRoZWlnaHQ6IGltYWdlc1swXS5oZWlnaHQsXHJcblx0XHRcdGRlcHRoOiA2XHJcblx0XHR9LFxyXG5cdFx0Zm9ybWF0OiBcInJnYmE4dW5vcm1cIixcclxuXHRcdHVzYWdlOiBHUFVUZXh0dXJlVXNhZ2UuVEVYVFVSRV9CSU5ESU5HIHwgR1BVVGV4dHVyZVVzYWdlLkNPUFlfRFNUIHwgR1BVVGV4dHVyZVVzYWdlLlJFTkRFUl9BVFRBQ0hNRU5ULFxyXG5cdFx0ZGF0YSxcclxuXHRcdHZpZXdGb3JtYXRzOiBcImN1YmVcIixcclxuXHRcdG1pcExldmVsQ291bnQ6IDYsXHJcblx0XHRuZWVkTWlwTWFwOiB0cnVlXHJcblx0fSk7XHJcbn1cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRUZXh0dXJlKHVybCkge1xyXG5cdGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XHJcblx0aW1nLnNyYyA9IHVybDtcclxuXHRhd2FpdCBpbWcuZGVjb2RlKCk7XHJcblx0Y29uc3QgaW1hZ2VCaXRtYXAgPSBhd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChpbWcpO1xyXG5cdGNvbnN0IGJhc2VUZXh0dXJlID0gbmV3IFRleHR1cmUoe1xyXG5cdFx0c2l6ZTogeyB3aWR0aDogaW1hZ2VCaXRtYXAud2lkdGgsIGhlaWdodDogaW1hZ2VCaXRtYXAuaGVpZ2h0LCBkZXB0aDogMSB9LFxyXG5cdFx0ZGF0YToge1xyXG5cdFx0XHRzb3VyY2U6IGltYWdlQml0bWFwXHJcblx0XHR9LFxyXG5cdFx0Zm9ybWF0OiBcInJnYmE4dW5vcm1cIlxyXG5cdH0pO1xyXG5cdHJldHVybiBiYXNlVGV4dHVyZTtcclxufVxyXG4iLCJpbXBvcnQgR01hdGggZnJvbSBcIi4vTWF0aC5qc1wiO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4vVmVjdG9yMy5qc1wiO1xuLy8gZnJvbSB0aHJlZS5qc1xuY2xhc3MgU3BoZXJpY2FsIHtcblx0cmFkaXVzOiBudW1iZXI7XG5cdHBoaTogbnVtYmVyO1xuXHR0aGV0YTogbnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yKHJhZGl1cyA9IDEsIHBoaSA9IDAsIHRoZXRhID0gMCkge1xuXHRcdHRoaXMucmFkaXVzID0gcmFkaXVzO1xuXHRcdHRoaXMucGhpID0gcGhpOyAvLyBwb2xhciBhbmdsZVxuXHRcdHRoaXMudGhldGEgPSB0aGV0YTsgLy8gYXppbXV0aGFsIGFuZ2xlXG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRzZXQocmFkaXVzOiBudW1iZXIsIHBoaTogbnVtYmVyLCB0aGV0YTogbnVtYmVyKTogU3BoZXJpY2FsIHtcblx0XHR0aGlzLnJhZGl1cyA9IHJhZGl1cztcblx0XHR0aGlzLnBoaSA9IHBoaTtcblx0XHR0aGlzLnRoZXRhID0gdGhldGE7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRjb3B5KG90aGVyOiBTcGhlcmljYWwpOiBTcGhlcmljYWwge1xuXHRcdHRoaXMucmFkaXVzID0gb3RoZXIucmFkaXVzO1xuXHRcdHRoaXMucGhpID0gb3RoZXIucGhpO1xuXHRcdHRoaXMudGhldGEgPSBvdGhlci50aGV0YTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdC8vIHJlc3RyaWN0IHBoaSB0byBiZSBiZXR3ZWVuIEVQUyBhbmQgUEktRVBTXG5cdG1ha2VTYWZlKCk6IFNwaGVyaWNhbCB7XG5cdFx0Y29uc3QgRVBTID0gMC4wMDAwMDE7XG5cdFx0dGhpcy5waGkgPSBNYXRoLm1heChFUFMsIE1hdGgubWluKE1hdGguUEkgLSBFUFMsIHRoaXMucGhpKSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21WZWN0b3IzKHY6IFZlY3RvcjMpOiBTcGhlcmljYWwge1xuXHRcdHJldHVybiB0aGlzLnNldEZyb21DYXJ0ZXNpYW5Db29yZHModi54LCB2LnksIHYueik7XG5cdH1cblx0c2V0RnJvbUNhcnRlc2lhbkNvb3Jkcyh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKTogU3BoZXJpY2FsIHtcblx0XHR0aGlzLnJhZGl1cyA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopO1xuXG5cdFx0aWYgKHRoaXMucmFkaXVzID09PSAwKSB7XG5cdFx0XHR0aGlzLnRoZXRhID0gMDtcblx0XHRcdHRoaXMucGhpID0gMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy50aGV0YSA9IE1hdGguYXRhbjIoeCwgeik7XG5cdFx0XHR0aGlzLnBoaSA9IE1hdGguYWNvcyhHTWF0aC5jbGFtcCh5IC8gdGhpcy5yYWRpdXMsIC0xLCAxKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbG9uZSgpOiBTcGhlcmljYWwge1xuXHRcdHJldHVybiBuZXcgU3BoZXJpY2FsKHRoaXMucmFkaXVzLCB0aGlzLnBoaSwgdGhpcy50aGV0YSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgU3BoZXJpY2FsIH07XG4iLCJpbXBvcnQgeyBFdmVudERpc3BhdGNoZXIgfSBmcm9tIFwiLi4vY29yZS9FdmVudERpc3BhdGNoZXJcIjtcclxuaW1wb3J0IHsgUXVhdGVybmlvbiB9IGZyb20gXCIuLi9tYXRoL1F1YXRlcm5pb25cIjtcclxuaW1wb3J0IHsgU3BoZXJpY2FsIH0gZnJvbSBcIi4uL21hdGgvU3BoZXJpY2FsXCI7XHJcbmltcG9ydCBWZWN0b3IyIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjJcIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xyXG4vL2Zyb20gdGhyZWUuanNcclxuXHJcbmNvbnN0IF9jaGFuZ2VFdmVudCA9IHsgdHlwZTogXCJjaGFuZ2VcIiB9O1xyXG5jb25zdCBfc3RhcnRFdmVudCA9IHsgdHlwZTogXCJzdGFydFwiIH07XHJcbmNvbnN0IF9lbmRFdmVudCA9IHsgdHlwZTogXCJlbmRcIiB9O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3JiaXRDb250cm9sIGV4dGVuZHMgRXZlbnREaXNwYXRjaGVyIHtcclxuICBkb21FbGVtZW50OiBhbnk7XHJcbiAgb2JqZWN0OiBhbnk7XHJcbiAgZW5hYmxlZDogYm9vbGVhbjtcclxuICB0YXJnZXQ6IGFueTtcclxuICBtaW5EaXN0YW5jZTogbnVtYmVyO1xyXG4gIG1heERpc3RhbmNlOiBudW1iZXI7XHJcbiAgbWluWm9vbTogbnVtYmVyO1xyXG4gIG1heFpvb206IG51bWJlcjtcclxuICBtaW5Qb2xhckFuZ2xlOiBudW1iZXI7XHJcbiAgbWF4UG9sYXJBbmdsZTogbnVtYmVyO1xyXG4gIG1pbkF6aW11dGhBbmdsZTogbnVtYmVyO1xyXG4gIG1heEF6aW11dGhBbmdsZTogbnVtYmVyO1xyXG4gIGVuYWJsZURhbXBpbmc6IGJvb2xlYW47XHJcbiAgZGFtcGluZ0ZhY3RvcjogbnVtYmVyO1xyXG4gIGVuYWJsZVpvb206IGJvb2xlYW47XHJcbiAgem9vbVNwZWVkOiBudW1iZXI7XHJcbiAgZW5hYmxlUm90YXRlOiBib29sZWFuO1xyXG4gIHJvdGF0ZVNwZWVkOiBudW1iZXI7XHJcbiAgZW5hYmxlUGFuOiBib29sZWFuO1xyXG4gIHBhblNwZWVkOiBudW1iZXI7XHJcbiAgc2NyZWVuU3BhY2VQYW5uaW5nOiBib29sZWFuO1xyXG4gIGtleVBhblNwZWVkOiBudW1iZXI7XHJcbiAgYXV0b1JvdGF0ZTogYm9vbGVhbjtcclxuICBhdXRvUm90YXRlU3BlZWQ6IG51bWJlcjtcclxuICBrZXlzOiB7IExFRlQ6IHN0cmluZzsgVVA6IHN0cmluZzsgUklHSFQ6IHN0cmluZzsgQk9UVE9NOiBzdHJpbmcgfTtcclxuICBtb3VzZUJ1dHRvbnM6IHsgTEVGVDogYW55OyBNSURETEU6IGFueTsgUklHSFQ6IGFueSB9O1xyXG4gIHRvdWNoZXM6IHsgT05FOiBhbnk7IFRXTzogYW55IH07XHJcbiAgdGFyZ2V0MDogYW55O1xyXG4gIHBvc2l0aW9uMDogYW55O1xyXG4gIHpvb20wOiBhbnk7XHJcbiAgcHJpdmF0ZSBfZG9tRWxlbWVudEtleUV2ZW50czogYW55O1xyXG4gIHNwaGVyaWNhbDogYW55O1xyXG4gIG9uUG9pbnRlck1vdmU6IChldmVudDogYW55KSA9PiB2b2lkO1xyXG4gIG9uUG9pbnRlclVwOiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcclxuICBvbkNvbnRleHRNZW51OiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcclxuICBvblBvaW50ZXJEb3duOiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcclxuICBvbk1vdXNlV2hlZWw6IChldmVudDogYW55KSA9PiB2b2lkO1xyXG4gIG9uS2V5RG93bjogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XHJcbiAgZ2V0QXV0b1JvdGF0aW9uQW5nbGU6ICgpID0+IG51bWJlcjtcclxuICB1cGRhdGU6ICgpID0+IGJvb2xlYW47XHJcbiAgY29uc3RydWN0b3Iob2JqZWN0LCBkb21FbGVtZW50KSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICAgIGlmIChkb21FbGVtZW50ID09PSB1bmRlZmluZWQpXHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAnT3JiaXRDb250cm9sczogVGhlIHNlY29uZCBwYXJhbWV0ZXIgXCJkb21FbGVtZW50XCIgaXMgbm93IG1hbmRhdG9yeS4nXHJcbiAgICAgICk7XHJcbiAgICBpZiAoZG9tRWxlbWVudCA9PT0gZG9jdW1lbnQpXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgJ09yYml0Q29udHJvbHM6IFwiZG9jdW1lbnRcIiBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIHRhcmdldCBcImRvbUVsZW1lbnRcIi4gUGxlYXNlIHVzZSBcInJlbmRlcmVyLmRvbUVsZW1lbnRcIiBpbnN0ZWFkLidcclxuICAgICAgKTtcclxuXHJcbiAgICB0aGlzLm9iamVjdCA9IG9iamVjdDtcclxuICAgIHRoaXMuZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQ7XHJcbiAgICB0aGlzLmRvbUVsZW1lbnQuc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjsgLy8gZGlzYWJsZSB0b3VjaCBzY3JvbGxcclxuXHJcbiAgICAvLyBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSB0aGlzIGNvbnRyb2xcclxuICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcblxyXG4gICAgLy8gXCJ0YXJnZXRcIiBzZXRzIHRoZSBsb2NhdGlvbiBvZiBmb2N1cywgd2hlcmUgdGhlIG9iamVjdCBvcmJpdHMgYXJvdW5kXHJcbiAgICB0aGlzLnRhcmdldCA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgLy8gSG93IGZhciB5b3UgY2FuIGRvbGx5IGluIGFuZCBvdXQgKCBQZXJzcGVjdGl2ZUNhbWVyYSBvbmx5IClcclxuICAgIHRoaXMubWluRGlzdGFuY2UgPSAwO1xyXG4gICAgdGhpcy5tYXhEaXN0YW5jZSA9IEluZmluaXR5O1xyXG5cclxuICAgIC8vIEhvdyBmYXIgeW91IGNhbiB6b29tIGluIGFuZCBvdXQgKCBPcnRob2dyYXBoaWNDYW1lcmEgb25seSApXHJcbiAgICB0aGlzLm1pblpvb20gPSAwO1xyXG4gICAgdGhpcy5tYXhab29tID0gSW5maW5pdHk7XHJcblxyXG4gICAgLy8gSG93IGZhciB5b3UgY2FuIG9yYml0IHZlcnRpY2FsbHksIHVwcGVyIGFuZCBsb3dlciBsaW1pdHMuXHJcbiAgICAvLyBSYW5nZSBpcyAwIHRvIE1hdGguUEkgcmFkaWFucy5cclxuICAgIHRoaXMubWluUG9sYXJBbmdsZSA9IDA7IC8vIHJhZGlhbnNcclxuICAgIHRoaXMubWF4UG9sYXJBbmdsZSA9IE1hdGguUEk7IC8vIHJhZGlhbnNcclxuXHJcbiAgICAvLyBIb3cgZmFyIHlvdSBjYW4gb3JiaXQgaG9yaXpvbnRhbGx5LCB1cHBlciBhbmQgbG93ZXIgbGltaXRzLlxyXG4gICAgLy8gSWYgc2V0LCB0aGUgaW50ZXJ2YWwgWyBtaW4sIG1heCBdIG11c3QgYmUgYSBzdWItaW50ZXJ2YWwgb2YgWyAtIDIgUEksIDIgUEkgXSwgd2l0aCAoIG1heCAtIG1pbiA8IDIgUEkgKVxyXG4gICAgdGhpcy5taW5BemltdXRoQW5nbGUgPSAtSW5maW5pdHk7IC8vIHJhZGlhbnNcclxuICAgIHRoaXMubWF4QXppbXV0aEFuZ2xlID0gSW5maW5pdHk7IC8vIHJhZGlhbnNcclxuXHJcbiAgICAvLyBTZXQgdG8gdHJ1ZSB0byBlbmFibGUgZGFtcGluZyAoaW5lcnRpYSlcclxuICAgIC8vIElmIGRhbXBpbmcgaXMgZW5hYmxlZCwgeW91IG11c3QgY2FsbCBjb250cm9scy51cGRhdGUoKSBpbiB5b3VyIGFuaW1hdGlvbiBsb29wXHJcbiAgICB0aGlzLmVuYWJsZURhbXBpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuZGFtcGluZ0ZhY3RvciA9IDAuMDU7XHJcblxyXG4gICAgLy8gVGhpcyBvcHRpb24gYWN0dWFsbHkgZW5hYmxlcyBkb2xseWluZyBpbiBhbmQgb3V0OyBsZWZ0IGFzIFwiem9vbVwiIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cclxuICAgIC8vIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHpvb21pbmdcclxuICAgIHRoaXMuZW5hYmxlWm9vbSA9IHRydWU7XHJcbiAgICB0aGlzLnpvb21TcGVlZCA9IDEuMDtcclxuXHJcbiAgICAvLyBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSByb3RhdGluZ1xyXG4gICAgdGhpcy5lbmFibGVSb3RhdGUgPSB0cnVlO1xyXG4gICAgdGhpcy5yb3RhdGVTcGVlZCA9IDEuMDtcclxuXHJcbiAgICAvLyBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBwYW5uaW5nXHJcbiAgICB0aGlzLmVuYWJsZVBhbiA9IHRydWU7XHJcbiAgICB0aGlzLnBhblNwZWVkID0gMS4wO1xyXG4gICAgdGhpcy5zY3JlZW5TcGFjZVBhbm5pbmcgPSBmYWxzZTsgLy8gaWYgZmFsc2UsIHBhbiBvcnRob2dvbmFsIHRvIHdvcmxkLXNwYWNlIGRpcmVjdGlvbiBjYW1lcmEudXBcclxuICAgIHRoaXMua2V5UGFuU3BlZWQgPSA3LjA7IC8vIHBpeGVscyBtb3ZlZCBwZXIgYXJyb3cga2V5IHB1c2hcclxuXHJcbiAgICAvLyBTZXQgdG8gdHJ1ZSB0byBhdXRvbWF0aWNhbGx5IHJvdGF0ZSBhcm91bmQgdGhlIHRhcmdldFxyXG4gICAgLy8gSWYgYXV0by1yb3RhdGUgaXMgZW5hYmxlZCwgeW91IG11c3QgY2FsbCBjb250cm9scy51cGRhdGUoKSBpbiB5b3VyIGFuaW1hdGlvbiBsb29wXHJcbiAgICB0aGlzLmF1dG9Sb3RhdGUgPSBmYWxzZTtcclxuICAgIHRoaXMuYXV0b1JvdGF0ZVNwZWVkID0gMi4wOyAvLyAzMCBzZWNvbmRzIHBlciBvcmJpdCB3aGVuIGZwcyBpcyA2MFxyXG5cclxuICAgIC8vIFRoZSBmb3VyIGFycm93IGtleXNcclxuICAgIHRoaXMua2V5cyA9IHtcclxuICAgICAgTEVGVDogXCJBcnJvd0xlZnRcIixcclxuICAgICAgVVA6IFwiQXJyb3dVcFwiLFxyXG4gICAgICBSSUdIVDogXCJBcnJvd1JpZ2h0XCIsXHJcbiAgICAgIEJPVFRPTTogXCJBcnJvd0Rvd25cIixcclxuICAgIH07XHJcblxyXG4gICAgLy8gTW91c2UgYnV0dG9uc1xyXG4gICAgdGhpcy5tb3VzZUJ1dHRvbnMgPSB7XHJcbiAgICAgIExFRlQ6IE1PVVNFLlJPVEFURSxcclxuICAgICAgTUlERExFOiBNT1VTRS5ET0xMWSxcclxuICAgICAgUklHSFQ6IE1PVVNFLlBBTixcclxuICAgIH07XHJcblxyXG4gICAgLy8gVG91Y2ggZmluZ2Vyc1xyXG4gICAgdGhpcy50b3VjaGVzID0geyBPTkU6IFRPVUNILlJPVEFURSwgVFdPOiBUT1VDSC5ET0xMWV9QQU4gfTtcclxuXHJcbiAgICAvLyBmb3IgcmVzZXRcclxuICAgIHRoaXMudGFyZ2V0MCA9IHRoaXMudGFyZ2V0LmNsb25lKCk7XHJcbiAgICB0aGlzLnBvc2l0aW9uMCA9IHRoaXMub2JqZWN0LnBvc2l0aW9uLmNsb25lKCk7XHJcbiAgICB0aGlzLnpvb20wID0gdGhpcy5vYmplY3Quem9vbTtcclxuXHJcbiAgICAvLyB0aGUgdGFyZ2V0IERPTSBlbGVtZW50IGZvciBrZXkgZXZlbnRzXHJcbiAgICB0aGlzLl9kb21FbGVtZW50S2V5RXZlbnRzID0gbnVsbDtcclxuXHJcbiAgICAvL1xyXG4gICAgLy8gcHVibGljIG1ldGhvZHNcclxuICAgIC8vXHJcbiAgICAvLyB0aGlzIG1ldGhvZCBpcyBleHBvc2VkLCBidXQgcGVyaGFwcyBpdCB3b3VsZCBiZSBiZXR0ZXIgaWYgd2UgY2FuIG1ha2UgaXQgcHJpdmF0ZS4uLlxyXG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XHJcbiAgICB0aGlzLnVwZGF0ZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGNvbnN0IG9mZnNldCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgIC8vIHNvIGNhbWVyYS51cCBpcyB0aGUgb3JiaXQgYXhpc1xyXG4gICAgICBjb25zdCBxdWF0ID0gbmV3IFF1YXRlcm5pb24oKS5zZXRGcm9tVW5pdFZlY3RvcnMoXHJcbiAgICAgICAgdGhhdC5vYmplY3QudXAsXHJcbiAgICAgICAgbmV3IFZlY3RvcjMoMCwgMSwgMClcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgcXVhdEludmVyc2UgPSBxdWF0LmNsb25lKCkuaW52ZXJ0KCk7XHJcblxyXG4gICAgICBjb25zdCBsYXN0UG9zaXRpb24gPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICBjb25zdCBsYXN0UXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7XHJcblxyXG4gICAgICBjb25zdCB0d29QSSA9IDIgKiBNYXRoLlBJO1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhhdC5vYmplY3QucG9zaXRpb247XHJcblxyXG4gICAgICAgIG9mZnNldC5jb3B5KHBvc2l0aW9uKS5zdWJ0cmFjdCh0aGF0LnRhcmdldCk7XHJcblxyXG4gICAgICAgIC8vIHJvdGF0ZSBvZmZzZXQgdG8gXCJ5LWF4aXMtaXMtdXBcIiBzcGFjZVxyXG4gICAgICAgIG9mZnNldC5hcHBseVF1YXRlcm5pb24ocXVhdCk7XHJcblxyXG4gICAgICAgIC8vIGFuZ2xlIGZyb20gei1heGlzIGFyb3VuZCB5LWF4aXNcclxuICAgICAgICBzcGhlcmljYWwuc2V0RnJvbVZlY3RvcjMob2Zmc2V0KTtcclxuXHJcbiAgICAgICAgaWYgKHRoYXQuYXV0b1JvdGF0ZSAmJiBzdGF0ZSA9PT0gU1RBVEUuTk9ORSkge1xyXG4gICAgICAgICAgcm90YXRlTGVmdCh0aGF0LmdldEF1dG9Sb3RhdGlvbkFuZ2xlKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoYXQuZW5hYmxlRGFtcGluZykge1xyXG4gICAgICAgICAgc3BoZXJpY2FsLnRoZXRhICs9IHNwaGVyaWNhbERlbHRhLnRoZXRhICogdGhhdC5kYW1waW5nRmFjdG9yO1xyXG4gICAgICAgICAgc3BoZXJpY2FsLnBoaSArPSBzcGhlcmljYWxEZWx0YS5waGkgKiB0aGF0LmRhbXBpbmdGYWN0b3I7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNwaGVyaWNhbC50aGV0YSArPSBzcGhlcmljYWxEZWx0YS50aGV0YTtcclxuICAgICAgICAgIHNwaGVyaWNhbC5waGkgKz0gc3BoZXJpY2FsRGVsdGEucGhpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVzdHJpY3QgdGhldGEgdG8gYmUgYmV0d2VlbiBkZXNpcmVkIGxpbWl0c1xyXG5cclxuICAgICAgICBsZXQgbWluID0gdGhhdC5taW5BemltdXRoQW5nbGU7XHJcbiAgICAgICAgbGV0IG1heCA9IHRoYXQubWF4QXppbXV0aEFuZ2xlO1xyXG5cclxuICAgICAgICBpZiAoaXNGaW5pdGUobWluKSAmJiBpc0Zpbml0ZShtYXgpKSB7XHJcbiAgICAgICAgICBpZiAobWluIDwgLU1hdGguUEkpIG1pbiArPSB0d29QSTtcclxuICAgICAgICAgIGVsc2UgaWYgKG1pbiA+IE1hdGguUEkpIG1pbiAtPSB0d29QSTtcclxuXHJcbiAgICAgICAgICBpZiAobWF4IDwgLU1hdGguUEkpIG1heCArPSB0d29QSTtcclxuICAgICAgICAgIGVsc2UgaWYgKG1heCA+IE1hdGguUEkpIG1heCAtPSB0d29QSTtcclxuXHJcbiAgICAgICAgICBpZiAobWluIDw9IG1heCkge1xyXG4gICAgICAgICAgICBzcGhlcmljYWwudGhldGEgPSBNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgc3BoZXJpY2FsLnRoZXRhKSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzcGhlcmljYWwudGhldGEgPVxyXG4gICAgICAgICAgICAgIHNwaGVyaWNhbC50aGV0YSA+IChtaW4gKyBtYXgpIC8gMlxyXG4gICAgICAgICAgICAgICAgPyBNYXRoLm1heChtaW4sIHNwaGVyaWNhbC50aGV0YSlcclxuICAgICAgICAgICAgICAgIDogTWF0aC5taW4obWF4LCBzcGhlcmljYWwudGhldGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVzdHJpY3QgcGhpIHRvIGJlIGJldHdlZW4gZGVzaXJlZCBsaW1pdHNcclxuICAgICAgICBzcGhlcmljYWwucGhpID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICB0aGF0Lm1pblBvbGFyQW5nbGUsXHJcbiAgICAgICAgICBNYXRoLm1pbih0aGF0Lm1heFBvbGFyQW5nbGUsIHNwaGVyaWNhbC5waGkpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgc3BoZXJpY2FsLm1ha2VTYWZlKCk7XHJcblxyXG4gICAgICAgIHNwaGVyaWNhbC5yYWRpdXMgKj0gc2NhbGU7XHJcblxyXG4gICAgICAgIC8vIHJlc3RyaWN0IHJhZGl1cyB0byBiZSBiZXR3ZWVuIGRlc2lyZWQgbGltaXRzXHJcbiAgICAgICAgc3BoZXJpY2FsLnJhZGl1cyA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgdGhhdC5taW5EaXN0YW5jZSxcclxuICAgICAgICAgIE1hdGgubWluKHRoYXQubWF4RGlzdGFuY2UsIHNwaGVyaWNhbC5yYWRpdXMpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gbW92ZSB0YXJnZXQgdG8gcGFubmVkIGxvY2F0aW9uXHJcblxyXG4gICAgICAgIGlmICh0aGF0LmVuYWJsZURhbXBpbmcgPT09IHRydWUpIHtcclxuICAgICAgICAgIHRoYXQudGFyZ2V0LmFkZFNjYWxlZFZlY3RvcihwYW5PZmZzZXQsIHRoYXQuZGFtcGluZ0ZhY3Rvcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoYXQudGFyZ2V0LmFkZChwYW5PZmZzZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBWZWN0b3IzLmZyb21TcGhlcmljYWwoc3BoZXJpY2FsLCBvZmZzZXQpO1xyXG4gICAgICAgIC8vIHJvdGF0ZSBvZmZzZXQgYmFjayB0byBcImNhbWVyYS11cC12ZWN0b3ItaXMtdXBcIiBzcGFjZVxyXG4gICAgICAgIG9mZnNldC5hcHBseVF1YXRlcm5pb24ocXVhdEludmVyc2UpO1xyXG5cclxuICAgICAgICBwb3NpdGlvbi5jb3B5KHRoYXQudGFyZ2V0KS5hZGQob2Zmc2V0KTtcclxuXHJcbiAgICAgICAgdGhhdC5vYmplY3QubG9va0F0KHRoYXQudGFyZ2V0LngsIHRoYXQudGFyZ2V0LnksIHRoYXQudGFyZ2V0LnopO1xyXG5cclxuICAgICAgICBpZiAodGhhdC5lbmFibGVEYW1waW5nID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBzcGhlcmljYWxEZWx0YS50aGV0YSAqPSAxIC0gdGhhdC5kYW1waW5nRmFjdG9yO1xyXG4gICAgICAgICAgc3BoZXJpY2FsRGVsdGEucGhpICo9IDEgLSB0aGF0LmRhbXBpbmdGYWN0b3I7XHJcblxyXG4gICAgICAgICAgVmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKFxyXG4gICAgICAgICAgICBwYW5PZmZzZXQsXHJcbiAgICAgICAgICAgIDEgLSB0aGF0LmRhbXBpbmdGYWN0b3IsXHJcbiAgICAgICAgICAgIHBhbk9mZnNldFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIC8vIHBhbk9mZnNldC5tdWx0aXBseVNjYWxhciggMSAtIHRoaXMuZGFtcGluZ0ZhY3RvciApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzcGhlcmljYWxEZWx0YS5zZXQoMCwgMCwgMCk7XHJcblxyXG4gICAgICAgICAgcGFuT2Zmc2V0LnNldCgwLCAwLCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNjYWxlID0gMTtcclxuXHJcbiAgICAgICAgLy8gdXBkYXRlIGNvbmRpdGlvbiBpczpcclxuICAgICAgICAvLyBtaW4oY2FtZXJhIGRpc3BsYWNlbWVudCwgY2FtZXJhIHJvdGF0aW9uIGluIHJhZGlhbnMpXjIgPiBFUFNcclxuICAgICAgICAvLyB1c2luZyBzbWFsbC1hbmdsZSBhcHByb3hpbWF0aW9uIGNvcyh4LzIpID0gMSAtIHheMiAvIDhcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgem9vbUNoYW5nZWQgfHxcclxuICAgICAgICAgIFZlY3RvcjMuZGlzdGFuY2VTcXVhcmVkKGxhc3RQb3NpdGlvbiwgdGhhdC5vYmplY3QucG9zaXRpb24pID4gRVBTIHx8XHJcbiAgICAgICAgICA4ICogKDEgLSBsYXN0UXVhdGVybmlvbi5kb3QodGhhdC5vYmplY3QucXVhdGVybmlvbikpID4gRVBTXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGF0LmRpc3BhdGNoRXZlbnQoX2NoYW5nZUV2ZW50KTtcclxuXHJcbiAgICAgICAgICAvL2xhc3RQb3NpdGlvbi5jb3B5KCB0aGlzLm9iamVjdC5wb3NpdGlvbiApO1xyXG4gICAgICAgICAgVmVjdG9yMy5jbG9uZSh0aGF0Lm9iamVjdC5wb3NpdGlvbiwgbGFzdFBvc2l0aW9uKTtcclxuICAgICAgICAgIFF1YXRlcm5pb24uY2xvbmUodGhhdC5vYmplY3QucXVhdGVybmlvbiwgbGFzdFF1YXRlcm5pb24pO1xyXG4gICAgICAgICAgLy9sYXN0UXVhdGVybmlvbi5jb3B5KCB0aGlzLm9iamVjdC5xdWF0ZXJuaW9uICk7XHJcbiAgICAgICAgICB6b29tQ2hhbmdlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuICBnZXRQb2xhckFuZ2xlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3BoZXJpY2FsLnBoaTtcclxuICB9XHJcbiAgZ2V0QXppbXV0aGFsQW5nbGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zcGhlcmljYWwudGhldGE7XHJcbiAgfVxyXG5cclxuICBnZXREaXN0YW5jZSgpIHtcclxuICAgIHJldHVybiBWZWN0b3IzLmRpc3RhbmNlKHRoaXMub2JqZWN0LnBvc2l0aW9uLCB0aGlzLnRhcmdldCk7XHJcbiAgfVxyXG5cclxuICBsaXN0ZW5Ub0tleUV2ZW50cyhkb21FbGVtZW50KSB7XHJcbiAgICBkb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMub25LZXlEb3duKTtcclxuICAgIHRoaXMuX2RvbUVsZW1lbnRLZXlFdmVudHMgPSBkb21FbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgc2F2ZVN0YXRlKCkge1xyXG4gICAgVmVjdG9yMy5jbG9uZSh0aGlzLnRhcmdldCwgdGhpcy50YXJnZXQwKTtcclxuICAgIC8vdGhpcy50YXJnZXQwLmNvcHkoIHRoaXMudGFyZ2V0ICk7XHJcbiAgICBWZWN0b3IzLmNsb25lKHRoaXMub2JqZWN0LnBvc2l0aW9uLCB0aGlzLnBvc2l0aW9uMCk7XHJcbiAgICAvL3RoaXMucG9zaXRpb24wLmNvcHkoIHRoaXMub2JqZWN0LnBvc2l0aW9uICk7XHJcbiAgICB0aGlzLnpvb20wID0gdGhpcy5vYmplY3Quem9vbTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgVmVjdG9yMy5jbG9uZSh0aGlzLnRhcmdldDAsIHRoaXMudGFyZ2V0KTtcclxuICAgIC8vdGhpcy50YXJnZXQuY29weSggdGhpcy50YXJnZXQwICk7XHJcbiAgICBWZWN0b3IzLmNsb25lKHRoaXMucG9zaXRpb24wLCB0aGlzLm9iamVjdC5wb3NpdGlvbik7XHJcbiAgICAvL3RoaXMub2JqZWN0LnBvc2l0aW9uLmNvcHkoIHRoaXMucG9zaXRpb24wICk7XHJcbiAgICB0aGlzLm9iamVjdC56b29tID0gdGhpcy56b29tMDtcclxuXHJcbiAgICB0aGlzLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoX2NoYW5nZUV2ZW50KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIHN0YXRlID0gU1RBVEUuTk9ORTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdCgpIHtcclxuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xyXG4gICAgY29uc3QgcGFuTGVmdCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGNvbnN0IHYgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gcGFuTGVmdChkaXN0YW5jZSwgb2JqZWN0TWF0cml4KSB7XHJcbiAgICAgICAgdi5zZXRGcm9tTWF0cml4Q29sdW1uKG9iamVjdE1hdHJpeCwgMCk7IC8vIGdldCBYIGNvbHVtbiBvZiBvYmplY3RNYXRyaXhcclxuICAgICAgICB2Lm11bHRpcGx5QnlTY2FsYXIoLWRpc3RhbmNlKTtcclxuICAgICAgICBwYW5PZmZzZXQuYWRkKHYpO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuICAgIGNvbnN0IHBhblVwID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgY29uc3QgcGFuVXBWID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhblVwKGRpc3RhbmNlLCBvYmplY3RNYXRyaXgpIHtcclxuICAgICAgICBpZiAodGhhdC5zY3JlZW5TcGFjZVBhbm5pbmcgPT09IHRydWUpIHtcclxuICAgICAgICAgIHBhblVwVi5zZXRGcm9tTWF0cml4Q29sdW1uKG9iamVjdE1hdHJpeCwgMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBhblVwVi5zZXRGcm9tTWF0cml4Q29sdW1uKG9iamVjdE1hdHJpeCwgMCk7XHJcbiAgICAgICAgICAvL3BhblVwVi5jcm9zc1ZlY3RvcnMoIHRoaXMub2JqZWN0LnVwLCBwYW5VcFYgKTtcclxuICAgICAgICAgIFZlY3RvcjMuY3Jvc3ModGhhdC5vYmplY3QudXAsIHBhblVwViwgcGFuVXBWKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBhblVwVi5tdWx0aXBseUJ5U2NhbGFyKGRpc3RhbmNlKTtcclxuXHJcbiAgICAgICAgcGFuT2Zmc2V0LmFkZChwYW5VcFYpO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuICAgIC8vIGRlbHRhWCBhbmQgZGVsdGFZIGFyZSBpbiBwaXhlbHM7IHJpZ2h0IGFuZCBkb3duIGFyZSBwb3NpdGl2ZVxyXG4gICAgY29uc3QgcGFuID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgY29uc3Qgb2Zmc2V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhbihkZWx0YVgsIGRlbHRhWSkge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGF0LmRvbUVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKHRoYXQub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmEpIHtcclxuICAgICAgICAgIC8vIHBlcnNwZWN0aXZlXHJcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoYXQub2JqZWN0LnBvc2l0aW9uO1xyXG4gICAgICAgICAgb2Zmc2V0LmNvcHkocG9zaXRpb24pLnN1YnRyYWN0KHRoYXQudGFyZ2V0KTtcclxuICAgICAgICAgIGxldCB0YXJnZXREaXN0YW5jZSA9IG9mZnNldC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgICAvLyBoYWxmIG9mIHRoZSBmb3YgaXMgY2VudGVyIHRvIHRvcCBvZiBzY3JlZW5cclxuICAgICAgICAgIHRhcmdldERpc3RhbmNlICo9IE1hdGgudGFuKCgodGhhdC5vYmplY3QuZm92IC8gMikgKiBNYXRoLlBJKSAvIDE4MC4wKTtcclxuXHJcbiAgICAgICAgICAvLyB3ZSB1c2Ugb25seSBjbGllbnRIZWlnaHQgaGVyZSBzbyBhc3BlY3QgcmF0aW8gZG9lcyBub3QgZGlzdG9ydCBzcGVlZFxyXG4gICAgICAgICAgcGFuTGVmdChcclxuICAgICAgICAgICAgKDIgKiBkZWx0YVggKiB0YXJnZXREaXN0YW5jZSkgLyBlbGVtZW50LmNsaWVudEhlaWdodCxcclxuICAgICAgICAgICAgdGhhdC5vYmplY3QubW9kZWxNYXRyaXhcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBwYW5VcChcclxuICAgICAgICAgICAgKDIgKiBkZWx0YVkgKiB0YXJnZXREaXN0YW5jZSkgLyBlbGVtZW50LmNsaWVudEhlaWdodCxcclxuICAgICAgICAgICAgdGhhdC5vYmplY3QubW9kZWxNYXRyaXhcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGF0Lm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYSkge1xyXG4gICAgICAgICAgLy8gb3J0aG9ncmFwaGljXHJcbiAgICAgICAgICBwYW5MZWZ0KFxyXG4gICAgICAgICAgICAoZGVsdGFYICogKHRoYXQub2JqZWN0LnJpZ2h0IC0gdGhhdC5vYmplY3QubGVmdCkpIC9cclxuICAgICAgICAgICAgICB0aGF0Lm9iamVjdC56b29tIC9cclxuICAgICAgICAgICAgICBlbGVtZW50LmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICB0aGF0Lm9iamVjdC5tb2RlbE1hdHJpeFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHBhblVwKFxyXG4gICAgICAgICAgICAoZGVsdGFZICogKHRoYXQub2JqZWN0LnRvcCAtIHRoYXQub2JqZWN0LmJvdHRvbSkpIC9cclxuICAgICAgICAgICAgICB0aGF0Lm9iamVjdC56b29tIC9cclxuICAgICAgICAgICAgICBlbGVtZW50LmNsaWVudEhlaWdodCxcclxuICAgICAgICAgICAgdGhhdC5vYmplY3QubW9kZWxNYXRyaXhcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIGNhbWVyYSBuZWl0aGVyIG9ydGhvZ3JhcGhpYyBub3IgcGVyc3BlY3RpdmVcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgXCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBwYW4gZGlzYWJsZWQuXCJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGF0LmVuYWJsZVBhbiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH0pKCk7XHJcbiAgICBjb25zdCBkb2xseU91dCA9IChkb2xseVNjYWxlKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhKSB7XHJcbiAgICAgICAgc2NhbGUgLz0gZG9sbHlTY2FsZTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYSkge1xyXG4gICAgICAgIHRoaXMub2JqZWN0Lnpvb20gPSBNYXRoLm1heChcclxuICAgICAgICAgIHRoaXMubWluWm9vbSxcclxuICAgICAgICAgIE1hdGgubWluKHRoaXMubWF4Wm9vbSwgdGhpcy5vYmplY3Quem9vbSAqIGRvbGx5U2NhbGUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgem9vbUNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIFwiV0FSTklORzogT3JiaXRDb250cm9scy5qcyBlbmNvdW50ZXJlZCBhbiB1bmtub3duIGNhbWVyYSB0eXBlIC0gZG9sbHkvem9vbSBkaXNhYmxlZC5cIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5lbmFibGVab29tID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZG9sbHlJbiA9IChkb2xseVNjYWxlKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhKSB7XHJcbiAgICAgICAgc2NhbGUgKj0gZG9sbHlTY2FsZTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYSkge1xyXG4gICAgICAgIHRoaXMub2JqZWN0Lnpvb20gPSBNYXRoLm1heChcclxuICAgICAgICAgIHRoaXMubWluWm9vbSxcclxuICAgICAgICAgIE1hdGgubWluKHRoaXMubWF4Wm9vbSwgdGhpcy5vYmplY3Quem9vbSAvIGRvbGx5U2NhbGUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgem9vbUNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIFwiV0FSTklORzogT3JiaXRDb250cm9scy5qcyBlbmNvdW50ZXJlZCBhbiB1bmtub3duIGNhbWVyYSB0eXBlIC0gZG9sbHkvem9vbSBkaXNhYmxlZC5cIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5lbmFibGVab29tID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBoYW5kbGVNb3VzZU1vdmVSb3RhdGUgPSAoZXZlbnQpID0+IHtcclxuICAgICAgcm90YXRlRW5kLnNldChldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcclxuXHJcbiAgICAgIFZlY3RvcjIuc3VidHJhY3Qocm90YXRlRW5kLCByb3RhdGVTdGFydCwgcm90YXRlRGVsdGEpO1xyXG4gICAgICBWZWN0b3IyLm11bHRpcGx5QnlTY2FsYXIocm90YXRlRGVsdGEsIHRoaXMucm90YXRlU3BlZWQsIHJvdGF0ZURlbHRhKTtcclxuICAgICAgLy9yb3RhdGVEZWx0YS5zdWJWZWN0b3JzKCByb3RhdGVFbmQsIHJvdGF0ZVN0YXJ0ICkubXVsdGlwbHlTY2FsYXIoIHRoaXMucm90YXRlU3BlZWQgKTtcclxuXHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmRvbUVsZW1lbnQ7XHJcblxyXG4gICAgICByb3RhdGVMZWZ0KCgyICogTWF0aC5QSSAqIHJvdGF0ZURlbHRhLngpIC8gZWxlbWVudC5jbGllbnRIZWlnaHQpOyAvLyB5ZXMsIGhlaWdodFxyXG5cclxuICAgICAgcm90YXRlVXAoKDIgKiBNYXRoLlBJICogcm90YXRlRGVsdGEueSkgLyBlbGVtZW50LmNsaWVudEhlaWdodCk7XHJcblxyXG4gICAgICBWZWN0b3IyLmNsb25lKHJvdGF0ZUVuZCwgcm90YXRlU3RhcnQpO1xyXG4gICAgICAvL3JvdGF0ZVN0YXJ0LmNvcHkoIHJvdGF0ZUVuZCApO1xyXG5cclxuICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlTW91c2VNb3ZlRG9sbHkgPSAoZXZlbnQpID0+IHtcclxuICAgICAgZG9sbHlFbmQuc2V0KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xyXG5cclxuICAgICAgVmVjdG9yMi5zdWJ0cmFjdChkb2xseUVuZCwgZG9sbHlTdGFydCwgZG9sbHlEZWx0YSk7XHJcbiAgICAgIC8vIGRvbGx5RGVsdGEuc3ViVmVjdG9ycyggZG9sbHlFbmQsIGRvbGx5U3RhcnQgKTtcclxuXHJcbiAgICAgIGlmIChkb2xseURlbHRhLnkgPiAwKSB7XHJcbiAgICAgICAgZG9sbHlPdXQoZ2V0Wm9vbVNjYWxlKCkpO1xyXG4gICAgICB9IGVsc2UgaWYgKGRvbGx5RGVsdGEueSA8IDApIHtcclxuICAgICAgICBkb2xseUluKGdldFpvb21TY2FsZSgpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgVmVjdG9yMi5jbG9uZShkb2xseUVuZCwgZG9sbHlTdGFydCk7XHJcbiAgICAgIC8vIGRvbGx5U3RhcnQuY29weSggZG9sbHlFbmQgKTtcclxuXHJcbiAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZU1vdXNlTW92ZVBhbiA9IChldmVudCkgPT4ge1xyXG4gICAgICBwYW5FbmQuc2V0KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xyXG5cclxuICAgICAgVmVjdG9yMi5zdWJ0cmFjdChwYW5FbmQsIHBhblN0YXJ0LCBwYW5EZWx0YSk7XHJcbiAgICAgIFZlY3RvcjIubXVsdGlwbHlCeVNjYWxhcihwYW5EZWx0YSwgdGhpcy5wYW5TcGVlZCwgcGFuRGVsdGEpO1xyXG4gICAgICAvL3BhbkRlbHRhLnN1YlZlY3RvcnMoIHBhbkVuZCwgcGFuU3RhcnQgKS5tdWx0aXBseVNjYWxhciggdGhpcy5wYW5TcGVlZCApO1xyXG5cclxuICAgICAgcGFuKHBhbkRlbHRhLngsIHBhbkRlbHRhLnkpO1xyXG5cclxuICAgICAgVmVjdG9yMi5jbG9uZShwYW5FbmQsIHBhblN0YXJ0KTtcclxuICAgICAgLy9wYW5TdGFydC5jb3B5KCBwYW5FbmQgKTtcclxuXHJcbiAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZU1vdXNlV2hlZWwgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKGV2ZW50LmRlbHRhWSA8IDApIHtcclxuICAgICAgICBkb2xseUluKGdldFpvb21TY2FsZSgpKTtcclxuICAgICAgfSBlbHNlIGlmIChldmVudC5kZWx0YVkgPiAwKSB7XHJcbiAgICAgICAgZG9sbHlPdXQoZ2V0Wm9vbVNjYWxlKCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGxldCBuZWVkc1VwZGF0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgc3dpdGNoIChldmVudC5jb2RlKSB7XHJcbiAgICAgICAgY2FzZSB0aGlzLmtleXMuVVA6XHJcbiAgICAgICAgICBwYW4oMCwgdGhpcy5rZXlQYW5TcGVlZCk7XHJcbiAgICAgICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSB0aGlzLmtleXMuQk9UVE9NOlxyXG4gICAgICAgICAgcGFuKDAsIC10aGlzLmtleVBhblNwZWVkKTtcclxuICAgICAgICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIHRoaXMua2V5cy5MRUZUOlxyXG4gICAgICAgICAgcGFuKHRoaXMua2V5UGFuU3BlZWQsIDApO1xyXG4gICAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgdGhpcy5rZXlzLlJJR0hUOlxyXG4gICAgICAgICAgcGFuKC10aGlzLmtleVBhblNwZWVkLCAwKTtcclxuICAgICAgICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobmVlZHNVcGRhdGUpIHtcclxuICAgICAgICAvLyBwcmV2ZW50IHRoZSBicm93c2VyIGZyb20gc2Nyb2xsaW5nIG9uIGN1cnNvciBrZXlzXHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVUb3VjaFN0YXJ0RG9sbHlQYW4gPSAoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVpvb20pIGhhbmRsZVRvdWNoU3RhcnREb2xseSgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZW5hYmxlUGFuKSBoYW5kbGVUb3VjaFN0YXJ0UGFuKCk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaGFuZGxlVG91Y2hTdGFydERvbGx5Um90YXRlID0gKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lbmFibGVab29tKSBoYW5kbGVUb3VjaFN0YXJ0RG9sbHkoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVJvdGF0ZSkgaGFuZGxlVG91Y2hTdGFydFJvdGF0ZSgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVUb3VjaE1vdmVSb3RhdGUgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKHBvaW50ZXJzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgcm90YXRlRW5kLnNldChldmVudC5wYWdlWCwgZXZlbnQucGFnZVkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0U2Vjb25kUG9pbnRlclBvc2l0aW9uKGV2ZW50KTtcclxuXHJcbiAgICAgICAgY29uc3QgeCA9IDAuNSAqIChldmVudC5wYWdlWCArIHBvc2l0aW9uLngpO1xyXG4gICAgICAgIGNvbnN0IHkgPSAwLjUgKiAoZXZlbnQucGFnZVkgKyBwb3NpdGlvbi55KTtcclxuXHJcbiAgICAgICAgcm90YXRlRW5kLnNldCh4LCB5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgVmVjdG9yMi5zdWJ0cmFjdChyb3RhdGVFbmQsIHJvdGF0ZVN0YXJ0LCByb3RhdGVEZWx0YSk7XHJcbiAgICAgIFZlY3RvcjIubXVsdGlwbHlCeVNjYWxhcihyb3RhdGVEZWx0YSwgdGhpcy5yb3RhdGVTcGVlZCwgcm90YXRlRGVsdGEpO1xyXG4gICAgICAvL3JvdGF0ZURlbHRhLnN1YlZlY3RvcnMoIHJvdGF0ZUVuZCwgcm90YXRlU3RhcnQgKS5tdWx0aXBseVNjYWxhciggdGhpcy5yb3RhdGVTcGVlZCApO1xyXG5cclxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudDtcclxuXHJcbiAgICAgIHJvdGF0ZUxlZnQoKDIgKiBNYXRoLlBJICogcm90YXRlRGVsdGEueCkgLyBlbGVtZW50LmNsaWVudEhlaWdodCk7IC8vIHllcywgaGVpZ2h0XHJcblxyXG4gICAgICByb3RhdGVVcCgoMiAqIE1hdGguUEkgKiByb3RhdGVEZWx0YS55KSAvIGVsZW1lbnQuY2xpZW50SGVpZ2h0KTtcclxuICAgICAgVmVjdG9yMi5jbG9uZShyb3RhdGVFbmQsIHJvdGF0ZVN0YXJ0KTtcclxuICAgICAgLy9yb3RhdGVTdGFydC5jb3B5KCByb3RhdGVFbmQgKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlVG91Y2hNb3ZlUGFuID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChwb2ludGVycy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICBwYW5FbmQuc2V0KGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRTZWNvbmRQb2ludGVyUG9zaXRpb24oZXZlbnQpO1xyXG5cclxuICAgICAgICBjb25zdCB4ID0gMC41ICogKGV2ZW50LnBhZ2VYICsgcG9zaXRpb24ueCk7XHJcbiAgICAgICAgY29uc3QgeSA9IDAuNSAqIChldmVudC5wYWdlWSArIHBvc2l0aW9uLnkpO1xyXG5cclxuICAgICAgICBwYW5FbmQuc2V0KHgsIHkpO1xyXG4gICAgICB9XHJcbiAgICAgIFZlY3RvcjIuc3VidHJhY3QocGFuRW5kLCBwYW5TdGFydCwgcGFuRGVsdGEpO1xyXG4gICAgICBWZWN0b3IyLm11bHRpcGx5QnlTY2FsYXIocGFuRGVsdGEsIHRoaXMucGFuU3BlZWQsIHBhbkRlbHRhKTtcclxuXHJcbiAgICAgIC8vcGFuRGVsdGEuc3ViVmVjdG9ycyggcGFuRW5kLCBwYW5TdGFydCApLm11bHRpcGx5U2NhbGFyKCB0aGlzLnBhblNwZWVkICk7XHJcblxyXG4gICAgICBwYW4ocGFuRGVsdGEueCwgcGFuRGVsdGEueSk7XHJcblxyXG4gICAgICBWZWN0b3IyLmNsb25lKHBhbkVuZCwgcGFuU3RhcnQpO1xyXG4gICAgICAvLyBwYW5TdGFydC5jb3B5KCBwYW5FbmQgKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlVG91Y2hNb3ZlRG9sbHkgPSAoZXZlbnQpID0+IHtcclxuICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRTZWNvbmRQb2ludGVyUG9zaXRpb24oZXZlbnQpO1xyXG5cclxuICAgICAgY29uc3QgZHggPSBldmVudC5wYWdlWCAtIHBvc2l0aW9uLng7XHJcbiAgICAgIGNvbnN0IGR5ID0gZXZlbnQucGFnZVkgLSBwb3NpdGlvbi55O1xyXG5cclxuICAgICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xyXG5cclxuICAgICAgZG9sbHlFbmQuc2V0KDAsIGRpc3RhbmNlKTtcclxuXHJcbiAgICAgIGRvbGx5RGVsdGEuc2V0KDAsIE1hdGgucG93KGRvbGx5RW5kLnkgLyBkb2xseVN0YXJ0LnksIHRoaXMuem9vbVNwZWVkKSk7XHJcblxyXG4gICAgICBkb2xseU91dChkb2xseURlbHRhLnkpO1xyXG5cclxuICAgICAgVmVjdG9yMi5jbG9uZShkb2xseUVuZCwgZG9sbHlTdGFydCk7XHJcbiAgICAgIC8vZG9sbHlTdGFydC5jb3B5KCBkb2xseUVuZCApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVUb3VjaE1vdmVEb2xseVBhbiA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lbmFibGVab29tKSBoYW5kbGVUb3VjaE1vdmVEb2xseShldmVudCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5lbmFibGVQYW4pIGhhbmRsZVRvdWNoTW92ZVBhbihldmVudCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZVRvdWNoTW92ZURvbGx5Um90YXRlID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVpvb20pIGhhbmRsZVRvdWNoTW92ZURvbGx5KGV2ZW50KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVJvdGF0ZSkgaGFuZGxlVG91Y2hNb3ZlUm90YXRlKGV2ZW50KTtcclxuICAgIH07XHJcblxyXG4gICAgLy9cclxuICAgIC8vIGV2ZW50IGhhbmRsZXJzIC0gRlNNOiBsaXN0ZW4gZm9yIGV2ZW50cyBhbmQgcmVzZXQgc3RhdGVcclxuICAgIC8vXHJcblxyXG4gICAgdGhpcy5vblBvaW50ZXJEb3duID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZWQgPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICBpZiAocG9pbnRlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5kb21FbGVtZW50LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgdGhpcy5vblBvaW50ZXJNb3ZlKTtcclxuICAgICAgICB0aGlzLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCB0aGlzLm9uUG9pbnRlclVwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9cclxuXHJcbiAgICAgIGFkZFBvaW50ZXIoZXZlbnQpO1xyXG5cclxuICAgICAgaWYgKGV2ZW50LnBvaW50ZXJUeXBlID09PSBcInRvdWNoXCIpIHtcclxuICAgICAgICBvblRvdWNoU3RhcnQoZXZlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9uTW91c2VEb3duKGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLm9uUG9pbnRlck1vdmUgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW5hYmxlZCA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgIGlmIChldmVudC5wb2ludGVyVHlwZSA9PT0gXCJ0b3VjaFwiKSB7XHJcbiAgICAgICAgb25Ub3VjaE1vdmUoZXZlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9uTW91c2VNb3ZlKGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLm9uUG9pbnRlclVwID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIHJlbW92ZVBvaW50ZXIoZXZlbnQpO1xyXG5cclxuICAgICAgaWYgKHBvaW50ZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuZG9tRWxlbWVudC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTtcclxuXHJcbiAgICAgICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCB0aGlzLm9uUG9pbnRlck1vdmUpO1xyXG4gICAgICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIHRoaXMub25Qb2ludGVyVXApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoX2VuZEV2ZW50KTtcclxuXHJcbiAgICAgIHN0YXRlID0gU1RBVEUuTk9ORTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb25Nb3VzZURvd24gPSAoZXZlbnQpID0+IHtcclxuICAgICAgbGV0IG1vdXNlQWN0aW9uO1xyXG5cclxuICAgICAgc3dpdGNoIChldmVudC5idXR0b24pIHtcclxuICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICBtb3VzZUFjdGlvbiA9IHRoaXMubW91c2VCdXR0b25zLkxFRlQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgbW91c2VBY3Rpb24gPSB0aGlzLm1vdXNlQnV0dG9ucy5NSURETEU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgbW91c2VBY3Rpb24gPSB0aGlzLm1vdXNlQnV0dG9ucy5SSUdIVDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgbW91c2VBY3Rpb24gPSAtMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3dpdGNoIChtb3VzZUFjdGlvbikge1xyXG4gICAgICAgIGNhc2UgTU9VU0UuRE9MTFk6XHJcbiAgICAgICAgICBpZiAodGhpcy5lbmFibGVab29tID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgIGhhbmRsZU1vdXNlRG93bkRvbGx5KGV2ZW50KTtcclxuXHJcbiAgICAgICAgICBzdGF0ZSA9IFNUQVRFLkRPTExZO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIE1PVVNFLlJPVEFURTpcclxuICAgICAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUGFuID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaGFuZGxlTW91c2VEb3duUGFuKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIHN0YXRlID0gU1RBVEUuUEFOO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUm90YXRlID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaGFuZGxlTW91c2VEb3duUm90YXRlKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIHN0YXRlID0gU1RBVEUuUk9UQVRFO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIE1PVVNFLlBBTjpcclxuICAgICAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUm90YXRlID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaGFuZGxlTW91c2VEb3duUm90YXRlKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIHN0YXRlID0gU1RBVEUuUk9UQVRFO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUGFuID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaGFuZGxlTW91c2VEb3duUGFuKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIHN0YXRlID0gU1RBVEUuUEFOO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgc3RhdGUgPSBTVEFURS5OT05FO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc3RhdGUgIT09IFNUQVRFLk5PTkUpIHtcclxuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoX3N0YXJ0RXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgICBjYXNlIFNUQVRFLlJPVEFURTpcclxuICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVJvdGF0ZSA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICBoYW5kbGVNb3VzZU1vdmVSb3RhdGUoZXZlbnQpO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFNUQVRFLkRPTExZOlxyXG4gICAgICAgICAgaWYgKHRoaXMuZW5hYmxlWm9vbSA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICBoYW5kbGVNb3VzZU1vdmVEb2xseShldmVudCk7XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU1RBVEUuUEFOOlxyXG4gICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUGFuID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgIGhhbmRsZU1vdXNlTW92ZVBhbihldmVudCk7XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5vbk1vdXNlV2hlZWwgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9PT0gZmFsc2UgfHxcclxuICAgICAgICB0aGlzLmVuYWJsZVpvb20gPT09IGZhbHNlIHx8XHJcbiAgICAgICAgc3RhdGUgIT09IFNUQVRFLk5PTkVcclxuICAgICAgKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoX3N0YXJ0RXZlbnQpO1xyXG5cclxuICAgICAgaGFuZGxlTW91c2VXaGVlbChldmVudCk7XHJcblxyXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoX2VuZEV2ZW50KTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5vbktleURvd24gPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW5hYmxlZCA9PT0gZmFsc2UgfHwgdGhpcy5lbmFibGVQYW4gPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICBoYW5kbGVLZXlEb3duKGV2ZW50KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb25Ub3VjaFN0YXJ0ID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIHRyYWNrUG9pbnRlcihldmVudCk7XHJcblxyXG4gICAgICBzd2l0Y2ggKHBvaW50ZXJzLmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgIHN3aXRjaCAodGhpcy50b3VjaGVzLk9ORSkge1xyXG4gICAgICAgICAgICBjYXNlIFRPVUNILlJPVEFURTpcclxuICAgICAgICAgICAgICBpZiAodGhpcy5lbmFibGVSb3RhdGUgPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgIGhhbmRsZVRvdWNoU3RhcnRSb3RhdGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5UT1VDSF9ST1RBVEU7XHJcblxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBUT1VDSC5QQU46XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUGFuID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICBoYW5kbGVUb3VjaFN0YXJ0UGFuKCk7XHJcblxyXG4gICAgICAgICAgICAgIHN0YXRlID0gU1RBVEUuVE9VQ0hfUEFOO1xyXG5cclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5OT05FO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICBzd2l0Y2ggKHRoaXMudG91Y2hlcy5UV08pIHtcclxuICAgICAgICAgICAgY2FzZSBUT1VDSC5ET0xMWV9QQU46XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlWm9vbSA9PT0gZmFsc2UgJiYgdGhpcy5lbmFibGVQYW4gPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgIGhhbmRsZVRvdWNoU3RhcnREb2xseVBhbigpO1xyXG5cclxuICAgICAgICAgICAgICBzdGF0ZSA9IFNUQVRFLlRPVUNIX0RPTExZX1BBTjtcclxuXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFRPVUNILkRPTExZX1JPVEFURTpcclxuICAgICAgICAgICAgICBpZiAodGhpcy5lbmFibGVab29tID09PSBmYWxzZSAmJiB0aGlzLmVuYWJsZVJvdGF0ZSA9PT0gZmFsc2UpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgIGhhbmRsZVRvdWNoU3RhcnREb2xseVJvdGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgICBzdGF0ZSA9IFNUQVRFLlRPVUNIX0RPTExZX1JPVEFURTtcclxuXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIHN0YXRlID0gU1RBVEUuTk9ORTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHN0YXRlID0gU1RBVEUuTk9ORTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHN0YXRlICE9PSBTVEFURS5OT05FKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KF9zdGFydEV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvblRvdWNoTW92ZSA9IChldmVudCkgPT4ge1xyXG4gICAgICB0cmFja1BvaW50ZXIoZXZlbnQpO1xyXG5cclxuICAgICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICAgIGNhc2UgU1RBVEUuVE9VQ0hfUk9UQVRFOlxyXG4gICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUm90YXRlID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgIGhhbmRsZVRvdWNoTW92ZVJvdGF0ZShldmVudCk7XHJcblxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTVEFURS5UT1VDSF9QQU46XHJcbiAgICAgICAgICBpZiAodGhpcy5lbmFibGVQYW4gPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgaGFuZGxlVG91Y2hNb3ZlUGFuKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFNUQVRFLlRPVUNIX0RPTExZX1BBTjpcclxuICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb20gPT09IGZhbHNlICYmIHRoaXMuZW5hYmxlUGFuID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgIGhhbmRsZVRvdWNoTW92ZURvbGx5UGFuKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFNUQVRFLlRPVUNIX0RPTExZX1JPVEFURTpcclxuICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb20gPT09IGZhbHNlICYmIHRoaXMuZW5hYmxlUm90YXRlID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgIGhhbmRsZVRvdWNoTW92ZURvbGx5Um90YXRlKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgc3RhdGUgPSBTVEFURS5OT05FO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMub25Db250ZXh0TWVudSA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lbmFibGVkID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmdldEF1dG9Sb3RhdGlvbkFuZ2xlID0gKCkgPT4ge1xyXG4gICAgICByZXR1cm4gKCgyICogTWF0aC5QSSkgLyA2MCAvIDYwKSAqIHRoaXMuYXV0b1JvdGF0ZVNwZWVkO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBnZXRab29tU2NhbGUgPSAoKSA9PiB7XHJcbiAgICAgIHJldHVybiBNYXRoLnBvdygwLjk1LCB0aGlzLnpvb21TcGVlZCk7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLm9uQ29udGV4dE1lbnUpO1xyXG5cclxuICAgIHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgdGhpcy5vblBvaW50ZXJEb3duKTtcclxuICAgIHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBvblBvaW50ZXJDYW5jZWwpO1xyXG4gICAgdGhpcy5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLCB0aGlzLm9uTW91c2VXaGVlbCwge1xyXG4gICAgICBwYXNzaXZlOiBmYWxzZSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLm9uQ29udGV4dE1lbnUpO1xyXG5cclxuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgdGhpcy5vblBvaW50ZXJEb3duKTtcclxuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBvblBvaW50ZXJDYW5jZWwpO1xyXG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLCB0aGlzLm9uTW91c2VXaGVlbCk7XHJcblxyXG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCB0aGlzLm9uUG9pbnRlck1vdmUpO1xyXG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgdGhpcy5vblBvaW50ZXJVcCk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2RvbUVsZW1lbnRLZXlFdmVudHMgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLm9uS2V5RG93bik7XHJcbiAgICB9XHJcblxyXG4gICAgLy90aGlzLmRpc3BhdGNoRXZlbnQoIHsgdHlwZTogJ2Rpc3Bvc2UnIH0gKTsgLy8gc2hvdWxkIHRoaXMgYmUgYWRkZWQgaGVyZT9cclxuICB9XHJcbn1cclxuY29uc3QgU1RBVEUgPSB7XHJcbiAgTk9ORTogLTEsXHJcbiAgUk9UQVRFOiAwLFxyXG4gIERPTExZOiAxLFxyXG4gIFBBTjogMixcclxuICBUT1VDSF9ST1RBVEU6IDMsXHJcbiAgVE9VQ0hfUEFOOiA0LFxyXG4gIFRPVUNIX0RPTExZX1BBTjogNSxcclxuICBUT1VDSF9ET0xMWV9ST1RBVEU6IDYsXHJcbn07XHJcblxyXG5sZXQgc3RhdGUgPSBTVEFURS5OT05FO1xyXG5cclxuY29uc3QgRVBTID0gMC4wMDAwMDE7XHJcblxyXG4vLyBjdXJyZW50IHBvc2l0aW9uIGluIHNwaGVyaWNhbCBjb29yZGluYXRlc1xyXG5jb25zdCBzcGhlcmljYWwgPSBuZXcgU3BoZXJpY2FsKCk7XHJcbmNvbnN0IHNwaGVyaWNhbERlbHRhID0gbmV3IFNwaGVyaWNhbCgpO1xyXG5cclxubGV0IHNjYWxlID0gMTtcclxuY29uc3QgcGFuT2Zmc2V0ID0gbmV3IFZlY3RvcjMoKTtcclxubGV0IHpvb21DaGFuZ2VkID0gZmFsc2U7XHJcblxyXG5jb25zdCByb3RhdGVTdGFydCA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IHJvdGF0ZUVuZCA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IHJvdGF0ZURlbHRhID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbmNvbnN0IHBhblN0YXJ0ID0gbmV3IFZlY3RvcjIoKTtcclxuY29uc3QgcGFuRW5kID0gbmV3IFZlY3RvcjIoKTtcclxuY29uc3QgcGFuRGVsdGEgPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuY29uc3QgZG9sbHlTdGFydCA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IGRvbGx5RW5kID0gbmV3IFZlY3RvcjIoKTtcclxuY29uc3QgZG9sbHlEZWx0YSA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG5jb25zdCBwb2ludGVycyA9IFtdO1xyXG5jb25zdCBwb2ludGVyUG9zaXRpb25zID0ge307XHJcbmV4cG9ydCBlbnVtIE1PVVNFIHtcclxuICBMRUZUID0gMCxcclxuICBNSURETEUgPSAxLFxyXG4gIFJJR0hUID0gMixcclxuICBST1RBVEUgPSAwLFxyXG4gIERPTExZID0gMSxcclxuICBQQU4gPSAyLFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBUT1VDSCB7XHJcbiAgUk9UQVRFLFxyXG4gIFBBTixcclxuICBET0xMWV9QQU4sXHJcbiAgRE9MTFlfUk9UQVRFLFxyXG59XHJcbmZ1bmN0aW9uIHJvdGF0ZUxlZnQoYW5nbGUpIHtcclxuICBzcGhlcmljYWxEZWx0YS50aGV0YSAtPSBhbmdsZTtcclxufVxyXG5cclxuZnVuY3Rpb24gcm90YXRlVXAoYW5nbGUpIHtcclxuICBzcGhlcmljYWxEZWx0YS5waGkgLT0gYW5nbGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZFBvaW50ZXIoZXZlbnQpIHtcclxuICBwb2ludGVycy5wdXNoKGV2ZW50KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlUG9pbnRlcihldmVudCkge1xyXG4gIGRlbGV0ZSBwb2ludGVyUG9zaXRpb25zW2V2ZW50LnBvaW50ZXJJZF07XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgIGlmIChwb2ludGVyc1tpXS5wb2ludGVySWQgPT0gZXZlbnQucG9pbnRlcklkKSB7XHJcbiAgICAgIHBvaW50ZXJzLnNwbGljZShpLCAxKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdHJhY2tQb2ludGVyKGV2ZW50KSB7XHJcbiAgbGV0IHBvc2l0aW9uID0gcG9pbnRlclBvc2l0aW9uc1tldmVudC5wb2ludGVySWRdO1xyXG5cclxuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgcG9zaXRpb24gPSBuZXcgVmVjdG9yMigpO1xyXG4gICAgcG9pbnRlclBvc2l0aW9uc1tldmVudC5wb2ludGVySWRdID0gcG9zaXRpb247XHJcbiAgfVxyXG5cclxuICBwb3NpdGlvbi5zZXQoZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U2Vjb25kUG9pbnRlclBvc2l0aW9uKGV2ZW50KSB7XHJcbiAgY29uc3QgcG9pbnRlciA9XHJcbiAgICBldmVudC5wb2ludGVySWQgPT09IHBvaW50ZXJzWzBdLnBvaW50ZXJJZCA/IHBvaW50ZXJzWzFdIDogcG9pbnRlcnNbMF07XHJcblxyXG4gIHJldHVybiBwb2ludGVyUG9zaXRpb25zW3BvaW50ZXIucG9pbnRlcklkXTtcclxufVxyXG5cclxuZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duUm90YXRlKGV2ZW50KSB7XHJcbiAgcm90YXRlU3RhcnQuc2V0KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYW5kbGVNb3VzZURvd25Eb2xseShldmVudCkge1xyXG4gIGRvbGx5U3RhcnQuc2V0KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYW5kbGVNb3VzZURvd25QYW4oZXZlbnQpIHtcclxuICBwYW5TdGFydC5zZXQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XHJcbn1cclxuZnVuY3Rpb24gb25Qb2ludGVyQ2FuY2VsKGV2ZW50KSB7XHJcbiAgcmVtb3ZlUG9pbnRlcihldmVudCk7XHJcbn1cclxuZnVuY3Rpb24gaGFuZGxlVG91Y2hTdGFydFJvdGF0ZSgpIHtcclxuICBpZiAocG9pbnRlcnMubGVuZ3RoID09PSAxKSB7XHJcbiAgICByb3RhdGVTdGFydC5zZXQocG9pbnRlcnNbMF0ucGFnZVgsIHBvaW50ZXJzWzBdLnBhZ2VZKTtcclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3QgeCA9IDAuNSAqIChwb2ludGVyc1swXS5wYWdlWCArIHBvaW50ZXJzWzFdLnBhZ2VYKTtcclxuICAgIGNvbnN0IHkgPSAwLjUgKiAocG9pbnRlcnNbMF0ucGFnZVkgKyBwb2ludGVyc1sxXS5wYWdlWSk7XHJcblxyXG4gICAgcm90YXRlU3RhcnQuc2V0KHgsIHkpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaGFuZGxlVG91Y2hTdGFydFBhbigpIHtcclxuICBpZiAocG9pbnRlcnMubGVuZ3RoID09PSAxKSB7XHJcbiAgICBwYW5TdGFydC5zZXQocG9pbnRlcnNbMF0ucGFnZVgsIHBvaW50ZXJzWzBdLnBhZ2VZKTtcclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3QgeCA9IDAuNSAqIChwb2ludGVyc1swXS5wYWdlWCArIHBvaW50ZXJzWzFdLnBhZ2VYKTtcclxuICAgIGNvbnN0IHkgPSAwLjUgKiAocG9pbnRlcnNbMF0ucGFnZVkgKyBwb2ludGVyc1sxXS5wYWdlWSk7XHJcblxyXG4gICAgcGFuU3RhcnQuc2V0KHgsIHkpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaGFuZGxlVG91Y2hTdGFydERvbGx5KCkge1xyXG4gIGNvbnN0IGR4ID0gcG9pbnRlcnNbMF0ucGFnZVggLSBwb2ludGVyc1sxXS5wYWdlWDtcclxuICBjb25zdCBkeSA9IHBvaW50ZXJzWzBdLnBhZ2VZIC0gcG9pbnRlcnNbMV0ucGFnZVk7XHJcblxyXG4gIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcclxuXHJcbiAgZG9sbHlTdGFydC5zZXQoMCwgZGlzdGFuY2UpO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJNZXJzZW5uZVR3aXN0ZXIiLCJkaXN0YW5jZVNjcmF0Y2giLCJsZXJwU2NyYXRjaCIsImFuZ2xlQmV0d2VlblNjcmF0Y2giLCJhbmdsZUJldHdlZW5TY3JhdGNoMiIsIm1vc3RPcnRob2dvbmFsQXhpc1NjcmF0Y2giLCJzY2FsZVNjcmF0Y2gxIiwic2NyYXRjaENvbHVtbiIsInNjYWxlU2NyYXRjaDMiLCJzY2FsZVNjcmF0Y2g0Iiwic2NhbGVTY3JhdGNoNSIsInNjcmF0Y2hUcmFuc3Bvc2VNYXRyaXgiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsSUFBWSxvQkFFWCxDQUFBO0FBRkQsQ0FBQSxVQUFZLG9CQUFvQixFQUFBO0FBQy9CLElB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QStCWDtBQS9CRCxDQUFBLFVBQVksWUFBWSxFQUFBO0FBQ3ZCLElBQUEsWUFBQSxDQUFBLFNBQUEsQ0FBQSxHQUFBLFNBQW1CLENBQUE7QUFDbkIsSUFBQSxZQUFBLENBQUEsU0FBQSxDQUFBLEdBQUEsU0FBbUIsQ0FBQTtBQUNuQixJQUFBLFlBQUEsQ0FBQSxTQUFBLENBQUEsR0FBQSxTQUFtQixDQUFBO0FBQ25CLElBQUEsWUFBQSxDQUFBLFNBQUEsQ0FBQSxHQUFBLFNBQW1CLENBQUE7QUFDbkIsSUFBQSxZQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsVUFBcUIsQ0FBQTtBQUNyQixJQUFBLFlBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxVQUFxQixDQUFBO0FBQ3JCLElBQUEsWUFBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLFVBQXFCLENBQUE7QUFDckIsSUFBQSxZQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsVUFBcUIsQ0FBQTtBQUNyQixJQUFBLFlBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxVQUFxQixDQUFBO0FBQ3JCLElBQUEsWUFBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLFVBQXFCLENBQUE7QUFDckIsSUFBQSxZQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsVUFBcUIsQ0FBQTtBQUNyQixJQUFBLFlBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxVQUFxQixDQUFBO0FBQ3JCLElBQUEsWUFBQSxDQUFBLFdBQUEsQ0FBQSxHQUFBLFdBQXVCLENBQUE7QUFDdkIsSUFBQSxZQUFBLENBQUEsV0FBQSxDQUFBLEdBQUEsV0FBdUIsQ0FBQTtBQUN2QixJQUFBLFlBQUEsQ0FBQSxXQUFBLENBQUEsR0FBQSxXQUF1QixDQUFBO0FBQ3ZCLElBQUEsWUFBQSxDQUFBLFdBQUEsQ0FBQSxHQUFBLFdBQXVCLENBQUE7QUFDdkIsSUFBQSxZQUFBLENBQUEsV0FBQSxDQUFBLEdBQUEsV0FBdUIsQ0FBQTtBQUN2QixJQUFBLFlBQUEsQ0FBQSxXQUFBLENBQUEsR0FBQSxXQUF1QixDQUFBO0FBQ3ZCLElBQUEsWUFBQSxDQUFBLFNB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LEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDekQsRUFBRSxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixFQUFFO0FBQ0YsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUIsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUMvQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsTUFBTSxFQUFFLElBQUksVUFBVSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxVQUFVLElBQUksVUFBVSxDQUFDO0FBQy9HLElBQUksQ0FBQyxDQUFDO0FBQ04sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwQixFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDekQsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUN6QixFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsZUFBZSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsV0FBVztBQUNsRCxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNDO0FBQ0E7QUFDQSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQ3pCLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDVDtBQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEI7QUFDQSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQ25DLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNyRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2pFLEdBQUc7QUFDSCxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQzFCLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNyRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUMxRSxHQUFHO0FBQ0gsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2RSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckU7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN6QjtBQUNBO0FBQ0EsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJ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QUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ELFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ1o7SUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBQTtRQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNaO0FBQ0QsSUFBQSxJQUFJLENBQUMsS0FBSyxFQUFBO0FBQ1QsUUFBQSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDNUMsUUFBQSxPQUFPLENBQUMsQ0FBQztLQUNUO0lBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUE7QUFDWixRQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDWjtBQUNELElBQUEsSUFBSSxDQUFDLEtBQUssRUFBQTtBQUNULFFBQUEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxRQUFBLE9BQU8sQ0FBQyxDQUFDO0tBQ1Q7SUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBQTtBQUNaLFFBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNaO0FBQ0QsSUFBQSxJQUFJLENBQUMsS0FBSyxFQUFBO0FBQ1QsUUFBQSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hELFFBQUEsT0FBTyxDQUFDLENBQUM7S0FDVDtBQUNELElBQUEsSUFBSSxDQUFDLEtBQUssRUFBQTtBQUNULFFBQUEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxRQUFBLE9BQU8sQ0FBQyxDQUFDO0tBQ1Q7QUFDRCxJQUFBLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBQTtBQUNoQixRQUFBLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNaO0FBQ0QsSUFBQSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFBO0FBQ3BCLFFBQUEsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNaO0lBQ0QsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUE7QUFDeEIsUUFBQSxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNaOztBQTFGYSxTQUFBLENBQUEsRUFBRSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDbkIsU0FBQSxDQUFBLEVBQUUsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBMkg1QixNQUFPLGdCQUFpQixTQUFRLFNBQVMsQ0FBQTtBQUM5QyxJQUFBLFdBQUEsQ0FBWSxJQUFZLEVBQUUsS0FBb0IsRUFBRSxRQUFnQixFQUFBO0FBQy9ELFFBQUEsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDN0IsUUFBQSxNQUFNLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxHQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDaEYsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFFLE1BQU0sQ0FBQTtBQUNuQixRQUFBLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxhQUFhLENBQUM7S0FDdkM7QUFDRCxDQUFBO0FBUUQsSUFBWSxhQUdYLENBQUE7QUFIRCxDQUFBLFVBQVksYUFBYSxFQUFBO0FBQ3hCLElBQUEsYUFBQSxDQUFBLGFBQUEsQ0FBQSxzQkFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsc0JBQXNCLENBQUE7QUFDckIsSUFBQSxhQUFBLENBQUEsYUFBQSxDQUFBLFdBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLFdBQVcsQ0FBQTtBQUNiLENBQUMsRUFIVyxhQUFhLEtBQWIsYUFBYSxHQUd4QixFQUFBLENBQUEsQ0FBQSxDQUFBO0FBTUQsU0FBUyxrQkFBa0IsQ0FBQyxJQUFZLEVBQUUsUUFBZ0IsRUFBQTtBQUN6RCxJQUFBLE1BQU0sR0FBRyxHQUFHLENBQUEsRUFBRyxJQUFJLENBQUksQ0FBQSxFQUFBLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLE9BQU87UUFDTixDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUUsRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFDLGFBQWEsRUFBQyxZQUFZLENBQUMsaUJBQWlCLEdBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUM7UUFDdkksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFFLEVBQUMsTUFBTSxFQUFDLFdBQVcsRUFBQyxhQUFhLEVBQUMsWUFBWSxDQUFDLGlCQUFpQixHQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFDO1FBQzNJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRSxFQUFDLE1BQU0sRUFBQyxXQUFXLEVBQUMsYUFBYSxFQUFDLFlBQVksQ0FBQyxpQkFBaUIsR0FBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBQztRQUMzSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUUsRUFBQyxNQUFNLEVBQUMsV0FBVyxFQUFDLGFBQWEsRUFBQyxZQUFZLENBQUMsaUJBQWlCLEdBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUM7S0FDM0ksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNQOztBQ3RLQSxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLE1BQU0sU0FBUyxDQUFBO0FBYWQsSUFBQSxXQUFBLENBQVksT0FBOEIsRUFBQTtRQUN6QyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUM7UUFDeEMsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztZQUNsRCxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDcEIsWUFBQSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0I7QUFDekMsWUFBQSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLE1BQU07Z0JBQ3pDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztnQkFDdkIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO0FBQ3pCLGFBQUEsQ0FBQyxDQUFDO0FBQ0gsU0FBQSxDQUFDLENBQUM7S0FDSDtBQUNELElBQUEsSUFBSSxDQUFDLFdBQWlDLEVBQUE7O1FBRXJDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNqQixZQUFBLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNuRCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQy9ELFlBQUEsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDeEUsU0FBQTtBQUFNLGFBQUE7WUFDTixXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3hELFNBQUE7S0FDRDtJQUNELE9BQU8sR0FBQTtBQUNOLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7QUFDOUIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztLQUN4QjtJQUNELE9BQU8scUJBQXFCLENBQUMsT0FBOEIsRUFBQTtRQUMxRCxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekMsU0FBQTtBQUFNLGFBQUE7QUFDTixZQUFBLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pDLGNBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM3QyxZQUFBLE9BQU8sU0FBUyxDQUFDO0FBQ2pCLFNBQUE7S0FDRDtJQUNELE9BQU8sd0JBQXdCLENBQUMsU0FBb0IsRUFBQTtBQUNuRCxRQUFBLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDakM7QUFDRDs7QUN4RGEsTUFBTyxlQUFlLENBQUE7QUFHbkMsSUFBQSxXQUFBLENBQVksT0FBK0IsRUFBQTtBQUMxQyxRQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUMvQixRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztLQUNqQztJQUNNLGlCQUFpQixHQUFBO1FBQ3ZCLE9BQU87WUFDTixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3ZCLENBQUM7S0FDRjtBQUNEOztBQ1JEOzs7Ozs7Ozs7OztBQVdHO0FBQ0gsTUFBTSxPQUFPLENBQUE7QUFDWixJQUFBLFdBQUEsQ0FDQyxXQUFXLEdBQUcsQ0FBQyxFQUNmLFdBQVcsR0FBRyxDQUFDLEVBQ2YsV0FBVyxHQUFHLENBQUMsRUFDZixXQUFXLEdBQUcsQ0FBQyxFQUNmLFdBQVcsR0FBRyxDQUFDLEVBQ2YsV0FBVyxHQUFHLENBQUMsRUFDZixXQUFXLEdBQUcsQ0FBQyxFQUNmLFdBQVcsR0FBRyxDQUFDLEVBQ2YsV0FBVyxHQUFHLENBQUMsRUFBQTtBQUVmLFFBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN0QixRQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDdEIsUUFBQSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3RCLFFBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN0QixRQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDdEIsUUFBQSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3RCLFFBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN0QixRQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDdEIsUUFBQSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0tBQ3RCO0FBQ0QsSUFBQSxjQUFjLENBQUMsTUFBZSxFQUFBO1FBQzdCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENB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QUMsQ0FBQyxFQUNULE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNULE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNULE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQ1QsQ0FBQztBQUNGLFNBQUE7UUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sY0FBYyxDQUFDLFVBQXNCLEVBQUUsTUFBZ0IsRUFBQTtRQUM3RCxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFdkMsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzlCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUU1QixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQy9CLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFNUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJ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UyxDQUFDLENBQUMsQ0FBQztRQUM1QixNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxRQUFRLENBQUMsTUFBZSxFQUFFLEtBQWMsRUFBRSxNQUFlLEVBQUE7UUFDL0QsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUVJLGVBQWEsQ0FBQyxDQUFDO1FBQzlELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDOUMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBRXBDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxRQUFRLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTtBQUMvQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxlQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ25HLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVBLGVBQWEsQ0FBQyxDQUFDLENBQUM7QUFDbkcsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRUEsZUFBYSxDQUFDLENBQUMsQ0FBQztBQUNuRyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7SUFFRCxPQUFPLGVBQWUsQ0FBQyxNQUFlLEVBQUE7QUFDckMsUUFBQSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRUMsZUFBYSxDQUFDLENBQUM7QUFDeEMsUUFBQSxPQUFPLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQ0EsZUFBYSxDQUFDLENBQUM7S0FDL0M7QUFFRCxJQUFBLE9BQU8sV0FBVyxDQUFDLE1BQWUsRUFBRSxRQUFpQixFQUFFLE1BQWUsRUFBQTtRQUNyRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRUMsZUFBYSxDQUFDLENBQUM7QUFFdEQsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFFbEMsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFdBQVcsQ0FBQyxNQUFlLEVBQUUsTUFBZSxFQUFBO1FBQ2xELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFQyxlQUFhLENBQUMsQ0FBQztBQUV0RCxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUVoQyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sUUFBUSxDQUFDLElBQWEsRUFBRSxLQUFjLEVBQUUsTUFBZSxFQUFBO0FBQzdELFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakYsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRixRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRWpGLFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakYsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRixRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRWpGLFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakYsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRixRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRWpGLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxHQUFHLENBQUMsSUFBYSxFQUFFLEtBQWMsRUFBRSxNQUFlLEVBQUE7QUFDeEQsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFFBQVEsQ0FBQyxJQUFhLEVBQUUsS0FBYyxFQUFFLE1BQWUsRUFBQTtBQUM3RCxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sZ0JBQWdCLENBQUMsTUFBZSxFQUFFLFNBQWtCLEVBQUUsTUFBZSxFQUFBO0FBQzNFLFFBQUEsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRXZCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRTNELFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFlLEVBQUUsTUFBYyxFQUFFLE1BQWUsRUFBQTtRQUN2RSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sZUFBZSxDQUFDLE1BQWUsRUFBRSxLQUFjLEVBQUUsTUFBZSxFQUFBO0FBQ3RFLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBRWhDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxNQUFNLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTtRQUM3QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sU0FBUyxDQUFDLE1BQWUsRUFBRSxNQUFlLEVBQUE7QUFDaEQsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFOUIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLEdBQUcsQ0FBQyxNQUFlLEVBQUUsTUFBZSxFQUFBO0FBQzFDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRWhDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtJQUVELE9BQU8sV0FBVyxDQUFDLE1BQWUsRUFBQTtBQUNqQyxRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV0QixRQUFBLE9BQU8sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDckc7QUFFRCxJQUFBLE9BQU8sT0FBTyxDQUFDLE1BQWUsRUFBRSxNQUFlLEVBQUE7QUFDOUMsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7UUFHaEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUU7QUFDN0MsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDNUMsU0FBQTs7UUFHRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdB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QUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFdEQsT0FBQSxDQUFBLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFckQsT0FBQSxDQUFBLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFeEQsT0FBQSxDQUFBLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFeEQsT0FBQSxDQUFBLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFeEQsT0FBQSxDQUFBLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFxUXZFO0FBQ0EsTUFBTSxlQUFlLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRTtBQUU5RCxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDOUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLO0FBQ3hDLE1BQU0sZUFBZSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDdEMsTUFB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QUFDLENBQUMsRUFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNULE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNULE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDVCxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFDVixNQUFNLENBQUMsRUFBRSxDQUFDLEVBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FDVixDQUFDO0FBQ0YsU0FBQTtRQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxD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LEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDOUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRTVCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUU1QixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFFL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFD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QyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxlQUFlLENBQUMsTUFBYyxFQUFFLEdBQVcsRUFB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QUFDM0IsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUMzQixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXhCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxRQUFRLENBQUMsTUFBZSxFQUFFLEtBQWMsRUFBRSxNQUFlLEVBQUE7UUFDL0QsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUVJLGVBQWEsQ0FBQyxDQUFDO1FBQzlELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDOUMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7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QUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7WUFDN0IsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUM3QixTQUFBO0FBQU0sYUFBQSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksRUFBRTtBQUN0QyxZQUFBLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDN0IsWUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7WUFDcEIsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUM3QixTQUFBO2FBQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFO0FBQ3ZCLFlBQUEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDN0IsWUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7WUFDcEIsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQzdCLFNBQUE7QUFBTSxhQUFBO0FBQ04sWUFBQSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDN0IsWUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDcEIsU0FBQTtBQUNELFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxRQUFRLENBQUMsSUFBYSxFQUFFLEtBQWMsRUFBRSxNQUFlLEVBQUE7QUFDN0QsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFMUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3ZGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN2RixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDeEYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBRXhGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN2RixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDdkYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3hGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUV4RixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFDekYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQ3pGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUMxRixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFFMUYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQzNGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQztB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QyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFFBQVEsQ0FBQyxJQUFhLEVBQUUsS0FBYyxFQUFFLE1BQWUsRUFBQTtBQUM3RCxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxzQkFBc0IsQ0FBQyxJQUFhLEVBQUUsS0FBYyxFQUFFLE1BQWUsRUFBQTtBQUMzRSxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUV4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUUxQixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ3JFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDckUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUV0RSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ3JFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDckUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUV0RSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBQ3RFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUM7QUFDdEUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUV2RSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNqRixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNqRixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUVsRixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLGlCQUFpQixDQUFDLE1BQWUsRUFBRSxRQUFpQixFQUFFLE1BQWUsRUFBQTtBQUMzRSxRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUUxQixRQUFBLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUU1QixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ3JFLFFBQUEsTUFBTSxXQUFXLEdBQUcs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LEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdkUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsRUFBRSxD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QyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUM5QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUM5QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNoQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXhCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFeEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLGdCQUFnQixDQUFDLE1BQWUsRUFBRSxTQUFrQixFQUFFLE1BQWUsRUFBQTtBQUMzRSxRQUFBLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFFdkIsUUFBQSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzdFLFFBQUEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3RSxRQUFBLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUUsUUFBQSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRTlFLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sdUJBQXVCLENBQUMsTUFBZSxFQUFFLFNBQWtCLEVBQUUsTUFBZSxFQUFBO0FBQ2xGLFFBQUEsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRXZCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRTVELFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxlQUFlLENBQUMsTUFBZSxFQUFFLFNBQWtCLEVBQUUsTUFBZSxFQUFBO0FBQzFFLFFBQUEsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRXZCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEUsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXpFLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFlLEVBQUUsTUFBYyxFQUFFLE1BQWUsRUFBQTtRQUN2RSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNqQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNqQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNqQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNqQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNqQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqQyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sTUFBTSxDQUFDLE1BQWUsRUFBRSxNQUFlLEVBQUE7UUFDN0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxTQUFTLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTtBQUNoRCxRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU1QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUNwQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDcEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDckIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3JCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUN0QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxHQUFHLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTtBQUMxQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxD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RyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPO0FBQ3ZDLGdCQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU87QUFDdkMsZ0JBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTztBQUN2QyxnQkFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPO0FBQ3ZDLGdCQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU87QUFDdkMsZ0JBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTztBQUN2QyxnQkFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPO0FBQ3ZDLGdCQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU87QUFDdkMsZ0JBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksT0FBTztBQUN6QyxnQkFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxPQUFPO0FBQ3pDLGdCQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLE9BQU87QUFDekMsZ0JBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksT0FBTztBQUN6QyxnQkFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxPQUFPO0FBQ3pDLGdCQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxFQUMxQztLQUNGO0FBRUQsSUFBQSxPQUFPLGNBQWMsQ0FBQyxNQUFlLEVBQUUsTUFBZSxFQUFBO0FBQ3JELFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxVQUFVLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTtRQUNqRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sT0FBTyxDQUFDLE1BQWUsRUFBRSxNQUFlLEVBQUE7Ozs7O0FBSzlDLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDOztBQUd6QixRQUFBLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDekIsUUFBQSxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN4QixRQUFBLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDekIsUUFBQSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLFFBQUEsSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN6QixRQUFBLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7QUFDeEIsUUFBQSxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN4QixRQUFBLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDekIsUUFBQSxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQzs7UUFHekIsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNqRyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2pHLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbkcsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNuRyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2pHLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDakcsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNuRyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDOztBQUduRyxRQUFBLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFFBQUEsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDbkIsUUFBQSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuQixRQUFBLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFFBQUEsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDbkIsUUFBQSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuQixRQUFBLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFFBQUEsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDbkIsUUFBQSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuQixRQUFBLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFFBQUEsS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDcEIsUUFBQSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQzs7UUFHcEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztRQUN2RyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ3ZHLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDMUcsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztRQUMxRyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ3RHLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDdEcsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN0RyxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFB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TUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRTVCLFFBQUEsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXRCLFFBQUEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUN0RCxRQUFBLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDdEQsUUFBQSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBRXZELFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNwQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDcEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3BCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDcEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3BCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNwQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsUUFBQSxNQUFN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TUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNELFlBQUEsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDcEIsWUFBQSxPQUFPLE1BQU0sQ0FBQztBQUNkLFNBQUE7UUFFRCxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFNUMsUUFBQSxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVqQyxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQztRQUN4QyxVQUFVLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdkMsVUFBVSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUV2QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUV2RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUV2RCxRQUFBLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxNQUFN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Q0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMzQyxZQUFBLE1BQU0sQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDL0MsWUFBQSxNQUFNLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDLFlBQUEsT0FBTyxNQUFNLENBQUM7QUFDZCxTQUFBO0FBRUQsUUFBQSxPQUFPLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDckIsWUFBQSxNQUFNLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzlDLFlBQUEsTUFBTSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNoRCxZQUFBLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDL0MsWUFBQSxPQUFPLE1BQU0sQ0FBQztBQUNkLFNBQUE7QUFFRCxRQUFBLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO0FBQ3JCLFlBQUEsTUFBTSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFD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QyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDekMsSUFBQSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUNqRCxJQUFBLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDO0lBQ2xELE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUMxRCxJQUFBLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqQyxJQUFBLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDekMsSUFBQSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFDLElBQUEsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFFbEQsSUFBQSxNQUFNLFNBQVMsR0FBRzs7QUFFakIsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDOztBQUdMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQzs7QUFHTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7O0FBR0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDOztBQUdMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQzs7QUFHTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7S0FDTCxDQUFDO0FBRUYsSUFBQSxNQUFNLEdBQUcsR0FBRzs7UUFFWCxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7O1FBR2xDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzs7UUFHbEMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDOztRQUdsQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7O1FBR2xDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzs7UUFHbEMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0tBQ2xDLENBQUM7QUFFRixJQUFBLE1BQU0sT0FBTyxHQUFHOztBQUVmLFFBQUEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDOztBQUdwRCxRQUFBLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzs7QUFHcEQsUUFBQSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7O0FBRzFELFFBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDOztBQUcxRCxRQUFBLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzs7QUFHcEQsUUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMs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U0FBUyxDQUFDLENBQUM7QUFDNUQsWUFBQSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzRCxZQUFBLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUN2RSxZQUFBLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEQsWUFBQSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUM1RCxZQUFBLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzNELFlBQUEsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZFLFlBQUEsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDO1lBQ3ZCLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUM3QixZQUFBLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUN0QixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUM7QUFDNUIsWUFBQSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNYLFlBQUEsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFWCxZQUFBLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDO1lBQzVCLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUNoQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7WUFFaEMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDO1lBQ2hDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUNoQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7WUFFaEMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDO1lBQ2hDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUNoQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7WUFFaEMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDO1lBQ2hDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUNqQyxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFFakMsWUFBQSxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLFlBQUEsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsWUFBQSxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUVyQixZQUFBLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFlBQUEsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsWUFBQSxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUVyQixZQUFBLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFlBQUEsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsWUFBQSxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUVyQixZQUFBLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFlBQUEsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDdEIsWUFBQSxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUV0QixZQUFBLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixZQUFBLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRWpCLFlBQUEsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDakIsWUFBQSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUVqQixZQUFBLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLFlBQUEsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFFakIsWUFBQSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQixZQUFBLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRWpCLFlBQUEsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNmLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFdkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNQLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDUCxTQUFBO0FBQ0QsS0FBQTtJQUVELE9BQU87QUFDTixRQUFBLFNBQVMsRUFBRSxTQUFTO0FBQ3BCLFFBQUEsT0FBTyxFQUFFLE9BQU87QUFDaEIsUUFBQSxHQUFHLEVBQUUsR0FBRztBQUNSLFFBQUEsT0FBTyxFQUFFLE9BQU87S0FDaEIsQ0FBQztBQUNIOztBQ3hhcUIsTUFBQSxjQUFlLFNBQVEsUUFBUSxDQUFBO0FBRW5ELElBQUEsV0FBQSxDQUFZLE1BQWMsRUFBQTtBQUN6QixRQUFBLEtBQUssQ0FBQztBQUNMLFlBQUEsSUFBSSxFQUFFLGdCQUFnQjtBQUN0QixTQUFBLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLEdBQUc7QUFDZCxZQUFBLFVBQVUsRUFBRSxJQUFJO1NBQ2hCLENBQUM7QUFDRixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztLQUNaO0lBQ08sSUFBSSxHQUFBO1FBQ1gsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLFlBQVksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQzs7Ozs7QUFLbkYsUUFBQSxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdEMsUUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksZ0JBQWdCLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLFFBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RCxRQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFdEQsUUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0tBQzVCO0FBQ0Q7O0FDM0JvQixNQUFBLFdBQVksU0FBUSxRQUFRLENBQUE7QUFDaEQsSUFBQSxXQUFBLENBQW1CLFFBQWdCLEVBQUUsRUFBUyxTQUFpQixFQUFFLEVBQVMsUUFBZ0IsRUFBRSxFQUFBO0FBQzNGLFFBQUEsS0FBSyxDQUFDO0FBQ0wsWUFBQSxJQUFJLEVBQUUsYUFBYTtBQUNuQixTQUFBLENBQUMsQ0FBQztRQUhlLElBQUssQ0FBQSxLQUFBLEdBQUwsS0FBSyxDQUFhO1FBQVMsSUFBTSxDQUFBLE1BQUEsR0FBTixNQUFNLENBQWE7UUFBUyxJQUFLLENBQUEsS0FBQSxHQUFMLEtBQUssQ0FBYTtRQUkzRixJQUFJLENBQUMsT0FBTyxHQUFHO0FBQ2QsWUFBQSxVQUFVLEVBQUUsSUFBSTtTQUNoQixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0tBQ1o7SUFDTyxJQUFJLEdBQUE7O1FBRVgsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDO0FBQzdDLFlBQUEsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDakQsU0FBQSxDQUFDLENBQUM7QUFDSCxRQUFBLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0QyxRQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEUsUUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksZ0JBQWdCLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlELFFBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0tBQ2hCO0lBQ00sTUFBTSxDQUFDLFVBQVUsRUFBQSxHQUFJO0FBQzVCOztBQ3RCb0IsTUFBQSxpQkFBa0IsU0FBUSxRQUFRLENBQUE7SUFPdEQsV0FBWSxDQUFBLE1BQU0sR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxlQUFlLEdBQUcsRUFBRSxFQUFFLGNBQWMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFBO0FBQ3pGLFFBQUEsS0FBSyxDQUFDO0FBQ0wsWUFBQSxJQUFJLEVBQUUsbUJBQW1CO0FBQ3pCLFNBQUEsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRztBQUNkLFlBQUEsVUFBVSxFQUFFLElBQUk7U0FDaEIsQ0FBQztBQUNGLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixRQUFBLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBQ3ZDLFFBQUEsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDckMsUUFBQSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNYLFFBQUEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDWjtBQUNNLElBQUEsTUFBTSxDQUFDLFVBQVUsRUFBQTtBQUN2QixRQUFtQixVQUFVLENBQUMsUUFBUTtLQUN0QztJQUNPLElBQUksR0FBQTtBQUNYLFFBQUEsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNuRSxRQUFBLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0QyxRQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEUsUUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksZ0JBQWdCLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlELFFBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxRQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDeEIsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7S0FDNUI7SUFDTyxjQUFjLEdBQUE7QUFDckIsUUFBQSxNQUFNLFNBQVMsR0FBRyxFQUFFLEVBQ25CLE9BQU8sR0FBRyxFQUFFLEVBQ1osR0FBRyxHQUFHLEVBQUUsRUFDUixPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7O0FBR3ZELFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUM3QixRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFFN0IsUUFBQSxNQUFNLEVBQUUsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxFQUFFLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUV6QixRQUFBLE1BQU0sQ0FBQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQzs7UUFJeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGVBQWUsRUFBRSxFQUFFLENBQUMsRUFBRTs7QUFHMUMsWUFBQSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxlQUFlLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQzs7O0FBS3ZELFlBQUEsd0JBQXdCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzdELFlBQUEsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQzs7WUFJcEUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDOztZQUU1QixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7O1lBRXZCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7WUFFdkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7WUFLdkIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2QsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBRWQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGNBQWMsRUFBRSxFQUFFLENBQUMsRUFBRTs7O0FBSXpDLGdCQUFBLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLGNBQWMsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxnQkFBQSxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxnQkFBQSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7OztnQkFLbkMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV4QyxnQkFBQSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7O2dCQUc3QyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3JDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUVuQixnQkFBQSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBSTNDLGdCQUFBLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDO0FBQzlCLGdCQUFBLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDO0FBQzdCLGFBQUE7QUFDRCxTQUFBOztRQUlELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxlQUFlLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRTs7QUFHekMsZ0JBQUEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkQsZ0JBQUEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzdDLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLGdCQUFBLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztnQkFJN0MsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEIsYUFBQTtBQUNELFNBQUE7UUFDRCxPQUFPO1lBQ04sT0FBTztZQUNQLEdBQUc7WUFDSCxTQUFTO1lBQ1QsT0FBTztTQUNQLENBQUM7S0FDRjtBQUNELENBQUE7QUFDRCxTQUFTLHdCQUF3QixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUE7SUFDMUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUU3QixJQUFBLFFBQVEsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzFDLElBQUEsUUFBUSxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDMUMsSUFBQSxRQUFRLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQzs7QUMzSXFCLE1BQUEsa0JBQW1CLFNBQVEsUUFBUSxDQUFBO0FBS3ZELElBQUEsV0FBQSxHQUFBO0FBQ0MsUUFBQSxLQUFLLEVBQUUsQ0FBQztBQUNSLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7QUFDcEIsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEMsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDO1lBQ3BDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtBQUNmLFlBQUEsTUFBTSxFQUFFLElBQUk7QUFDWixZQUFBLE9BQU8sRUFBRTtBQUNSLGdCQUFBLGFBQWEsRUFBRSxJQUFJO0FBQ25CLGFBQUE7QUFDRCxTQUFBLENBQUMsQ0FBQztBQUNILFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDbEIsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekMsUUFBQSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUN0QixRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0FBQzdCLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7S0FDN0I7SUFDRCxNQUFNLENBQUMsVUFBc0IsRUFBRSxJQUFVLEVBQUE7QUFDeEMsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSztBQUFFLFlBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2hFO0FBQ1MsSUFBQSxnQkFBZ0IsQ0FBQyxJQUFXLEVBQUE7QUFDckMsUUFBQSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUM1RCxRQUFBLGFBQWEsQ0FBQyxVQUFVLENBQ3ZCLGFBQWEsRUFDYixNQUFLO0FBQ0osWUFBQSxPQUFPLElBQUksQ0FBQztBQUNiLFNBQUMsRUFDRCxXQUFXLENBQUMsSUFBSSxDQUNoQixDQUFDO1FBQ0YsYUFBYSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRCxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdELFFBQUEsYUFBYSxDQUFDLFVBQVUsQ0FDdkIsYUFBYSxFQUNiLE1BQUs7WUFDSixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDMUIsU0FBQyxFQUNELFdBQVcsQ0FBQyxJQUFJLENBQ2hCLENBQUM7UUFDRixhQUFhLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlELGFBQWEsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0QsYUFBYSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN6RCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pFLFlBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDaEcsU0FBQTtRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2hFLFlBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLElBQUksWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQy9GLFNBQUE7S0FDRDtJQUNELE9BQU8sR0FBQTtBQUNOLFFBQUEsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUM3QixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDaEI7QUFDRDs7QUM3RG9CLE1BQUEsV0FBWSxTQUFRLFFBQVEsQ0FBQTtBQStCaEQsSUFBQSxJQUFXLFNBQVMsR0FBQTtRQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7S0FDdkI7SUFDRCxJQUFXLFNBQVMsQ0FBQyxLQUFLLEVBQUE7QUFDekIsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztLQUN4QjtBQUNELElBQUEsSUFBVyxTQUFTLEdBQUE7UUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0tBQ3ZCO0lBQ0QsSUFBVyxTQUFTLENBQUMsQ0FBUyxFQUFBO0FBQzdCLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7S0FDcEI7QUFDRCxJQUFBLElBQVcsa0JBQWtCLEdBQUE7UUFDNUIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7S0FDaEM7SUFDRCxJQUFXLGtCQUFrQixDQUFDLENBQVMsRUFBQTtBQUN0QyxRQUFBLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7S0FDN0I7QUFDRCxJQUFBLElBQVcsV0FBVyxHQUFBO1FBQ3JCLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRTtZQUNuRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFO0FBQ3pELGdCQUFBLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN4RCxhQUFBO0FBQ0QsU0FBQTtRQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztLQUN6QjtJQUNELElBQVcsV0FBVyxDQUFDLENBQVUsRUFBQTtBQUNoQyxRQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0tBQ3RCO0lBQ0QsSUFBVyxTQUFTLENBQUMsS0FBSyxFQUFBO0FBQ3pCLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDeEIsUUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztZQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVU7QUFDeEIsU0FBQSxDQUFDLENBQUM7QUFDSCxRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0tBQ2xCO0FBQ0QsSUFBQSxXQUFBLEdBQUE7QUFDQyxRQUFBLEtBQUssRUFBRSxDQUFDO0FBQ1IsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUV0QixRQUFBLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBRXRCLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFFdEIsUUFBQSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBQy9CLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEMsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN2QixRQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUM7WUFDcEMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ2YsWUFBQSxNQUFNLEVBQUUsSUFBSTtBQUNaLFlBQUEsT0FBTyxFQUFFO0FBQ1IsZ0JBQUEsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVTtBQUN4QixhQUFBO0FBQ0QsU0FBQSxDQUFDLENBQUM7S0FDSDtJQUNELE1BQU0sQ0FBQyxVQUFzQixFQUFFLElBQVUsRUFBQTtBQUN4QyxRQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztZQUFFLE9BQU87UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNuQyxZQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDeEMsU0FBQTtLQUNEO0lBQ1MsZ0JBQWdCLENBQUMsSUFBVSxFQUFFLFVBQXVCLEVBQUE7QUFDN0QsUUFBQSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUMxRCxRQUFBLGFBQWEsQ0FBQyxVQUFVLENBQ3ZCLGFBQWEsRUFDYixNQUFLO1lBQ0osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ3pCLFNBQUMsRUFDRCxXQUFXLENBQUMsSUFBSSxDQUNoQixDQUFDO1FBQ0YsYUFBYSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRCxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdELFFBQUEsYUFBYSxDQUFDLFVBQVUsQ0FDdkIsYUFBYSxFQUNiLE1BQUs7WUFDSixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDMUIsU0FBQyxFQUNELFdBQVcsQ0FBQyxJQUFJLENBQ2hCLENBQUM7UUFDRixhQUFhLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlELGFBQWEsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0QsYUFBYSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5RCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNqRSxZQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ2hHLFNBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRTtZQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQywyQkFBMkIsRUFBRSxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUN4RixZQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUN6QiwyQkFBMkIsRUFDM0IsSUFBSSxDQUFDLHlCQUF5QixJQUFJLFlBQVksQ0FBQyxjQUFjLENBQzdELENBQUM7QUFDRixTQUFBO1FBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLGFBQWEsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNoRSxZQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxJQUFJLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMvRixTQUFBO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3hELFlBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3ZGLGFBQWEsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RSxTQUFBO1FBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNwRSxZQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxlQUFlLElBQUksWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ25HLFNBQUE7QUFDRCxRQUFBLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDMUUsWUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLElBQUksWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3pHLFNBQUE7S0FDRDtJQUNELE9BQU8sR0FBQTtBQUNOLFFBQUEsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUMzQixRQUFBLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDN0IsUUFBQSxJQUFJLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQ2pDLFFBQUEsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUMvQixRQUFBLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7S0FDcEM7QUFDRDs7TUM1S1ksZUFBZSxDQUFBO0FBRTNCLElBQUEsV0FBQSxHQUFBO0FBQ0MsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztLQUNyQjtJQUVELGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUE7QUFDOUIsUUFBQSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUztBQUFFLFlBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFFeEQsUUFBQSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBRWxDLFFBQUEsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ2xDLFlBQUEsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQixTQUFBO0FBRUQsUUFBQSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDN0MsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvQixTQUFBO0tBQ0Q7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFBO0FBQzlCLFFBQUEsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVM7QUFBRSxZQUFBLE9BQU8sS0FBSyxDQUFDO0FBRWhELFFBQUEsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUVsQyxRQUFBLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ2pGO0lBRUQsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBQTtBQUNqQyxRQUFBLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTO1lBQUUsT0FBTztBQUUxQyxRQUFBLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDbEMsUUFBQSxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEMsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFO1lBQ2hDLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFOUMsWUFBQSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNqQixnQkFBQSxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQixhQUFBO0FBQ0QsU0FBQTtLQUNEO0FBRUQsSUFBQSxhQUFhLENBQUMsS0FBSyxFQUFBO0FBQ2xCLFFBQUEsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVM7WUFBRSxPQUFPO0FBRTFDLFFBQUEsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNsQyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVDLElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRTtBQUNoQyxZQUFBLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBRXBCLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFckMsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM3QyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzQixhQUFBO0FBQ0QsWUFBQSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNwQixTQUFBO0tBQ0Q7QUFDRDs7QUNuRGEsTUFBTyxXQUFXLENBQUE7QUFNL0IsSUFBQSxXQUFBLEdBQUE7QUFDQyxRQUFBLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2QsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNqQixRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDbkIsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztLQUNyQjtJQUNELElBQUksR0FBQTtBQUNILFFBQUEsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUN4RixRQUFBLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLHFCQUFxQixDQUFDLENBQUM7S0FDbEc7SUFDRCxZQUFZLENBQ1gsTUFBYyxFQUNkLE9BQWdCLEVBQ2hCLFdBQWtDLEVBQ2xDLGVBQTBCLEVBQzFCLGNBQStCLEVBQy9CLFdBQXlCLEVBQUE7UUFFekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUk7WUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU87WUFDeEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLFdBQVcsQ0FBQyxhQUFhLENBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLGNBQWMsRUFBRSxXQUFXLENBQUMsRUFDakUsT0FBTyxFQUNQLFdBQVcsRUFDWCxNQUFNLENBQ04sQ0FBQztZQUNGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNwQixTQUFDLENBQUMsQ0FBQztLQUNIO0lBQ0QsaUJBQWlCLENBQ2hCLE1BQWMsRUFDZCxPQUFnQixFQUNoQixXQUFrQyxFQUNsQyxlQUEwQixFQUMxQixjQUErQixFQUMvQixXQUF5QixFQUFBO1FBRXpCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFJO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPO1lBQ3hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixXQUFXLENBQUMsYUFBYSxDQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRSxjQUFjLEVBQUUsV0FBVyxDQUFDLEVBQ2pFLE9BQU8sRUFDUCxXQUFXLEVBQ1gsTUFBTSxDQUNOLENBQUM7WUFDRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDcEIsU0FBQyxDQUFDLENBQUM7S0FDSDtJQUNELGFBQWEsQ0FBQyxPQUFnQixFQUFFLFdBQW1DLEVBQUE7UUFDbEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEtBQUk7QUFDN0IsWUFBQSxXQUFXLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdkUsU0FBQyxDQUFDLENBQUM7S0FDSDtJQUNELGdCQUFnQixDQUNmLE1BQWMsRUFDZCxPQUFnQixFQUNoQixXQUFrQyxFQUNsQyxlQUEwQixFQUMxQixjQUErQixFQUFBO1FBRS9CLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFJO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPO1lBQ3hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwQixZQUFBLFdBQVcsQ0FBQyxhQUFhLENBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxFQUNwRCxPQUFPLEVBQ1AsV0FBVyxFQUNYLE1BQU0sQ0FDTixDQUFDO1lBQ0YsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3BCLFNBQUMsQ0FBQyxDQUFDO0tBQ0g7QUFDRCxJQUFBLFNBQVMsQ0FBQyxNQUFjLEVBQUUsT0FBZ0IsRUFBRSxXQUFrQyxFQUFFLGVBQTBCLEVBQUE7UUFDekcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUk7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU87WUFDeEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BCLFlBQUEsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDcEIsU0FBQyxDQUFDLENBQUM7S0FDSDtJQUNELE9BQU8sYUFBYSxDQUFDLE9BQW9CLEVBQUUsT0FBaUIsRUFBRSxXQUFrQyxFQUFFLE1BQWUsRUFBQTtRQUNoSCxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDN0M7QUFDRCxJQUFBLE9BQU8sYUFBYSxDQUFDLE9BQXVCLEVBQUUsT0FBaUIsRUFBRSxXQUFtQyxFQUFBO0FBQ25HLFFBQUEsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7S0FDckM7SUFDRCxLQUFLLEdBQUE7QUFDSixRQUFBLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2QsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNqQixRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDbkIsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztLQUNyQjtBQUNELElBQUEsT0FBTyxxQkFBcUIsQ0FBQyxDQUFPLEVBQUUsQ0FBTyxFQUFBO0FBQzVDLFFBQUEsT0FBTyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztLQUMxRTtBQUVELElBQUEsT0FBTyxxQkFBcUIsQ0FBQyxDQUFPLEVBQUUsQ0FBTyxFQUFBO0FBQzVDLFFBQUEsT0FBTyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztLQUMxRTs7SUFFRCxPQUFPLElBQUksQ0FBSSxRQUFhLEVBQUUsSUFBWSxFQUFFLEVBQVUsRUFBRSxXQUFxQixFQUFBO1FBQzVFLFdBQVcsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7S0FDeEQ7O0lBRU8sT0FBTyxVQUFVLENBQUksQ0FBTSxFQUFFLElBQVksRUFBRSxFQUFVLEVBQUUsV0FBcUIsRUFBQTtBQUNuRixRQUFBLE9BQU8sSUFBSSxFQUFFOztBQUVaLFlBQUEsSUFBSSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsRUFBRTtnQkFDcEIsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDckQsT0FBTztBQUNQLGFBQUE7WUFDRCxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDOztBQUVyQyxZQUFBLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25CLFlBQUEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFOztnQkFFWixNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7Z0JBQ2YsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDUixFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ1QsYUFBQTtZQUNELE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFOztnQkFFYixNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7Z0JBQ2YsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDUixFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNSLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDVCxhQUFBO0FBQU0saUJBQUE7O2dCQUVOLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2hDLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTs7b0JBRVosTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO29CQUNmLEVBQUUsR0FBRyxFQUFFLENBQUM7b0JBQ1IsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNULGlCQUFBO0FBQ0QsYUFBQTs7QUFFRCxZQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixZQUFBLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2YsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLFlBQUEsSUFBSSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN2QixZQUFBLElBQUksVUFBVSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM1QixZQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7OztBQUluQixZQUFBLFNBQVMsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6RCxnQkFBQSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3hDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtvQkFDZCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xCLG9CQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDckIsb0JBQUEsT0FBTyxFQUFFLENBQUM7QUFDVixpQkFBQTtxQkFBTSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7b0JBQ3JCLEdBQUc7QUFDRix3QkFBQSxVQUFVLEVBQUUsQ0FBQzt3QkFDYixJQUFJLFVBQVUsSUFBSSxDQUFDO0FBQUUsNEJBQUEsTUFBTSxTQUFTLENBQUM7QUFDckMsd0JBQUEsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQy9CLHdCQUFBLEtBQUssR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUNyQyxRQUFRLEtBQUssR0FBRyxDQUFDLEVBQUU7b0JBQ3BCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDckIsb0JBQUEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztvQkFDeEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ2Qsd0JBQUEsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDZixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xCLHdCQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDckIsd0JBQUEsT0FBTyxFQUFFLENBQUM7QUFDVixxQkFBQTtBQUNELGlCQUFBO0FBQ0QsYUFBQTtBQUNELFlBQUEsSUFBSSxFQUFFLEdBQUcsVUFBVSxHQUFHLE9BQU8sR0FBRyxJQUFJLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ2hELEVBQUUsR0FBRyxPQUFPLENBQUM7QUFDYixhQUFBO0FBQU0saUJBQUE7Z0JBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxHQUFHLFVBQVUsQ0FBQztBQUNsQixhQUFBO0FBQ0QsU0FBQTtLQUNEO0lBQ08sT0FBTyxjQUFjLENBQUksQ0FBTSxFQUFFLElBQVksRUFBRSxFQUFVLEVBQUUsV0FBcUIsRUFBQTtBQUN2RixRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25DLFlBQUEsSUFBSSxDQUFDLENBQUM7QUFDTixZQUFBLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixZQUFBLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQixnQkFBQSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3hDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtBQUNkLG9CQUFBLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsaUJBQUE7QUFBTSxxQkFBQTtvQkFDTixNQUFNO0FBQ04saUJBQUE7QUFDRCxhQUFBO0FBQ0QsWUFBQSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNuQixTQUFBO0tBQ0Q7QUFDRDs7TUN2TVksVUFBVSxDQUFBO0FBV3RCLElBQUEsV0FBQSxDQUFtQixPQUFnQixFQUFTLFdBQXlCLEVBQUUsVUFBNkIsRUFBRSxFQUFBO1FBQW5GLElBQU8sQ0FBQSxPQUFBLEdBQVAsT0FBTyxDQUFTO1FBQVMsSUFBVyxDQUFBLFdBQUEsR0FBWCxXQUFXLENBQWM7QUFDcEUsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDckMsUUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFDckMsUUFBQSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUN4QixRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDckIsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0tBQ3pCO0FBQ0QsSUFBQSxJQUFJLE9BQU8sR0FBQTtRQUNWLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztLQUNyQjtJQUNELElBQUksT0FBTyxDQUFDLEtBQUssRUFBQTtBQUNoQixRQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDckQ7QUFDRCxJQUFBLE1BQU0sQ0FBQyxNQUFjLEVBQUUsT0FBQSxHQUE2QixFQUFFLEVBQUE7QUFDckQsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFFckMsUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxHQUFHLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMxQyxRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDL0MsUUFBQSxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQztLQUN0QjtBQUVELElBQUEsa0JBQWtCLENBQUMsTUFBYyxFQUFBO0FBQ2hDLFFBQUEsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztLQUMvQztJQUVELE9BQU8sMkJBQTJCLENBQUMsYUFBb0IsRUFBQTtRQUN0RCxPQUFPO1lBQ04sVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVO1NBQ3BDLENBQUM7S0FDRjtBQUNEOztBQzVESyxNQUFPLFlBQWEsU0FBUSxLQUFLLENBQUE7SUFFdEMsV0FBWSxDQUFBLEtBQWMsRUFBRSxTQUFpQixFQUFBO0FBQzVDLFFBQUEsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN4QixRQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQztRQUN4QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDNUU7QUFDRCxJQUFBLElBQUksaUJBQWlCLEdBQUE7UUFDcEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEYsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7S0FDL0I7QUFDRCxDQUFBO0FBQ0Q7O0FDUWMsTUFBTyxXQUFXLENBQUE7QUFxQi9CLElBQUEsV0FBQSxDQUFZLE9BQTJCLEVBQUE7QUFDdEMsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUNyQixRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEUsUUFBQSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztBQUM1QixRQUFBLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztLQUNyQztJQUNELE1BQU0sQ0FBQyxVQUFzQixFQUFFLE1BQWMsRUFBQTtRQUM1QyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztBQUM3QixRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDekI7QUFDRCxJQUFBLEdBQUcsQ0FBQyxLQUFZLEVBQUE7QUFDZixRQUFBLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFFBQUEsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxZQUFZLEVBQUU7QUFDOUMsWUFBQSxJQUFJLENBQUMsWUFBWSxHQUFpQixLQUFLLENBQUM7QUFDeEMsU0FBQTtBQUFNLGFBQUEsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRTtBQUN6RCxZQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFtQixLQUFLLENBQUMsQ0FBQztBQUNoRCxTQUFBO0FBQU0sYUFBQSxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRTtBQUNuRCxZQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFhLEtBQUssQ0FBQyxDQUFDO0FBQ3pDLFNBQUE7QUFBTSxhQUFBLElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFO0FBQ2xELFlBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQVksS0FBSyxDQUFDLENBQUM7QUFDdkMsU0FBQTtLQUNEO0FBQ0QsSUFBQSxNQUFNLENBQUMsS0FBWSxFQUFBO0FBQ2xCLFFBQUEsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDNUIsUUFBQSxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRTtBQUM5QyxZQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0RSxTQUFBO0FBQU0sYUFBQSxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLGdCQUFnQixFQUFFO0FBQ3pELFlBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQW1CLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hGLFNBQUE7QUFBTSxhQUFBLElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFO0FBQ25ELFlBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQWEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEUsU0FBQTtBQUFNLGFBQUEsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUU7QUFDbEQsWUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBWSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyRSxTQUFBO0tBQ0Q7SUFDRCxxQkFBcUIsR0FBQTtBQUNwQixRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNuQyxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLFlBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRTtBQUN0QixnQkFBQSxLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUMxQixnQkFBQSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztBQUM1QixhQUFBO0FBQ0QsU0FBQTtLQUNEO0lBRUQsaUJBQWlCLEdBQUE7UUFDaEIsSUFBSSxJQUFJLENBQUMsOEJBQThCO0FBQUUsWUFBQSxJQUFJLENBQUMsOEJBQThCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUUxRixJQUFJLElBQUksQ0FBQywrQkFBK0I7QUFBRSxZQUFBLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRTVGLElBQUksSUFBSSxDQUFDLGdDQUFnQztBQUFFLFlBQUEsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7S0FDOUY7QUFFTyxJQUFBLFdBQVcsQ0FBQyxNQUFjLEVBQUE7UUFDakMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO0FBQ3pCLFlBQUEsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDN0IsSUFBSSxJQUFJLENBQUMsZUFBZTtBQUFFLGdCQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7QUFDN0IsU0FBQTtLQUNEO0lBQ08scUJBQXFCLEdBQUE7QUFDNUIsUUFBQSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hELFFBQUEsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksYUFBYSxDQUFDO0FBQzNDLFlBQUEsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUUsaUJBQWlCLENBQUMsZUFBZTtBQUN2QyxZQUFBLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPO0FBQ2hELFNBQUEsQ0FBQyxDQUFDO0FBRUgsUUFBQSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFFLFFBQUEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RSxRQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkQsSUFBSSxJQUFJLENBQUMsWUFBWTtZQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUNqQyxjQUFjLEVBQ2QsTUFBSztBQUNKLGdCQUFBLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztBQUM1QyxhQUFDLEVBQ0QsV0FBVyxDQUFDLFNBQVMsQ0FDckIsQ0FBQztBQUNILFFBQUEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTs7WUFFM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FDakMsWUFBWSxFQUNaLE1BQUs7Z0JBQ0osT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO2FBQ3ZCLEVBQ0QsV0FBVyxDQUFDLFVBQVUsRUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQ3RCLENBQUM7QUFDRixTQUFBO0FBQ0QsUUFBQSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFOztZQUU1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUNqQyxhQUFhLEVBQ2IsTUFBSztnQkFDSixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7YUFDeEIsRUFDRCxXQUFXLENBQUMsV0FBVyxFQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FDdkIsQ0FBQztBQUNGLFNBQUE7QUFDRCxRQUFBLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7O1lBRTdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQ2pDLGNBQWMsRUFDZCxNQUFLO2dCQUNKLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQzthQUN6QixFQUNELFdBQVcsQ0FBQyxhQUFhLEVBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUN4QixDQUFDO0FBQ0YsU0FBQTtBQUVELFFBQUEsZ0JBQWdCLEVBQUU7WUFDakIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ3BCLGdCQUFBLE1BQU0sOEJBQThCLElBQUksSUFBSSxDQUFDLDhCQUE4QjtvQkFDMUUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3BELGdCQUFBLE1BQU0sK0JBQStCLElBQUksSUFBSSxDQUFDLCtCQUErQjtvQkFDNUUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3JELGdCQUFBLE1BQU0sZ0NBQWdDLElBQUksSUFBSSxDQUFDLGdDQUFnQztvQkFDOUUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGdCQUFBLElBQ0MsQ0FBQyw4QkFBOEI7QUFDL0Isb0JBQUEsQ0FBQywrQkFBK0I7QUFDaEMsb0JBQUEsQ0FBQyxnQ0FBZ0M7QUFFakMsb0JBQUEsTUFBTSxnQkFBZ0IsQ0FBQzs7Z0JBR3hCLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7O0FBRzlELGdCQUFBLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLGFBQWEsQ0FBQztBQUM1QyxvQkFBQSxLQUFLLEVBQUUsUUFBUTtvQkFDZixJQUFJLEVBQUUsaUJBQWlCLENBQUMsZUFBZTtBQUN2QyxvQkFBQSxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTztBQUNoRCxpQkFBQSxDQUFDLENBQUM7O0FBR0gsZ0JBQUEsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQ3JELGtCQUFrQixFQUNsQixJQUFJLENBQUMsVUFBVSxFQUNmLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FDNUIsQ0FBQztBQUNGLGdCQUFBLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUN0RCxtQkFBbUIsRUFDbkIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsV0FBVyxDQUFDLGlCQUFpQixDQUM3QixDQUFDO0FBQ0YsZ0JBQUEsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQ3ZELG9CQUFvQixFQUNwQixJQUFJLENBQUMsWUFBWSxFQUNqQixXQUFXLENBQUMsbUJBQW1CLENBQy9CLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBRTFFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLDBCQUEwQixFQUFFLHdCQUF3QixDQUFDLENBQUM7Z0JBQ3JGLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLDJCQUEyQixFQUFFLHlCQUF5QixDQUFDLENBQUM7Z0JBQ3ZGLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLDRCQUE0QixFQUFFLDBCQUEwQixDQUFDLENBQUM7O2dCQUd6RixJQUFJLDhCQUE4QixLQUFLLFNBQVMsRUFBRTtvQkFDakQsSUFBSSw4QkFBOEIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSx3QkFBd0I7QUFDcEYsd0JBQUEsT0FBTyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO29CQUN0RCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxnQ0FBZ0MsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDOztBQUVsRyxpQkFBQTtnQkFDRCxJQUFJLCtCQUErQixLQUFLLFNBQVMsRUFBRTtvQkFDbEQsSUFBSSwrQkFBK0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSx5QkFBeUI7QUFDdEYsd0JBQUEsT0FBTyxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO29CQUN2RCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxpQ0FBaUMsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDOztBQUVwRyxpQkFBQTtnQkFDRCxJQUFJLGdDQUFnQyxLQUFLLFNBQVMsRUFBRTtvQkFDbkQsSUFBSSxnQ0FBZ0MsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSwwQkFBMEI7QUFDeEYsd0JBQUEsT0FBTyxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO29CQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FDOUIsa0NBQWtDLEVBQ2xDLGdDQUFnQyxDQUNoQyxDQUFDOztBQUVGLGlCQUFBO2dCQUNELElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUM5QixlQUFlLEVBQ2YsSUFBSSxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxDQUFDLENBQ3ZGLENBQUM7O0FBRUYsYUFBQTtBQUNELFNBQUE7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztLQUN4RTtJQUVNLFlBQVksR0FBQTtRQUNsQixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDbEIsUUFBQSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUMzRTtJQUVELE9BQU8sR0FBQTtBQUNOLFFBQUEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMvQixRQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUNsQztBQUVELElBQUEsMkJBQTJCLENBQUMsTUFBb0IsRUFBQTtBQUMvQyxRQUFBLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDO0FBQUUsWUFBQSxPQUFPLFNBQVMsQ0FBQztRQUN6QyxNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztBQUM1QixRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLFlBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDakIsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDNUQsZ0JBQUEsTUFBTSxlQUFlLEdBQUc7QUFDdkIsb0JBQUEsTUFBTSxFQUFFLGdCQUFnQjtBQUN4QixvQkFBQSxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLO0FBQzlDLG9CQUFBLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU07QUFDaEQsb0JBQUEsS0FBSyxFQUFFLENBQUM7QUFDUixvQkFBQSxDQUFDLEVBQUUsQ0FBQztBQUNKLG9CQUFBLENBQUMsRUFBRSxDQUFDO0FBQ0osb0JBQUEsQ0FBQyxFQUFFLENBQUM7aUJBQ0osQ0FBQztBQUNGLGdCQUFBLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUN2QyxhQUFBO0FBQ0QsU0FBQTtBQUVELFFBQUEsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksQ0FBQztBQUFFLFlBQUEsT0FBTyxTQUFTLENBQUM7QUFFbkQsUUFBQSxNQUFNLHFCQUFxQixHQUFHLElBQUksT0FBTyxDQUFDO0FBQ3pDLFlBQUEsSUFBSSxFQUFFO0FBQ0wsZ0JBQUEsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7QUFDaEMsZ0JBQUEsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Z0JBQ2xDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNO0FBQzlCLGFBQUE7QUFDRCxZQUFBLFNBQVMsRUFBRSxJQUFJO1lBQ2YsVUFBVSxFQUFFLGlCQUFpQixDQUFDLEtBQUs7WUFDbkMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxXQUFXO0FBQ2pDLFlBQUEsS0FBSyxFQUFFLFlBQVksQ0FBQyxjQUFjLEdBQUcsWUFBWSxDQUFDLE9BQU87QUFDekQsWUFBQSxJQUFJLEVBQUUsZ0JBQWdCO1lBQ3RCLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxRQUFRO0FBQzFDLFNBQUEsQ0FBQyxDQUFDO0FBRUgsUUFBQSxPQUFPLHFCQUFxQixDQUFDO0tBQzdCO0FBRUQsSUFBQSxnQkFBZ0IsQ0FBQyxXQUFtQixFQUFFLE1BQW9CLEVBQUUsV0FBd0IsRUFBQTtRQUNuRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7QUFDaEMsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxnQkFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtvQkFBRSxTQUFTO0FBQzVCLGdCQUFBLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqQyxhQUFBO1lBRUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FDbEMsV0FBVyxFQUNYLE1BQUs7QUFDSixnQkFBQSxPQUFPLG9CQUFvQixDQUFDO0FBQzdCLGFBQUMsRUFDRCxXQUFXLEVBQ1gsb0JBQW9CLENBQUMsTUFBTSxDQUMzQixDQUFDO1lBRUYsT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7QUFDbkMsU0FBQTtLQUNEO0FBQ0Q7O0FDclRhLE1BQU8sVUFBVSxDQUFBO0FBRTlCLElBQUEsV0FBQSxHQUFBO0FBQ0MsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7S0FDdkI7QUFDRCxJQUFBLElBQUksTUFBTSxHQUFBO0FBQ1QsUUFBQSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0tBQ3ZCO0lBQ0QsTUFBTSxDQUFDLFVBQXNCLEVBQUUsTUFBYyxFQUFBO1FBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxLQUFJO0FBQy9CLFlBQUEsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckMsU0FBQyxDQUFDLENBQUM7S0FDSDtBQUNELElBQUEsR0FBRyxDQUFDLFFBQWMsRUFBQTtRQUNqQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZDLFFBQUEsT0FBTyxRQUFRLENBQUM7S0FDaEI7QUFDRCxJQUFBLE1BQU0sQ0FBQyxRQUFjLEVBQUE7UUFDcEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQyxZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ1osU0FBQTtBQUNELFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDYjtBQUNELElBQUEsUUFBUSxDQUFDLFFBQWMsRUFBQTtBQUN0QixRQUFBLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN0QztBQUNEOztBQzFCYSxNQUFPLFlBQVksQ0FBQTtJQU9oQyxXQUNRLENBQUEsSUFBYyxFQUNkLGdCQUE4QixFQUM5QixlQUE0QixFQUM1QixpQkFBOEIsRUFDOUIsUUFBbUIsRUFBQTtRQUpuQixJQUFJLENBQUEsSUFBQSxHQUFKLElBQUksQ0FBVTtRQUNkLElBQWdCLENBQUEsZ0JBQUEsR0FBaEIsZ0JBQWdCLENBQWM7UUFDOUIsSUFBZSxDQUFBLGVBQUEsR0FBZixlQUFlLENBQWE7UUFDNUIsSUFBaUIsQ0FBQSxpQkFBQSxHQUFqQixpQkFBaUIsQ0FBYTtRQUM5QixJQUFRLENBQUEsUUFBQSxHQUFSLFFBQVEsQ0FBVztBQUUxQixRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQy9CLFFBQUEsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7QUFDaEMsUUFBQSxJQUFJLENBQUMscUJBQXFCLEdBQUcsU0FBUyxDQUFDO0FBQ3ZDLFFBQUEsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7QUFDaEMsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztLQUN6QjtBQUNELElBQUEsSUFBSSxvQkFBb0IsR0FBQTtBQUN2QixRQUFBLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUM1RCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztLQUNsQztJQUNNLGVBQWUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFBO1FBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QyxRQUFBLElBQUksTUFBTSxFQUFFO1lBQ1gsT0FBTyxNQUFNLENBQUMsT0FBa0IsQ0FBQztBQUNqQyxTQUFBO0FBQU0sYUFBQTtBQUNOLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDWixTQUFBO0tBQ0Q7SUFDTSxlQUFlLEdBQUE7UUFDckIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO0FBQ3pCLFlBQUEsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQWtCLENBQUM7QUFDL0MsU0FBQTtLQUNEO0lBQ08sdUJBQXVCLEdBQUE7UUFDOUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEQsT0FBTztBQUNOLFlBQUEsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUk7Z0JBQzVCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFlLEtBQUk7QUFDL0Qsb0JBQUEsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUksZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNuRixPQUFPO3dCQUNOLElBQUk7O0FBRUgsd0JBQUEsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksU0FBUztBQUNqRCx3QkFBQSxhQUFhLEVBQ1osZUFBZSxDQUFDLGFBQWEsSUFBSSxTQUFTO0FBQ3pDLDhCQUFFLGVBQWUsQ0FBQyxhQUFhLENBQUMsV0FBVztBQUMzQyw4QkFBRSxTQUFTO3dCQUNiLFVBQVUsRUFBRSxlQUFlLENBQUMsS0FBSzt3QkFDakMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxFQUFFO3dCQUMxQixPQUFPLEVBQUUsZUFBZSxDQUFDLE9BQU87cUJBQ0EsQ0FBQztBQUNuQyxpQkFBQyxDQUFDO2FBQ0YsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSztBQUN2RCxnQkFBQSxzQkFBc0IsRUFBRTtvQkFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLFdBQVcsSUFBSSxTQUFTO0FBQzdELG9CQUFBLFdBQVcsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxPQUFPO0FBQ2hELG9CQUFBLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssSUFBSSxHQUFHO0FBQ25ELG9CQUFBLFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLE9BQU8sSUFBSSxPQUFPO0FBQ3RELG9CQUFBLGFBQWEsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLFFBQVEsSUFBSSxLQUFLOzs7O0FBSWYsaUJBQUE7YUFDeEMsQ0FBQztTQUNGLENBQUM7S0FDRjtBQUVNLElBQUEsc0JBQXNCLENBQUMsT0FBZ0IsRUFBQTtRQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87QUFBRSxZQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzFDLFFBQUEsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDaEMsUUFBQSxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0FBQ3BELFFBQUEsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNwRixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7S0FDMUI7SUFDTSxvQkFBb0IsR0FBQTtBQUMxQixRQUFBLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUIsUUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakUsUUFBQSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztBQUMzQixRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0tBQzFCO0FBQ00sSUFBQSx1QkFBdUIsQ0FBQyxPQUFnQixFQUFBO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztBQUFFLFlBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDMUMsUUFBQSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUNoQyxRQUFBLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDN0QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0tBQzNCO0lBQ00scUJBQXFCLEdBQUE7QUFDM0IsUUFBQSxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFFBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLFFBQUEsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDM0IsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztLQUMxQjtJQUNPLFNBQVMsR0FBQTtBQUNoQixRQUFBLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7QUFDL0QsUUFBQSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUM7QUFDOUQsWUFBQSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsTUFBTSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQzNFLGdCQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNELGFBQUE7QUFDRCxTQUFBO1FBQ0QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLGVBQWUsS0FBSTtnQkFDakQsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFO29CQUM1QixNQUFNLElBQUksR0FBRyxlQUFlLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUM7b0JBQ3pELElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsTUFBTSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxDQUFDO3dCQUNuRixlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELGlCQUFBO0FBQ0YsYUFBQyxDQUFDLENBQUM7QUFDSCxTQUFBO0tBQ0Q7SUFDRCxPQUFPLEdBQUE7UUFDTixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxLQUFJO2dCQUNqRCxJQUFJLGVBQWUsQ0FBQyxPQUFPLEVBQUU7QUFDNUIsb0JBQUEsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNsQyxpQkFBQTtBQUNGLGFBQUMsQ0FBQyxDQUFDO0FBQ0gsU0FBQTtBQUNELFFBQUEsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU87QUFBRSxZQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ3pFO0FBQ0Q7O0FDMUhhLE1BQU8sWUFBWSxDQUFBO0FBS2hDLElBQUEsV0FBQSxHQUFBO1FBQ0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FDekIsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN2RyxDQUFDO0FBQ0YsUUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsU0FBUyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvRCxRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxjQUFjLENBQUM7QUFDbEMsWUFBQSxJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7QUFDakIsWUFBQSxRQUFRLEVBQUU7QUFDVCxnQkFBQSxPQUFPLEVBQUU7QUFDUixvQkFBQSxJQUFJLEVBQUUsU0FBUztBQUNmLG9CQUFBLEtBQUssRUFBRSxTQUFTO0FBQ2hCLGlCQUFBO0FBQ0QsZ0JBQUEsT0FBTyxFQUFFO0FBQ1Isb0JBQUEsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsS0FBSyxFQUFFLElBQUksT0FBTyxDQUFDO0FBQ2xCLHdCQUFBLFNBQVMsRUFBRSxRQUFRO0FBQ25CLHdCQUFBLFNBQVMsRUFBRSxRQUFRO3FCQUNuQixDQUFDO0FBQ0YsaUJBQUE7QUFDRCxhQUFBO0FBQ0QsU0FBQSxDQUFDLENBQUM7QUFDSCxRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDdkQ7SUFDRCxNQUFNLENBQUMsT0FBZ0IsRUFBRSxZQUFzQixFQUFBO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCO0FBQUUsWUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7O1FBRTdELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDOztRQUVwRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHO1lBQ3JELFdBQVcsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUMsVUFBVSxFQUFFO1NBQzdELENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFbEQsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFekYsUUFBQSxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0FBRXJELFFBQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixFQUFFLENBQUM7S0FDL0M7QUFDTyxJQUFBLGdCQUFnQixDQUFDLE9BQWdCLEVBQUE7UUFDeEMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1FBQzFELE1BQU0sZUFBZSxHQUFHLElBQUksVUFBVSxDQUNyQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFDaEM7O0FBRUMsWUFBQSxPQUFPLEVBQUU7QUFDUixnQkFBQSxXQUFXLEVBQUUsU0FBUztBQUN0QixhQUFBO0FBQ0QsU0FBQSxDQUNELENBQUM7QUFDRixRQUFBLE1BQU0sWUFBWSxHQUFHLElBQUksT0FBTyxDQUFDO0FBQ2hDLFlBQUEsS0FBSyxFQUFFLGNBQWM7QUFDckIsWUFBQSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtZQUM5QixNQUFNLEVBQUUsYUFBYSxDQUFDLFdBQVc7WUFDakMsS0FBSyxFQUFFLFlBQVksQ0FBQyxnQkFBZ0I7QUFDcEMsU0FBQSxDQUFDLENBQUM7QUFDSCxRQUFBLE1BQU0sZUFBZSxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZFLFFBQUEsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0tBQ3pGO0FBQ0Q7O0FDNUVhLE1BQU8sb0JBQW9CLENBQUE7QUFJeEMsSUFBQSxXQUFBLEdBQUE7QUFDQyxRQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUM5QixRQUFBLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUM7QUFDckMsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7S0FDdkM7QUFDRCxJQUFBLEdBQUcsQ0FBQyxVQUFzQixFQUFBO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDakQ7QUFDRCxJQUFBLE1BQU0sQ0FBQyxVQUFzQixFQUFBO1FBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDckI7SUFDRCxNQUFNLENBQUMsT0FBZ0IsRUFBRSxZQUFxQixFQUFBO0FBQzdDLFFBQUEsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFlBQVksQ0FBQztRQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsS0FBSTtBQUN4QyxZQUFBLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUNqRixTQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztLQUM1RDtBQUNELElBQUEsb0JBQW9CLENBQUMsS0FBYyxFQUFBO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7S0FDekM7SUFDTyxlQUFlLEdBQUE7O0tBRXRCO0FBQ0Q7O0FDM0JELE1BQU0sSUFBSSxDQUFBO0FBUVQsSUFBQSxXQUFBLENBQVksT0FBZ0IsRUFBQTtBQUMzQixRQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0tBQ3ZCO0lBQ0QsTUFBTSxDQUFDLFVBQXNCLEVBQUEsR0FBVTtBQUN2QyxJQUFBLFlBQVksQ0FBQyxPQUFhLEVBQUE7QUFDekIsUUFBQSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEYsSUFBSSxJQUFJLENBQUMsYUFBYTtBQUFFLFlBQUEsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQzNHO0lBQ0QsZUFBZSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUE7UUFDeEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQVksQ0FBQztLQUMzRDtJQUNELGVBQWUsR0FBQTtBQUNkLFFBQUEsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxDQUFDO0tBQzNDO0lBQ0QsV0FBVyxHQUFBO0FBQ1YsUUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDekMsSUFBSSxJQUFJLENBQUMsYUFBYTtBQUFFLFlBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0tBQ25FO0FBQ0Q7O0FDdEJLLE1BQU8sU0FBVSxTQUFRLElBQUksQ0FBQTtBQUVsQyxJQUFBLFdBQUEsQ0FBWSxPQUFnQixFQUFBO1FBQzNCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNmLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNuQjtBQUVELElBQUEsWUFBWSxDQUFDLFVBQXNCLEVBQUE7QUFDbEMsUUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFcEMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO0tBQ3JCO0lBRUQsTUFBTSxDQUFDLFVBQXNCLEVBQUUsTUFBZSxFQUFBO0FBQzdDLFFBQUEsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsR0FBRyxVQUFVLENBQUM7UUFFaEQsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ25CLFFBQUEsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNwRSxRQUFBLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMvRyxRQUFBLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDMUcsUUFBQSxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7S0FDM0U7QUFDTyxJQUFBLElBQUksQ0FBQyxPQUFnQixFQUFBO0FBQzVCLFFBQUEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ2pDO0FBQ08sSUFBQSxrQkFBa0IsQ0FBQyxPQUFnQixFQUFBO0FBQzFDLFFBQUEsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUMvRCxRQUFBLE1BQU0sWUFBWSxHQUFHLElBQUksT0FBTyxDQUFDO0FBQ2hDLFlBQUEsS0FBSyxFQUFFLGdCQUFnQjtBQUN2QixZQUFBLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQzlCLFlBQUEsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCO0FBQ3ZDLFlBQUEsS0FBSyxFQUFFLFlBQVksQ0FBQyxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsY0FBYztBQUNsRSxTQUFBLENBQUMsQ0FBQztBQUNILFFBQUEsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLENBQUM7QUFDaEMsWUFBQSxLQUFLLEVBQUUsZ0JBQWdCO0FBQ3ZCLFlBQUEsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFDOUIsTUFBTSxFQUFFLGFBQWEsQ0FBQyxXQUFXO1lBQ2pDLEtBQUssRUFBRSxZQUFZLENBQUMsZ0JBQWdCO0FBQ3BDLFNBQUEsQ0FBQyxDQUFDO0FBQ0gsUUFBQSxNQUFNLGVBQWUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0FBQ3RHLFFBQUEsTUFBTSxlQUFlLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDdkUsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0tBQ25GO0FBRU8sSUFBQSxrQkFBa0IsQ0FBQyxVQUFzQixFQUFBO0FBQ2hELFFBQUEsSUFBSSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssWUFBWSxLQUFLLEVBQUU7QUFDbkQsWUFBQSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztBQUN6RCxZQUFBLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDO0FBQy9DLFlBQUEsTUFBTSxVQUFVLEdBQUc7QUFDbEIsZ0JBQUEsQ0FBQyxFQUFFLEdBQUc7QUFDTixnQkFBQSxDQUFDLEVBQUUsS0FBSztBQUNSLGdCQUFBLENBQUMsRUFBRSxJQUFJO2dCQUNQLENBQUMsRUFBRSxPQUFPLElBQUksR0FBRzthQUNqQixDQUFDO1lBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDO0FBQ3pELFNBQUE7S0FDRDtBQUNEOztBQzlERDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CRztBQUNILE1BQU0sS0FBSyxDQUFBO0lBUVYsV0FBWSxDQUFBLE1BQWUsRUFBRSxRQUFnQixFQUFBO1FBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUVwQyxRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0tBQ3pCO0lBQ0QsU0FBUyxHQUFBO1FBQ1IsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN2RCxRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RGLFFBQUEsSUFBSSxDQUFDLFFBQVEsSUFBSSxtQkFBbUIsQ0FBQztBQUNyQyxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ1o7QUFFRCxJQUFBLE9BQU8sZUFBZSxDQUFDLEtBQWMsRUFBRSxNQUFlLEVBQUUsTUFBYSxFQUFBO0FBQ3BFLFFBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQ3pFLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBQzlDLFNBQUE7O1FBR0QsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUU3QyxRQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDckIsWUFBQSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNuQyxTQUFBO1FBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLFFBQUEsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDM0IsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFdBQVcsQ0FBQyxZQUFxQixFQUFFLE1BQWEsRUFBQTtRQUN0RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQztBQUNoRSxRQUFBLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7O0FBR2hDLFFBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQ3pFLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBQzlDLFNBQUE7O0FBR0QsUUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3JCLFlBQUEsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbkMsU0FBQTtRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyQyxRQUFBLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQzNCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFZLEVBQUUsS0FBYyxFQUFBO0FBQ25ELFFBQUEsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztLQUN6RDtBQUVELElBQUEsT0FBTyxxQkFBcUIsQ0FBQyxLQUFZLEVBQUUsS0FBYyxFQUFFLE1BQWUsRUFBQTtBQUN6RSxRQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDckIsWUFBQSxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUN2QixTQUFBOztRQUdELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0QsUUFBQSxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUU3RixPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNyRDtBQUVELElBQUEsT0FBTyxTQUFTLENBQUMsS0FBWSxFQUFFLFNBQWtCLEVBQUUsTUFBYSxFQUFBO0FBQy9ELFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUM1QixRQUFBLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDaEMsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDdEYsSUFBSSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQzdHLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDOztRQUdyRyxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUV6RixRQUFBLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQ3pDLGlCQUFpQixFQUNqQixPQUFPLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQ3BDLGlCQUFpQixDQUNqQixDQUFDO1FBRUYsT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3BEO0FBRUQsSUFBQSxPQUFPLEtBQUssQ0FBQyxLQUFZLEVBQUUsTUFBYSxFQUFBO0FBQ3ZDLFFBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyQixPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9DLFNBQUE7UUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLFFBQUEsTUFBTSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0FBRWpDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxNQUFNLENBQUMsSUFBVyxFQUFFLEtBQVksRUFBQTtRQUN0QyxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3JGOztBQXBHYSxLQUFBLENBQUEsZUFBZSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRWhFLEtBQUEsQ0FBQSxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFaEUsS0FBQSxDQUFBLGVBQWUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQWtHL0UsTUFBTSxhQUFhLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNwQyxNQUFNLGdCQUFnQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDdkMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzlDLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUM3QyxNQUFNLHNCQUFzQixHQUFHLElBQUksT0FBTyxFQUFFOztBQ2hJNUM7Ozs7Ozs7QUFPRztBQUNILE1BQU0sYUFBYSxDQUFBO0FBU2xCLElBQUEsV0FBQSxDQUFZLE1BQWdCLEVBQUE7QUFDM0IsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUU7QUFDbEMsWUFBQSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztBQUM5QixZQUFBLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO0FBQzlCLFlBQUEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7QUFDOUIsWUFBQSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztBQUM5QixZQUFBLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO0FBQzlCLFlBQUEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7QUFDOUIsU0FBQSxDQUFDLENBQUM7S0FDSDtBQUNEOzs7Ozs7O0FBT0c7QUFDSCxJQUFBLE9BQU8sa0JBQWtCLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBQTtBQUMvQyxRQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUU7QUFDN0IsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7QUFDL0MsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNyQixZQUFBLE1BQU0sR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0FBQzdCLFNBQUE7QUFFRCxRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDNUIsUUFBQSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzdCLFFBQUEsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBRTNCLFFBQUEsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztBQUNyQyxRQUFBLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFFckMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRW5CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDaEMsWUFBQSxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFNUIsWUFBQSxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDaEMsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUVwQyxZQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3JCLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUM1QyxhQUFBO0FBQ0QsWUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNyQixNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2hELGFBQUE7WUFFRCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDbEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUU1RCxZQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUN4QixZQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUN4QixZQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUN4QixZQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBRXhELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDakUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUU1RCxZQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFlBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekIsWUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUN6QixZQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGtCQUFrQixDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUU1RixVQUFVLElBQUksQ0FBQyxDQUFDO0FBQ2hCLFNBQUE7QUFFRCxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFDRDs7Ozs7QUFLRztBQUNILElBQUEsaUJBQWlCLENBQUMsY0FBYyxFQUFBO0FBQy9CLFFBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtBQUM3QixZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUMvQyxTQUFBO0FBQ0QsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztBQUN6QixRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDbEQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxZQUFBLElBQUksTUFBTSxLQUFLLFNBQVMsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2pDLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQztBQUN6QixhQUFBO0FBQU0saUJBQUEsSUFBSSxNQUFNLEtBQUssU0FBUyxDQUFDLFlBQVksRUFBRTtnQkFDN0MsWUFBWSxHQUFHLElBQUksQ0FBQztBQUNwQixhQUFBO0FBQ0QsU0FBQTtBQUVELFFBQUEsT0FBTyxZQUFZLEdBQUcsU0FBUyxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0tBQ2hFOztBQWpHYSxhQUFZLENBQUEsWUFBQSxHQUFHLFVBQVUsQ0FBQztBQUUxQixhQUFXLENBQUEsV0FBQSxHQUFHLFVBQVUsQ0FBQztBQUV6QixhQUFrQixDQUFBLGtCQUFBLEdBQUcsVUFBVSxDQUFDO0FBZ0cvQyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksT0FBTyxFQUFFLEVBQUUsSUFBSSxPQUFPLEVBQUUsRUFBRSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDNUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFeEMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3pDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNuQixJQUFJLE9BQU8sR0FBRztBQUNmLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRzs7QUNwSHpDLE1BQUEsTUFBTyxTQUFRLFlBQVksQ0FBQTtBQVMvQyxJQUFBLFdBQUEsR0FBQTtBQUNDLFFBQUEsS0FBSyxFQUFFLENBQUM7QUFDUixRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0FBQzdCLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7QUFDcEMsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7QUFDekMsUUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDakMsUUFBQSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0tBQ3hCO0FBQ0QsSUFBQSxJQUFJLFVBQVUsR0FBQTtRQUNiLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztLQUN4QjtBQUNELElBQUEsSUFBSSxnQkFBZ0IsR0FBQTtRQUNuQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztLQUM5QjtBQUVELElBQUEsSUFBSSxRQUFRLEdBQUE7QUFDWCxRQUFBLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztLQUN0QjtBQUVELElBQUEsSUFBSSxpQkFBaUIsR0FBQTtRQUNwQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0tBQ3hCO0FBQ00sSUFBQSxzQkFBc0IsTUFBSztBQUNsQzs7QUFFRztJQUNILGdCQUFnQixHQUFBO0FBQ2YsUUFBQSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDN0QsUUFBQSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3pGLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDekMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDaEIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDWCxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUNYLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQ1gsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDWCxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUNoQixHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUNYLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFDbEIsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUNiLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDbEYsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2xGLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRXRCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNsRixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUV0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDbEYsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ25GLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRXRCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNuRixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUV0QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7S0FDMUI7SUFFRCxnQkFBZ0IsR0FBQTtBQUNmLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRCxNQUFNLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQzdELFFBQUEsYUFBYSxDQUFDLFVBQVUsQ0FDdkIsa0JBQWtCLEVBQ2xCLE1BQUs7WUFDSixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztBQUM5QixTQUFDLEVBQ0QsV0FBVyxDQUFDLElBQUksQ0FDaEIsQ0FBQztBQUNGLFFBQUEsYUFBYSxDQUFDLFVBQVUsQ0FDdkIsWUFBWSxFQUNaLE1BQUs7WUFDSixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDeEIsU0FBQyxFQUNELFdBQVcsQ0FBQyxJQUFJLENBQ2hCLENBQUM7QUFDRixRQUFBLGFBQWEsQ0FBQyxVQUFVLENBQ3ZCLG1CQUFtQixFQUNuQixNQUFLO1lBQ0osT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7QUFDL0IsU0FBQyxFQUNELFdBQVcsQ0FBQyxJQUFJLENBQ2hCLENBQUM7QUFDRixRQUFBLGFBQWEsQ0FBQyxVQUFVLENBQ3ZCLFVBQVUsRUFDVixNQUFLO1lBQ0osT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3RCLFNBQUMsRUFDRCxXQUFXLENBQUMsU0FBUyxDQUNyQixDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7S0FDMUQ7QUFDRDs7QUMxSG9CLE1BQUEsaUJBQWtCLFNBQVEsTUFBTSxDQUFBO0FBYXBELElBQUEsV0FBQSxDQUFZLEdBQUcsR0FBRyxFQUFFLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUE7QUFDdkQsUUFBQSxLQUFLLEVBQUUsQ0FBQztBQUNSLFFBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdEIsUUFBQSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNmLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDakIsUUFBQSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNmLFFBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDakIsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNqQixRQUFBLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7QUFDekIsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7QUFDekMsUUFBQSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0tBQ2hDO0FBQ0QsSUFBQSxJQUFJLE1BQU0sR0FBQTtRQUNULE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztLQUNwQjtJQUVELElBQUksTUFBTSxDQUFDLENBQVMsRUFBQTtBQUNuQixRQUFBLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztLQUNqQjtBQUNELElBQUEsSUFBSSxHQUFHLEdBQUE7UUFDTixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7S0FDakI7SUFFRCxJQUFJLEdBQUcsQ0FBQyxDQUFTLEVBQUE7QUFDaEIsUUFBQSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBQy9CLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7S0FDZDtJQUNPLGlCQUFpQixHQUFBO1FBQ3hCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQzlCO0lBQ00sc0JBQXNCLEdBQUE7UUFDNUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7QUFDekIsWUFBQSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FDL0MsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQ3RCLElBQUksQ0FBQyxHQUFHLEVBQ1IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUN0QixJQUFJLENBQUMsSUFBSSxFQUNULElBQUksQ0FBQyxHQUFHLENBQ1IsQ0FBQztBQUNGLFlBQUEsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztBQUNoQyxTQUFBO0tBQ0Q7QUFDRDs7QUMzRG9CLE1BQUEsc0JBQXVCLFNBQVEsaUJBQWlCLENBQUE7QUFJcEUsSUFBQSxXQUFBLENBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBQTtRQUN2RCxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUIsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxPQUFPLEVBQUUsRUFBRSxJQUFJLE9BQU8sRUFBRSxFQUFFLElBQUksT0FBTyxFQUFFLEVBQUUsSUFBSSxPQUFPLEVBQUUsRUFBRSxJQUFJLE9BQU8sRUFBRSxFQUFFLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztLQUNoSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBNkJELGdCQUFnQixHQUFBO0FBQ2YsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRXBELFFBQUEsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUM7QUFDdkMsWUFBQSxLQUFLLEVBQUUsd0JBQXdCO0FBQy9CLFlBQUEsSUFBSSxFQUFFLG1CQUFtQjtBQUN6QixZQUFBLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPO0FBQ2hELFNBQUEsQ0FBQyxDQUFDO0FBQ0gsUUFBQSxhQUFhLENBQUMsVUFBVSxDQUN2QixVQUFVLEVBQ1YsTUFBSztZQUNKLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN0QixTQUFDLEVBQ0QsV0FBVyxDQUFDLElBQUksQ0FDaEIsQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDekQ7QUFFRCxJQUFBLDJCQUEyQixDQUFDLEtBQWEsRUFBQTtBQUN4QyxRQUFBLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDeEQ7QUFDRDs7TUM1RFksVUFBVSxDQUFBO0lBV3RCLFdBQVksQ0FBQSxhQUFzQixFQUFFLE1BQWMsRUFBQTtBQUNqRCxRQUFBLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO0FBQ3BDLFFBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdEIsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztBQUMxQixRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBRTFCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztLQUNiO0FBRUQsSUFBQSxJQUFJLE1BQU0sR0FBQTtRQUNULE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztLQUNwQjtBQUVELElBQUEsSUFBSSxhQUFhLEdBQUE7UUFDaEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0tBQzNCO0FBRUQsSUFBQSxJQUFJLFNBQVMsR0FBQTtRQUNaLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztLQUN2QjtJQUVNLG1CQUFtQixHQUFBO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztLQUN2QjtJQUVTLEtBQUssR0FBQTtRQUNkLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0tBQzdCO0lBRVMscUJBQXFCLEdBQUE7UUFDOUIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7S0FDL0I7SUFFUyx1QkFBdUIsR0FBQTtBQUNoQyxRQUFBLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxPQUFPLENBQUM7QUFDN0IsWUFBQSxJQUFJLEVBQUU7QUFDTCxnQkFBQSxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzVCLGdCQUFBLE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDN0IsZ0JBQUEsS0FBSyxFQUFFLENBQUM7QUFDUixhQUFBO0FBQ0QsWUFBQSxTQUFTLEVBQUUsSUFBSTtZQUNmLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxLQUFLO1lBQ25DLE1BQU0sRUFBRSxhQUFhLENBQUMsV0FBVztZQUNqQyxLQUFLLEVBQUUsWUFBWSxDQUFDLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxjQUFjLEdBQUcsWUFBWSxDQUFDLE9BQU87QUFDekYsU0FBQSxDQUFDLENBQUM7S0FDSDtJQUVNLE1BQU0sQ0FBQyxLQUFZLEVBQUEsR0FBSTtBQUM5Qjs7QUMxREssTUFBTyxnQkFBaUIsU0FBUSxVQUFVLENBQUE7QUFNL0MsSUFBQSxJQUFJLE1BQU0sR0FBQTtRQUNULE9BQU8sSUFBSSxDQUFDLE9BQWlDLENBQUM7S0FDOUM7QUFFRCxJQUFBLFdBQUEsR0FBQTtBQUNDLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzRCxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLFFBQUEsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUM5QixRQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBRS9CLElBQUksQ0FBQyxVQUFVLEdBQUc7O0FBRWpCLFlBQUEsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRS9CLFlBQUEsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRS9CLFlBQUEsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRS9CLFlBQUEsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRS9CLFlBQUEsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRS9CLFlBQUEsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDL0IsQ0FBQztRQUVGLElBQUksQ0FBQywrQkFBK0IsR0FBRztBQUN0QyxZQUFBLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BCLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBQSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwQixJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLFlBQUEsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEIsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNyQixDQUFDO1FBRUYsSUFBSSxDQUFDLG9CQUFvQixHQUFHO0FBQzNCLFlBQUEsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsWUFBQSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixZQUFBLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLFlBQUEsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsWUFBQSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwQixJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3JCLENBQUM7S0FDRjtBQUVNLElBQUEsTUFBTSxDQUFDLEtBQWlCLEVBQUE7QUFDOUIsUUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzNCO0FBRUQsSUFBQSxjQUFjLENBQUMsS0FBaUIsRUFBQTtBQUMvQixRQUFBLElBQUksSUFBSSxDQUFDLE1BQU0sWUFBWSxzQkFBc0IsRUFBRTtZQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzdDLFlBQUEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztBQUM1RSxZQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztZQUMxRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QixZQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUNuRSxZQUFBLElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLENBQUM7QUFBRSxnQkFBQSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBQ25FLFNBQUE7S0FDRDtBQUNEOztBQ3ZFSyxNQUFPLFVBQVcsU0FBUSxLQUFLLENBQUE7QUFNcEMsSUFBQSxJQUFJLE1BQU0sR0FBQTtRQUNULE9BQU8sSUFBSSxDQUFDLE9BQTJCLENBQUM7S0FDeEM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxLQUF1QixFQUFBO0FBQ2pDLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDeEIsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztLQUNyQjtBQUVELElBQUEsV0FBQSxDQUFZLEtBQWMsRUFBRSxTQUFpQixFQUFFLFFBQVEsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsSUFBSSxFQUFBO0FBQ3hGLFFBQUEsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN4QixRQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQzFCLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDcEIsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztBQUMxQixRQUFBLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO0FBQ3RDLFFBQUEsSUFBSSxVQUFVO0FBQUUsWUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztLQUNyRDtJQUNELElBQUksUUFBUSxDQUFDLEtBQUssRUFBQTtBQUNqQixRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7S0FDdkI7QUFDRCxJQUFBLElBQUksUUFBUSxHQUFBO1FBQ1gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0tBQ3RCO0lBQ0QsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFBO0FBQ2QsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN2QixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0tBQ3BCO0FBQ0QsSUFBQSxJQUFJLEtBQUssR0FBQTtRQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUNuQjtBQUNELENBQUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDTSxNQUFPLFVBQVcsU0FBUSxJQUFJLENBQUE7QUFHbkMsSUFBQSxXQUFBLENBQVksT0FBZ0IsRUFBQTtRQUMzQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDZixRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDbkI7SUFDRCxNQUFNLENBQUMsVUFBc0IsRUFBRSxNQUFlLEVBQUE7UUFDN0MsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEdBQUcsVUFBVSxDQUFDO0FBQ3pELFFBQUEsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzFDLFFBQUEsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO0FBRWhDLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkMsWUFBQSxNQUFNLEtBQUssR0FBdUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLFlBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUM1QixZQUFBLElBQUksQ0FBQyxNQUFNO2dCQUFFLFNBQVM7OztBQUd0QixZQUFBLElBQUksTUFBTSxZQUFZLGdCQUFnQixJQUFJLEtBQUssWUFBWSxVQUFVLEVBQUU7QUFDdEUsZ0JBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOztBQUVqRCxvQkFBQSxRQUFRLENBQUM7QUFDUix3QkFBQSxLQUFLLENBQUM7NEJBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQzs0QkFDL0MsTUFBTTtBQUVQLHdCQUFBOzRCQUNDLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7NEJBQzlDLE1BQU07QUFDUCxxQkFBQTtBQUNELG9CQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO29CQUU5QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLG9CQUFBLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7QUFDekMsb0JBQUEsTUFBTSxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUNoQyxvQkFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDOztvQkFFckIsT0FBTyxDQUFDLFdBQVcsQ0FDbEIsUUFBUSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxFQUMzQixRQUFRLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLEVBQzNCLFlBQVksQ0FBQyxDQUFDLEVBQ2QsWUFBWSxDQUFDLENBQUMsQ0FDZCxDQUFDO29CQUNGLE9BQU8sQ0FBQyxjQUFjLENBQ3JCLFFBQVEsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsRUFDM0IsUUFBUSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxFQUMzQixZQUFZLENBQUMsQ0FBQyxFQUNkLFlBQVksQ0FBQyxDQUFDLENBQ2QsQ0FBQztvQkFDRixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7b0JBQ2pELEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNwQixpQkFBQTtBQUNELGFBQUE7QUFBTSxpQkFBQTtnQkFDTixJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDO0FBQy9DLGdCQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzlCLGdCQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckIsZ0JBQUEsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsZ0JBQUEsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDakQsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3BCLGFBQUE7QUFDRCxTQUFBOztRQUVELFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0tBQ3BDO0FBRUQsSUFBQSxTQUFTLENBQUMsV0FBd0IsRUFBRSxNQUFrQixFQUFFLFdBQXdCLEVBQUE7UUFDL0UsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDOztRQUVuQixXQUFXLENBQUMsaUJBQWlCLENBQzVCLE1BQU0sQ0FBQyxNQUFNLEVBQ2IsSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLElBQUksQ0FBQyxjQUFjLEVBQ25CLGNBQWMsQ0FBQyxNQUFNLEVBQ3JCLFdBQVcsQ0FDWCxDQUFDO1FBQ0YsV0FBVyxDQUFDLFlBQVksQ0FDdkIsTUFBTSxDQUFDLE1BQU0sRUFDYixJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsSUFBSSxDQUFDLGNBQWMsRUFDbkIsY0FBYyxDQUFDLE1BQU0sRUFDckIsV0FBVyxDQUNYLENBQUM7S0FDRjs7OztBQUtELElBQUEsWUFBWSxDQUFDLE9BQStCLEVBQUE7QUFDM0MsUUFBQSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO0FBQzNCLFFBQUEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDckI7QUFFTyxJQUFBLGVBQWUsQ0FBQyxNQUFrQixFQUFBO1FBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztLQUN6RTtBQUVPLElBQUEsSUFBSSxDQUFDLE9BQWdCLEVBQUE7QUFDNUIsUUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7S0FDNUI7QUFDTyxJQUFBLGtCQUFrQixDQUFDLE9BQWdCLEVBQUE7QUFDMUMsUUFBQSxNQUFNLGVBQWUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUNwRSxRQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQztLQUNwRTtJQUVPLG9CQUFvQixHQUFBO0FBQzNCLFFBQUEsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLE9BQU8sR0FBRyxFQUFFLEtBQUk7QUFDaEQsWUFBQSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUNqQztBQUNDLGdCQUFBLFdBQVcsRUFBRSxDQUFDO0FBQ2QsZ0JBQUEsYUFBYSxFQUFFLENBQUM7QUFDaEIsZ0JBQUEsZ0JBQWdCLEVBQUUsQ0FBQzthQUNuQixFQUNELE9BQU8sQ0FDUCxDQUFDO1lBQ0YsT0FBTyxXQUFXLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNwRCxTQUFDLENBQUM7QUFFRixRQUFBLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUM7QUFDeEMsWUFBQSxJQUFJLEVBQUUsZ0JBQWdCO0FBQ3RCLFlBQUEsUUFBUSxFQUFFO2dCQUNULFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtBQUMxQyxhQUFBO0FBQ0QsWUFBQSxJQUFJLEVBQUUsdUJBQXVCO0FBQzdCLFlBQUEsSUFBSSxFQUFFLFNBQVM7WUFDZixLQUFLLEVBQUUsS0FBSztBQUNaLFNBQUEsQ0FBQyxDQUFDO0tBQ0g7QUFDRDs7QUM3SWEsTUFBTyxpQkFBaUIsQ0FBQTtBQUdyQyxJQUFBLFdBQUEsQ0FBbUIsT0FBZ0IsRUFBQTtRQUFoQixJQUFPLENBQUEsT0FBQSxHQUFQLE9BQU8sQ0FBUztRQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7Ozs7Ozs7OztLQVMxQztJQUNELGdCQUFnQixHQUFBO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7S0FFekM7SUFDRCxNQUFNLENBQUMsVUFBc0IsRUFBRSxNQUFlLEVBQUE7UUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRTNDLFFBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLFFBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUM3QjtJQUNELE9BQU8sR0FBQTtBQUNOLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7S0FDM0I7QUFDRDs7QUNuQkssTUFBTyxLQUFNLFNBQVEsZUFBZSxDQUFBO0FBZ0J6QyxJQUFBLFdBQUEsQ0FBWSxPQUFPLEVBQUE7QUFDbEIsUUFBQSxLQUFLLEVBQUUsQ0FBQztBQUNSLFFBQUEsSUFBSSxDQUFDLFNBQVM7WUFDYixPQUFPLENBQUMsU0FBUyxZQUFZLGNBQWM7a0JBQ3hDLE9BQU8sQ0FBQyxTQUFTO2tCQUNqQixRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQyxRQUFBLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUNuQyxRQUFBLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7QUFDdkQsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDO0FBQzFCLFlBQUEsTUFBTSxFQUFFLElBQUk7WUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7QUFDekIsWUFBQSxVQUFVLEVBQUUsQ0FBQztBQUNiLFNBQUEsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztBQUN2RCxRQUFBLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxPQUFPLENBQUMsNkJBQTZCLENBQUM7QUFDM0UsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNuQixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3BCLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO0tBQ3JDO0FBQ08sSUFBQSxNQUFNLElBQUksR0FBQTtBQUNqQixRQUFBLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDeEcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9HLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlHLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7S0FDbEI7QUFDRCxJQUFBLEdBQUcsQ0FBQyxRQUFrQixFQUFBO1FBQ3JCLElBQ0MsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQ3ZHLFFBQVEsQ0FBQyxJQUFJLENBQ2IsRUFDQTtBQUNELFlBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQU8sUUFBUSxDQUFDLENBQUM7QUFDcEMsU0FBQTtBQUFNLGFBQUEsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLGdCQUFnQixDQUFDLEtBQUssRUFBRTtBQUNuRCxZQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFRLFFBQVEsQ0FBQyxDQUFDO0FBQ3RDLFNBQUE7QUFBTSxhQUFBLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU7QUFDeEQsWUFBQSxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFhLFFBQVEsQ0FBQyxDQUFDO0FBQ3BELFNBQUE7S0FDRDtBQUNELElBQUEsTUFBTSxDQUFDLFFBQWtCLEVBQUE7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNwRyxZQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFPLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZDLFNBQUE7QUFBTSxhQUFBLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7QUFDbkQsWUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBUSxRQUFRLENBQUMsQ0FBQztBQUN6QyxTQUFBO0FBQU0sYUFBQSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksZ0JBQWdCLENBQUMsVUFBVSxFQUFFO0FBQ3hELFlBQUEsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBYSxRQUFRLENBQUMsQ0FBQztBQUN2RCxTQUFBO0tBQ0Q7QUFDRCxJQUFBLFNBQVMsQ0FBQyxNQUFNLEVBQUE7QUFDZixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0tBQ3JCO0lBQ0QsTUFBTSxDQUFDLEtBQWEsRUFBRSxNQUFjLEVBQUE7UUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ25DLFFBQUEsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JEO0FBQ0QsSUFBQSxNQUFNLE1BQU0sQ0FBQyxJQUFXLEVBQUUsTUFBZSxFQUFBO0FBQ3hDLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakIsWUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuQixZQUFBLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2xCLFlBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ25CLFNBQUE7QUFBTSxhQUFBO0FBQ04sWUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbkIsU0FBQTtLQUNEO0FBRUQsSUFBQSxXQUFXLE1BQUs7QUFFVCxJQUFBLFdBQVcsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEtBQWEsRUFBRSxNQUFjLEVBQUE7UUFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO0FBQUUsWUFBQSxPQUFPLEtBQUssQ0FBQztBQUM5QixRQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlDLFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDWjtBQUNNLElBQUEsY0FBYyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsS0FBYSxFQUFFLE1BQWMsRUFBQTtRQUN4RSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7QUFBRSxZQUFBLE9BQU8sS0FBSyxDQUFDO0FBQzlCLFFBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakQsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNaO0lBQ08sTUFBTSxDQUFDLElBQVcsRUFBRSxNQUFlLEVBQUE7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTzs7UUFFeEIsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUM7O0FBRWhDLFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7O0FBRTVGLFFBQUEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztBQUV6RSxRQUFBLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztBQUUxRSxRQUFBLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0tBQzlGO0FBQ0Q7O0FDckhhLE1BQU8sVUFBVSxDQUFBO0FBdUI5QixJQUFBLFdBQUEsQ0FBWSxLQUFhLEVBQUUsTUFBYyxFQUFFLEVBQVUsRUFBQTtBQUNwRCxRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ25CLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDeEIsUUFBQSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDbEIsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN6QixRQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDO0tBQ3hDO0lBQ0QsTUFBTSxDQUFDLE9BQWdCLEVBQUUsWUFBcUIsRUFBQTtBQUM3QyxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ1o7SUFDRCxPQUFPLEdBQUE7QUFDTixRQUFBLElBQUksRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsQ0FBQztLQUNyQztBQUNTLElBQUEsVUFBVSxDQUFDLE9BQWdCLEVBQUE7UUFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUMxQyxRQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3RDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEQsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUYsUUFBQSxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0FBQ3JELFFBQUEsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG9CQUFvQixFQUFFLENBQUM7S0FDaEQ7SUFDTyxnQkFBZ0IsR0FBQTtBQUN2QixRQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsUUFBUSxDQUFDLFlBQVksQ0FDcEIsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN2RyxDQUFDO0FBQ0YsUUFBQSxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQzs7QUFFbkIsUUFBQSxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQzs7QUFFNUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ3RDLFFBQUEsV0FBVyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDbEMsUUFBQSxXQUFXLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRXpDLFFBQUEsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0tBQ3BDO0FBQ0Q7O0FDOURvQixNQUFBLGVBQWdCLFNBQVEsVUFBVSxDQUFBO0FBbUJ0RCxJQUFBLFdBQUEsQ0FBWSxPQUE2QixFQUFBO1FBQ3hDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDOUMsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDakMsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDN0IsUUFBQSxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0tBQ1o7SUFDRCxPQUFPLEdBQUE7QUFDTixRQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUNsQztJQUNELE1BQU0sQ0FBQyxPQUFnQixFQUFFLFlBQXFCLEVBQUE7O0FBRTdDLFFBQUEsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUNuRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUM7UUFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO0FBQzNELFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7QUFFekIsUUFBQSxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztBQUNoRCxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUU5RCxZQUFBLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztBQUM3RixZQUFBLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsY0FBYyxDQUFDO1lBQ3pGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFM0QsWUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQzVHLFlBQUEsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxjQUFjLENBQUM7WUFDMUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV6RCxZQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFekIsWUFBQSxpQkFBaUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsU0FBQTs7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDdEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCxRQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7O1FBRXpCLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQztRQUN6RCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQ2xELFFBQUEsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDNUMsUUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pCLFFBQUEsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxFQUFFLENBQUM7S0FDbEQ7SUFDTyxJQUFJLEdBQUE7QUFDWCxRQUFBLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUM7QUFDbEMsUUFBQSxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZixRQUFBLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QyxRQUFBLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUV2QyxRQUFBLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUUvRixRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BDLFlBQUEsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRyxZQUFBLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUN6RCxZQUFBLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEcsWUFBQSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDdEQsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QixTQUFBOztRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRztZQUN2QixRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7QUFDMUMsWUFBQSxRQUFRLEVBQUU7QUFDVCxnQkFBQSxJQUFJLEVBQUUsU0FBUztnQkFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWM7QUFDMUIsYUFBQTtZQUNELGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUM1RCxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7QUFDM0MsWUFBQSxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQzVELGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtTQUM3QyxDQUFDO0FBQ0YsUUFBQSxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLFFBQUEsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUFDO0FBQ2hELFlBQUEsSUFBSSxFQUFFLE9BQU87WUFDYixRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUMvQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO0FBQ2pCLFNBQUEsQ0FBQyxDQUFDOztRQUVILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUMzRCxRQUFBLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFDakMsUUFBQSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDekMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRW5DLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEMsWUFBQSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEcsWUFBQSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUcsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRTVCLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QixTQUFBOztBQUVELFFBQUEsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3RELElBQUksQ0FBQyxhQUFhLEdBQUc7QUFDcEIsWUFBQSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDdkYsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7QUFDbEQsWUFBQSxRQUFRLEVBQUU7QUFDVCxnQkFBQSxJQUFJLEVBQUUsU0FBUztnQkFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWM7QUFDMUIsYUFBQTtTQUNELENBQUM7QUFDRixRQUFBLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLFFBQUEsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGNBQWMsQ0FBQztBQUN2QyxZQUFBLElBQUksRUFBRSxXQUFXO1lBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUM1QixJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7WUFDdEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJO0FBQ3RCLFNBQUEsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDckc7SUFDTyxxQkFBcUIsQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFBO0FBQzFELFFBQUEsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLENBQUM7WUFDaEMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sRUFBRSxhQUFhLENBQUMsVUFBVTtBQUNoQyxZQUFBLEtBQUssRUFBRSxZQUFZLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLGNBQWM7QUFDbEUsU0FBQSxDQUFDLENBQUM7QUFDSCxRQUFBLE1BQU0sZUFBZSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDdEcsUUFBQSxPQUFPLGVBQWUsQ0FBQztLQUN2QjtJQUNPLG9CQUFvQixDQUFDLEtBQWEsRUFBRSxJQUFJLEVBQUE7UUFDL0MsT0FBTyxJQUFJLGNBQWMsQ0FBQztZQUN6QixJQUFJO0FBQ0osWUFBQSxRQUFRLEVBQUU7QUFDVCxnQkFBQSxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7QUFDekYsZ0JBQUEsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFO0FBQ3pGLGdCQUFBLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtBQUN6RixnQkFBQSxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7QUFDekYsZ0JBQUEsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFO0FBQ3pGLGdCQUFBLFFBQVEsRUFBRTtBQUNULG9CQUFBLElBQUksRUFBRSxTQUFTO29CQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYztBQUMxQixpQkFBQTtnQkFDRCxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUN0RCxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xELGdCQUFBLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZFLGdCQUFBLGVBQWUsRUFBRTtBQUNoQixvQkFBQSxJQUFJLEVBQUUsWUFBWTtBQUNsQixvQkFBQSxLQUFLLEVBQUU7QUFDTix3QkFBQSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQix3QkFBQSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQix3QkFBQSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQix3QkFBQSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQix3QkFBQSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixxQkFBQTtBQUNELGlCQUFBO0FBQ0QsYUFBQTtBQUVELFlBQUEsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFJO2FBaUJqQjtBQUVELFlBQUEsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFJO0FBQ2pCLGdCQUFBLENBQUE7Ozs7Ozs7Ozs7OztBQVlpQyxtQ0FBQSxFQUFBLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQTtBQUMzQixtQ0FBQSxFQUFBLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQTtBQUMzQixtQ0FBQSxFQUFBLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQTtBQUMzQixtQ0FBQSxFQUFBLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQTtBQUMzQixtQ0FBQSxFQUFBLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQTtBQUMzQixtQ0FBQSxFQUFBLE9BQU8sQ0FBQyxlQUFlLENBQUE7Ozs7Ozs7Ozs7Ozs7TUFhdEQsQ0FBQzthQUNIO0FBQ0QsU0FBQSxDQUFDLENBQUM7S0FDSDtJQUNPLHdCQUF3QixDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUE7QUFDbEQsUUFBQSxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLFlBQUEsYUFBYSxFQUFFLFlBQVk7QUFDM0IsWUFBQSxLQUFLLEVBQUUsWUFBWTtBQUNuQixZQUFBLGdCQUFnQixFQUFFLENBQUM7QUFDbkIsU0FBQSxDQUFDLENBQUM7QUFDSCxRQUFBLE1BQU0sR0FBRyxHQUFHLElBQUksY0FBYyxDQUFDO1lBQzlCLElBQUk7QUFDSixZQUFBLFFBQVEsRUFBRTtnQkFDVCxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7QUFDMUMsZ0JBQUEsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ3pELGdCQUFBLFFBQVEsRUFBRTtBQUNULG9CQUFBLElBQUksRUFBRSxTQUFTO29CQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYztBQUMxQixpQkFBQTtBQUNELGFBQUE7WUFFRCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFFakIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO0FBQ2pCLFNBQUEsQ0FBQyxDQUFDO0FBQ0gsUUFBQSxHQUFHLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDbkMsUUFBQSxPQUFPLEdBQUcsQ0FBQztLQUNYOztBQTFQTSxlQUFjLENBQUEsY0FBQSxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2QyxlQUFjLENBQUEsY0FBQSxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7O0FDYnpCLE1BQUEsa0JBQW1CLFNBQVEsTUFBTSxDQUFBO0lBUXJELFdBQVksQ0FBQSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUE7QUFDN0UsUUFBQSxLQUFLLEVBQUUsQ0FBQztBQUNSLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDakIsUUFBQSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNmLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDakIsUUFBQSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNmLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNuQixRQUFBLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7S0FDakM7SUFDTyxpQkFBaUIsR0FBQTtBQUN4QixRQUFBLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUN4QyxRQUFBLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUN4QyxRQUFBLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUN4QyxRQUFBLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUN4QyxPQUFPO1lBQ04sSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFO1lBQ2IsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFO1lBQ2QsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFO1lBQ1osTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFO1NBQ2YsQ0FBQztLQUNGO0lBQ00sc0JBQXNCLEdBQUE7UUFDNUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7QUFDNUIsWUFBQSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDOUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakcsWUFBQSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLFNBQUE7S0FDRDtBQUNEOztBQ2xDSyxNQUFPLGVBQWdCLFNBQVEsVUFBVSxDQUFBO0FBRTlDLElBQUEsV0FBQSxHQUFBO0FBQ0MsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkMsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0tBQzlCO0FBRU0sSUFBQSxNQUFNLENBQUMsS0FBZ0IsRUFBQTtBQUM3QixRQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDM0I7QUFFRCxJQUFBLGNBQWMsQ0FBQyxLQUFnQixFQUFBO1FBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFFBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUMzQixRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0tBQzFCO0FBQ0Q7O0FDbkJLLE1BQU8sU0FBVSxTQUFRLEtBQUssQ0FBQTtJQWFuQyxXQUFZLENBQUEsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxJQUFJLEVBQUE7QUFDbEcsUUFBQSxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7QUFDMUIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3RDLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLFFBQVEsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM1QyxRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3BCLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO0FBQ3JDLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztBQUMxQixRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN6QixRQUFBLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDN0IsUUFBQSxJQUFJLFVBQVU7QUFBRSxZQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztLQUNsQztBQUVELElBQUEsSUFBSSxZQUFZLEdBQUE7QUFDZixRQUFBLE9BQU8sSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO0tBQzlDO0lBRUQsSUFBSSxZQUFZLENBQUMsS0FBSyxFQUFBO0FBQ3JCLFFBQUEsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDM0IsUUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztLQUN6QjtBQUVELElBQUEsSUFBSSxXQUFXLEdBQUE7QUFDZCxRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDN0IsUUFBQSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRCxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztLQUNoRDtBQUNELElBQUEsSUFBSSxLQUFLLEdBQUE7UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDbkI7SUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUE7QUFDZCxRQUFBLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztLQUNsQztBQUNELElBQUEsSUFBSSxRQUFRLEdBQUE7UUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7S0FDdEI7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUE7QUFDakIsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztBQUMxQixRQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7S0FDbEM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUE7QUFDakIsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztBQUMxQixRQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0tBQ3ZCO0FBQ0QsSUFBQSxJQUFJLFFBQVEsR0FBQTtRQUNYLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztLQUN0QjtJQUNELElBQUksS0FBSyxDQUFDLEtBQUssRUFBQTtBQUNkLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztLQUNwQjtBQUNELElBQUEsSUFBSSxLQUFLLEdBQUE7UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDbkI7SUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUE7QUFDaEIsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN6QixRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0tBQ3RCO0FBQ0QsSUFBQSxJQUFJLE9BQU8sR0FBQTtRQUNWLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztLQUNyQjtJQUNELElBQUksV0FBVyxDQUFDLEtBQUssRUFBQTtBQUNwQixRQUFBLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDN0IsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztLQUMxQjtBQUNELElBQUEsSUFBSSxXQUFXLEdBQUE7UUFDZCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7S0FDekI7SUFDTywwQkFBMEIsR0FBQTtRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3pEO0FBQ0QsQ0FBQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEdNLE1BQU8sc0JBQXVCLFNBQVEsVUFBVSxDQUFBO0FBRXJELElBQUEsV0FBQSxHQUFBO0FBQ0MsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLGtCQUFrQixDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hFLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkMsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLHdCQUF3QixDQUFDO0tBQ3JDO0FBRU0sSUFBQSxNQUFNLENBQUMsS0FBdUIsRUFBQTtBQUNwQyxRQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDM0I7QUFFRCxJQUFBLGNBQWMsQ0FBQyxLQUF1QixFQUFBO1FBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFFBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUMzQixRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0tBQzFCO0FBQ0Q7O0FDbkJLLE1BQU8sZ0JBQWlCLFNBQVEsS0FBSyxDQUFBO0FBQzFDLElBQUEsV0FBQSxDQUFZLEtBQWMsRUFBRSxTQUFpQixFQUFFLFVBQVUsR0FBRyxJQUFJLEVBQUE7QUFDL0QsUUFBQSxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7QUFDNUMsUUFBQSxJQUFJLFVBQVU7QUFBRSxZQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0tBQzNEO0FBRUQsSUFBQSxJQUFJLFlBQVksR0FBQTtBQUNmLFFBQUEsT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUM7S0FDOUM7SUFFRCxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUE7QUFDckIsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztBQUMzQixRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0tBQ3pCO0FBRUQsSUFBQSxJQUFJLFdBQVcsR0FBQTtBQUNkLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUM3QixRQUFBLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3JELFFBQUEsT0FBTyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7S0FDMUI7QUFDRCxDQUFBO0FBQ0Q7QUFDQTtBQUNBOztBQ3RCcUIsTUFBQSxJQUFLLFNBQVEsWUFBWSxDQUFBO0FBSTdDLElBQUEsV0FBQSxHQUFBO0FBQ0MsUUFBQSxLQUFLLEVBQUUsQ0FBQztBQUNSLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7QUFDbEMsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDMUIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuQixRQUFBLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxFQUFFLENBQUM7S0FDeEI7QUFDRCxJQUFBLEdBQUcsQ0FBQyxJQUFpQixFQUFBO0FBQ3BCLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNsQztBQUNELElBQUEsTUFBTSxDQUFDLElBQWlCLEVBQUE7UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQy9CO0lBQ0QsTUFBTSxDQUFDLFVBQXNCLEVBQUUsTUFBZSxFQUFBO0FBQzdDLFFBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFJO0FBQ2xDLFlBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakMsU0FBQyxDQUFDLENBQUM7S0FDSDtJQUNELE9BQU8sR0FBQTtRQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxLQUFJO1lBQzlCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNoQixTQUFDLENBQUMsQ0FBQztBQUNILFFBQUEsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztLQUN4QjtJQUNELFFBQVEsQ0FBQyxnQkFBMEIsRUFBRSxLQUE4QixFQUFBO0FBQ2xFLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUk7QUFDL0IsZ0JBQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN6QyxhQUFDLENBQUMsQ0FBQztBQUNILFNBQUE7S0FDRDtBQUNEOztBQ2hDSyxNQUFPLFFBQVMsU0FBUSxJQUFJLENBQUE7SUFLakMsV0FBWSxDQUFBLFFBQW1CLEVBQUUsUUFBbUIsRUFBQTtBQUNuRCxRQUFBLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDMUIsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztBQUN0QyxRQUFBLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7S0FDMUI7QUFDRCxJQUFBLFdBQVcsQ0FBQyxJQUFrQixFQUFBO0FBQzdCLFFBQUEsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztBQUNwRCxRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUMxQjtJQUNELE1BQU0sQ0FBQyxVQUFzQixFQUFFLE1BQWUsRUFBQTtBQUM3QyxRQUFBLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQU0sS0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzlFLFFBQUEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZO1lBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7S0FDckQ7SUFDTyxxQkFBcUIsR0FBQTtBQUM1QixRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7WUFBRSxPQUFPO0FBQ3RDLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2hCLFlBQUEsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGFBQWEsQ0FBQztBQUMxQyxnQkFBQSxLQUFLLEVBQUUsa0JBQWtCO2dCQUN6QixJQUFJLEVBQUUsaUJBQWlCLENBQUMsZUFBZTtBQUN2QyxnQkFBQSxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTztBQUNoRCxnQkFBQSxJQUFJLEVBQUUsSUFBSTtBQUNWLGFBQUEsQ0FBQyxDQUFDO0FBQ0gsWUFBQSxNQUFNLFVBQVUsR0FBRyxJQUFJLGFBQWEsQ0FBQztBQUNwQyxnQkFBQSxLQUFLLEVBQUUsWUFBWTtnQkFDbkIsSUFBSSxFQUFFLGlCQUFpQixDQUFDLGVBQWU7QUFDdkMsZ0JBQUEsS0FBSyxFQUFFLFdBQVcsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU87QUFDaEQsZ0JBQUEsSUFBSSxFQUFFLElBQUk7QUFDVixhQUFBLENBQUMsQ0FBQztBQUNILFlBQUEsZ0JBQWdCLENBQUMsVUFBVSxDQUMxQixRQUFRLEVBQ1IsTUFBSztnQkFDSixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7YUFDM0IsRUFDRCxXQUFXLENBQUMsU0FBUyxFQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FDMUIsQ0FBQztBQUNGLFlBQUEsVUFBVSxDQUFDLFVBQVUsQ0FDcEIsV0FBVyxFQUNYLE1BQUs7Z0JBQ0osT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7YUFDaEMsRUFDRCxXQUFXLENBQUMsU0FBUyxFQUNyQixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUMvQixDQUFDO1lBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUNoRixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDcEUsU0FBQTtLQUNEO0FBQ0Q7O0FDbERLLFNBQVUsYUFBYSxDQUFDLElBQVksRUFBRSxNQUFtQixFQUFFLFVBQWtCLEVBQUUsTUFBYyxFQUFBO0FBQ2xHLElBQUEsUUFBUSxJQUFJO0FBQ1gsUUFBQSxLQUFLLElBQUk7WUFDUixPQUFPLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEQsUUFBQSxLQUFLLElBQUk7WUFDUixPQUFPLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkQsUUFBQSxLQUFLLElBQUk7WUFDUixPQUFPLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkQsUUFBQSxLQUFLLElBQUk7WUFDUixPQUFPLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDcEQsUUFBQSxLQUFLLElBQUk7WUFDUixPQUFPLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkQsUUFBQSxLQUFLLElBQUk7WUFDUixPQUFPLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDcEQsUUFBQSxLQUFLLElBQUk7WUFDUixPQUFPLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckQsUUFBQTtBQUNDLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBQzNDLEtBQUE7QUFDRixDQUFDO0FBRUssU0FBVSxTQUFTLENBQUMsS0FBaUIsRUFBQTtBQUMxQyxJQUFBLElBQUksS0FBSyxZQUFZLFdBQVcsSUFBSSxLQUFLLFlBQVksV0FBVyxFQUFFO0FBQ2pFLFFBQUEsT0FBTyxLQUFLLENBQUM7QUFDYixLQUFBO0FBQ0QsSUFBQSxJQUFJLE9BQU8sQ0FBQztJQUNaLElBQUksS0FBSyxZQUFZLFlBQVksRUFBRTtRQUNsQyxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEtBQUE7QUFBTSxTQUFBO1FBQ04sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4QyxLQUFBO0lBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEtBQUk7QUFDaEMsUUFBQSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQzFCLEtBQUMsQ0FBQyxDQUFDO0FBQ0gsSUFBQSxPQUFPLE9BQU8sQ0FBQztBQUNoQixDQUFDO0FBeUNlLFNBQUEsZUFBZSxDQUFDLE9BQTBCLEVBQUUsU0FBcUIsRUFBQTtJQUNoRixNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkQsSUFBQSxNQUFNLFdBQVcsR0FBRyxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0FBQ2hFLElBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUN0QixRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM5QixZQUFBLElBQUksT0FBTyxFQUFFO2dCQUNaLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLGFBQUE7QUFBTSxpQkFBQTtBQUNOLGdCQUFBLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLGFBQUE7QUFDRCxTQUFBO1FBQ0QsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsS0FBSTtBQUMvQyxZQUFBLE1BQU0sS0FBSyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDOUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEYsU0FBQyxDQUFDLENBQUM7QUFDSCxRQUFBLE1BQU0sR0FBRyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDMUIsUUFBQSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEQsUUFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzFCLFFBQUEsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUM3QixRQUFBLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN4RCxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMvQixPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDL0IsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFNBQUE7QUFDRCxLQUFBO0FBQ0QsSUFBQSxPQUFPLE9BQU8sQ0FBQztBQUNoQixDQUFDO0FBeUpNLE1BQU0sUUFBUSxHQUF1QztBQUMzRCxJQUFBLE1BQU0sRUFBRSxDQUFDO0FBQ1QsSUFBQSxJQUFJLEVBQUUsQ0FBQztBQUNQLElBQUEsSUFBSSxFQUFFLENBQUM7QUFDUCxJQUFBLElBQUksRUFBRSxDQUFDO0FBQ1AsSUFBQSxJQUFJLEVBQUUsQ0FBQztBQUNQLElBQUEsSUFBSSxFQUFFLENBQUM7QUFDUCxJQUFBLElBQUksRUFBRSxFQUFFO0FBQ1IsSUFBQSxJQUFJLEVBQUUsQ0FBQztBQUNQLElBQUEsSUFBSSxFQUFFLENBQUM7QUFDUCxJQUFBLElBQUksRUFBRSxDQUFDO0FBQ1AsSUFBQSxJQUFJLEVBQUUsQ0FBQztBQUNQLElBQUEsSUFBSSxFQUFFLENBQUM7QUFDUCxJQUFBLElBQUksRUFBRSxDQUFDO0FBQ1AsSUFBQSxJQUFJLEVBQUUsU0FBUztBQUNmLElBQUEsSUFBSSxFQUFFLFFBQVE7QUFDZCxJQUFBLElBQUksRUFBRSxRQUFRO0FBQ2QsSUFBQSxJQUFJLEVBQUUsUUFBUTtBQUNkLElBQUEsSUFBSSxFQUFFLFFBQVE7QUFDZCxJQUFBLElBQUksRUFBRSxRQUFRO0FBQ2QsSUFBQSxLQUFLLEVBQUUsZUFBZTtBQUN0QixJQUFBLEtBQUssRUFBRSxlQUFlO0FBQ3RCLElBQUEsS0FBSyxFQUFFLFFBQVE7Q0FDZjs7TUN6U1ksUUFBUSxDQUFBO0FBUXBCLElBQUEsV0FBQSxDQUFZLE9BQXNCLEVBQUE7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUNuQyxRQUFBLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUNyQixRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUMzQixRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUMzQyxRQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN6QixRQUFBLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUN2QixRQUFBLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztLQUN2QjtJQUNELFFBQVEsR0FBQTtRQUNQLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDL0I7SUFDRCxZQUFZLEdBQUE7UUFDWCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDbEIsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUMvQyxZQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckcsU0FBQTtBQUNELFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtJQUNELFlBQVksR0FBQTtRQUNYLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNsQixRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO0FBQ2hELFlBQUEsTUFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUMzQixZQUFBLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pFLFlBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQixTQUFBO0FBQ0QsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBQ0Q7O01DbENZLFNBQVMsQ0FBQTtBQUNyQixJQUFBLFdBQUEsQ0FBbUIsSUFBWSxFQUFTLFFBQTRCLEVBQVMsUUFBNEIsRUFBQTtRQUF0RixJQUFJLENBQUEsSUFBQSxHQUFKLElBQUksQ0FBUTtRQUFTLElBQVEsQ0FBQSxRQUFBLEdBQVIsUUFBUSxDQUFvQjtRQUFTLElBQVEsQ0FBQSxRQUFBLEdBQVIsUUFBUSxDQUFvQjtLQUFJO0FBQzdHLElBQUEsSUFBSSxDQUFDLElBQVksRUFBQTtBQUNoQixRQUFBLElBQUksSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztRQUNuQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sS0FBSTtBQUMvQixZQUFBLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDbkMsWUFBQSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEMsWUFBQSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUN4QixZQUFBLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ25CLFFBQVEsTUFBTSxDQUFDLElBQUk7QUFDbEIsZ0JBQUEsS0FBSyxVQUFVO29CQUNkLFVBQVUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDakUsTUFBTTtBQUNQLGdCQUFBLEtBQUssYUFBYTtvQkFDakIsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM1RCxNQUFNO0FBQ1AsZ0JBQUEsS0FBSyxPQUFPO29CQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDekQsTUFBTTtBQUNQLGFBQUE7QUFDRixTQUFDLENBQUMsQ0FBQztLQUNIO0FBQ0Q7O01DeEJZLGdCQUFnQixDQUFBO0FBRzVCLElBQUEsV0FBQSxHQUFBLEdBQWdCO0FBQ2hCOztNQ0xZLHNCQUFzQixDQUFBO0lBR2xDLFdBQVksQ0FBQSxJQUFJLEVBQUUsSUFBSSxFQUFBO0FBQ3JCLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDakIsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztLQUNqQjtBQUNEOztBQ1RELElBQVksbUJBUVgsQ0FBQTtBQVJELENBQUEsVUFBWSxtQkFBbUIsRUFBQTtBQUM5QixJQUFBLG1CQUFBLENBQUEsbUJBQUEsQ0FBQSxRQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxRQUFZLENBQUE7QUFDWixJQUFBLG1CQUFBLENBQUEsbUJBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxNQUFVLENBQUE7QUFDVixJQUFBLG1CQUFBLENBQUEsbUJBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxNQUFVLENBQUE7QUFDVixJQUFBLG1CQUFBLENBQUEsbUJBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxNQUFVLENBQUE7QUFDVixJQUFBLG1CQUFBLENBQUEsbUJBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxNQUFVLENBQUE7QUFDVixJQUFBLG1CQUFBLENBQUEsbUJBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxNQUFVLENBQUE7QUFDVixJQUFBLG1CQUFBLENBQUEsbUJBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsR0FBQSxNQUFXLENBQUE7QUFDWixDQUFDLEVBUlcsbUJBQW1CLEtBQW5CLG1CQUFtQixHQVE5QixFQUFBLENBQUEsQ0FBQTs7TUNMWSxnQkFBZ0IsQ0FBQTtBQVk1QixJQUFBLFdBQUEsR0FBQSxHQUFnQjtJQUNoQixRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBQTtBQUNyQixRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2xELFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDcEQsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLEtBQUssU0FBUyxHQUFHLE9BQU8sQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDO0FBQzVGLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7O0FBRXRCLFFBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pELFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsUUFBQSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDNUQsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUM7S0FDOUQ7QUFDRCxJQUFBLFFBQVEsQ0FBQyxJQUFZLEVBQUE7QUFDcEIsUUFBQSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3hCLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekUsWUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN0QixTQUFBO0FBRUQsUUFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQyxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2pGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwQixTQUFBO0FBRUQsUUFBQSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTs7QUFFakMsWUFBQSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN0QixZQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLFNBQUE7O1FBR0QsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRW5ELFFBQUEsTUFBTSx5QkFBeUIsR0FBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLElBQUksVUFBVSxFQUFFLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNqRixRQUFBLE1BQU0seUJBQXlCLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRyxJQUFJLFVBQVUsRUFBRSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDakYsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZO0FBQUUsWUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsSUFBSSxVQUFVLEVBQUUsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzNGLFFBQUEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUM1QixRQUFBLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDcEIsUUFBQSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBRXJCLFFBQUEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEYsUUFBQSx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RyxRQUFBLHlCQUF5QixDQUFDLEdBQUcsQ0FDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQ25CLENBQUM7UUFDRixRQUFRLElBQUksQ0FBQyxhQUFhO0FBQ3pCLFlBQUEsS0FBSyxRQUFRO0FBQ1osZ0JBQUEsS0FBSyxLQUFLLENBQUM7QUFDVixzQkFBRSxVQUFVLENBQUMsS0FBSyxDQUNKLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDckMsQ0FBQyxFQUNXLElBQUksQ0FBQyxZQUFZLENBQzVCO0FBQ0gsc0JBQUUsT0FBTyxDQUFDLElBQUksQ0FDSCx5QkFBeUIsRUFDekIseUJBQXlCLEVBQ2xDLENBQUMsRUFDUSxJQUFJLENBQUMsWUFBWSxDQUN6QixDQUFDO2dCQUNMLE1BQU07QUFHUCxTQUFBO0tBQ0Q7QUFDRDs7TUNqQ1ksSUFBSSxDQUFBO0lBaUNoQixXQUFZLENBQUEsSUFBUyxFQUFFLE9BQWUsRUFBRSxTQUFTLEdBQUcsQ0FBQyxFQUFFLE1BQW9CLEVBQUE7QUFDMUUsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUNwQyxRQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQzNCLFFBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztBQUNsQyxRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7S0FDakI7QUFDRCxJQUFBLE1BQU0sU0FBUyxHQUFBO1FBQ2QsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0tBQ3ZCO0FBQ08sSUFBQSxXQUFXLENBQUMsS0FBYSxFQUFBO0FBQ2hDLFFBQUEsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzdCO0lBQ08sYUFBYSxHQUFBO0FBQ3BCLFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7Y0FDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2NBQzdFLEVBQUUsQ0FBQztLQUNOO0lBQ08sV0FBVyxHQUFBO0FBQ2xCLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUk7WUFDNUMsTUFBTSxLQUFLLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUk7QUFDMUMsZ0JBQUEsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNCLGFBQUMsQ0FBQyxDQUFDO0FBQ0gsWUFBQSxPQUFPLEtBQUssQ0FBQztBQUNkLFNBQUMsQ0FBQyxDQUFDO0tBQ0g7SUFDTyxhQUFhLEdBQUE7QUFDcEIsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtBQUNqQyxjQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEtBQUk7Z0JBQ25ELE9BQU87b0JBQ04sT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUM3RixPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2lCQUMzQyxDQUFDO0FBQ0YsYUFBQyxDQUFDO2NBQ0YsRUFBRSxDQUFDO0tBQ047SUFDTyxjQUFjLEdBQUE7QUFDckIsUUFBQSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztBQUNuQyxjQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUk7QUFDckQsZ0JBQUEsTUFBTSxHQUFHLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUM5QixnQkFBQSxNQUFNLEVBQ0wsZUFBZSxFQUNmLGNBQWMsRUFDZCx3QkFBd0IsRUFDeEIsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDbEMsSUFBSSxRQUFRLENBQUMsYUFBYTtBQUFFLG9CQUFBLEdBQUcsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDcEcsSUFBSSxRQUFRLENBQUMsZ0JBQWdCO0FBQzVCLG9CQUFBLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUN4RSxJQUFJLFFBQVEsQ0FBQyxlQUFlO0FBQzNCLG9CQUFBLEdBQUcsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUM3RSxnQkFBQSxJQUFJLGdCQUFnQjtBQUFFLG9CQUFBLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDdEYsZ0JBQUEsSUFBSSx3QkFBd0I7QUFDM0Isb0JBQUEsR0FBRyxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3ZGLGdCQUFBLElBQUksZUFBZTtvQkFDbEIsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25GLGdCQUFBLEdBQUcsQ0FBQyxTQUFTLEdBQUcsY0FBYyxJQUFJLEdBQUcsQ0FBQztBQUN0QyxnQkFBQSxHQUFHLENBQUMsU0FBUyxHQUFHLGVBQWUsSUFBSSxHQUFHLENBQUM7QUFDdkMsZ0JBQUEsR0FBRyxDQUFDLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQztBQUM3QixvQkFBQSxTQUFTLEVBQUUsUUFBUTtBQUNuQixvQkFBQSxTQUFTLEVBQUUsUUFBUTtBQUNuQixvQkFBQSxZQUFZLEVBQUUsUUFBUTtBQUN0QixvQkFBQSxZQUFZLEVBQUUsUUFBUTtBQUN0QixpQkFBQSxDQUFDLENBQUM7QUFDSCxnQkFBQSxPQUFPLEdBQUcsQ0FBQztBQUNYLGFBQUMsQ0FBQztjQUNGLEVBQUUsQ0FBQztLQUNOO0lBQ08sY0FBYyxHQUFBO0FBQ3JCLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQXdCLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssS0FBSTtZQUM1RSxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBVyxDQUFDO0FBQzVDLFlBQUEsSUFBSSxLQUFLLENBQUM7QUFDVixZQUFBLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7QUFDdEMsZ0JBQUEsS0FBSyxHQUFHLGFBQWEsQ0FDcEIsUUFBUSxDQUFDLGFBQWEsRUFDdEIsSUFBSSxXQUFXLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEdBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQVksQ0FBQyxFQUNsRixDQUFDLEVBQ0QsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQ2xCLENBQUM7QUFDRixhQUFBO0FBQU0saUJBQUE7Z0JBQ04sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLGFBQUE7WUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7QUFDcEIsZ0JBQUEsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ3RELGdCQUFBLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDckQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7QUFDOUQsZ0JBQUEsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvRCxnQkFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdELGdCQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2xELG9CQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM5Qix3QkFBQSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QyxxQkFBQTtBQUNELGlCQUFBO0FBQ0QsYUFBQTtZQUNELE9BQU8sSUFBSSxRQUFRLENBQUM7QUFDbkIsZ0JBQUEsYUFBYSxFQUFVLFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO2dCQUN2RCxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7QUFDckIsZ0JBQUEsSUFBSSxFQUFFLENBQUM7QUFDUCxnQkFBQSxNQUFNLEVBQUUsS0FBSztBQUNiLGdCQUFBLEVBQUUsRUFBRSxLQUFLO2dCQUNULEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztnQkFDbEIsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0FBQ2xCLGFBQUEsQ0FBQyxDQUFDO0FBQ0osU0FBQyxDQUFDLENBQUM7S0FDSDtJQUNPLGVBQWUsR0FBQTtBQUN0QixRQUFBLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEtBQUssS0FBSTtZQUN0RSxNQUFNLFFBQVEsR0FBRyxhQUFhLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFdBQVcsS0FBSTtBQUM3RCxnQkFBQSxNQUFNLE9BQU8sR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7QUFDdkMsZ0JBQUEsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDcEMsZ0JBQUEsT0FBTyxPQUFPLENBQUM7QUFDaEIsYUFBQyxDQUFDLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxhQUFhLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFdBQVcsS0FBSTtBQUM3RCxnQkFBQSxNQUFNLGdCQUFnQixHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDaEQsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3pELGdCQUFnQixDQUFDLE1BQU0sR0FBRyxJQUFJLHNCQUFzQixDQUNuRCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQ25DLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN2QixDQUFDO0FBQ0YsZ0JBQUEsT0FBTyxnQkFBZ0IsQ0FBQztBQUN6QixhQUFDLENBQUMsQ0FBQztBQUNILFlBQUEsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN0RSxZQUFBLE9BQU8sU0FBUyxDQUFDO0FBQ2xCLFNBQUMsQ0FBQyxDQUFDO0tBQ0g7SUFDTyxVQUFVLEdBQUE7QUFDakIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLFFBQVEsS0FBSTtZQUNwRCxPQUFPO2dCQUNOLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtnQkFDbkIsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxHQUFHLENBQUMsU0FBUyxLQUFJO0FBQ3JELG9CQUFBLE1BQU0sUUFBUSxHQUNiLFNBQVMsQ0FBQyxRQUFRLEtBQUssU0FBUzswQkFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO0FBQ3BDLDBCQUFFLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxFQUFFLENBQUM7b0JBQ2pDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUNyRCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDckMsb0JBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQzFCLG9CQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2IsaUJBQUMsQ0FBQzthQUNGLENBQUM7QUFDSCxTQUFDLENBQUMsQ0FBQztLQUNIO0FBQ08sSUFBQSxVQUFVLENBQUMsV0FBZ0IsRUFBQTtRQUNsQyxPQUFPLElBQUksT0FBTyxDQUFDO1lBQ2xCLFNBQVMsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQWtCO1lBQ25FLFNBQVMsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQWtCO1lBQ25FLFlBQVksRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQW1CO1lBQ3BFLFlBQVksRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQW1CO0FBQ3BFLFNBQUEsQ0FBQyxDQUFDO0tBQ0g7SUFDTyxhQUFhLENBQUMsUUFBYSxFQUFFLENBQVMsRUFBQTtRQUM3QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN6RCxRQUFBLE1BQU0sTUFBTSxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RSxRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNELElBQUksS0FBSyxHQUFHLGFBQWEsQ0FDeEIsUUFBUSxDQUFDLGFBQWEsRUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQy9CLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFDMUQsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUNqQyxDQUFDO1FBQ0YsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2YsWUFBQSxNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxXQUVuQyxDQUFDO1lBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzlELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksTUFBTSxFQUFFO0FBQy9ELGdCQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM5QixvQkFBQSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUIsaUJBQUE7QUFDRCxhQUFBO1lBQ0QsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUNoQixTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNiO0lBQ08sY0FBYyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUE7UUFDekMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztBQUNwQixRQUFBLE1BQU0sT0FBTyxHQUF5QyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUMzRSxRQUFBLElBQUksV0FBVyxDQUFDO1FBQ2hCLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0QsUUFBQSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDdEMsUUFBQSxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQzs7O0FBRzdCLFFBQUEsSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUNwQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDL0MsT0FBTyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUN6QyxZQUFBLFdBQVcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQzdCLFNBQUE7QUFDRCxRQUFBLElBQUksT0FBTyxDQUFDO0FBRVosUUFBQSxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUM5QyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pELFlBQUEsT0FBTyxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUM5QixTQUFBO0FBQU0sYUFBQTtBQUNOLFlBQUEsT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDOUMsU0FBQTtRQUVELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQztBQUNmLFFBQUEsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFDbEQsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM3RCxZQUFBLEdBQUcsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDMUIsWUFBQSxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN0QixTQUFBO0FBRUQsUUFBQSxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtZQUNsRCxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzdELFlBQU8sUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzNCLFlBQUEsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkIsU0FBQTtBQUdELFFBQUEsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQzVGLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUQsWUFBVyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7O0FBRS9CLFNBQUE7YUFBTSxJQUFJLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FFbEM7UUFDRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbEIsUUFBQSxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUMvQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3RELFlBQUEsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDekIsU0FBQTtRQUNELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUNsQixRQUFBLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQ2hELFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0QsWUFBQSxNQUFNLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzdCLFlBQUEsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDeEIsU0FBQTtRQUNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztBQUNuQixRQUFBLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO1lBQ2pELFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUQsWUFBQSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzlCLFNBQUE7UUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELFFBQUEsSUFBSSxPQUFPO1lBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDaEQsUUFBQSxJQUFJLFNBQVM7QUFBRSxZQUFBLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVGLFFBQUEsSUFBSSxPQUFPO0FBQUUsWUFBQSxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RixRQUFBLElBQUksTUFBTTtBQUFFLFlBQUEsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkYsUUFBQSxJQUFJLEdBQUc7QUFBRSxZQUFBLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLFFBQUEsSUFBSSxNQUFNO0FBQUUsWUFBQSxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRixRQUFBLElBQUksT0FBTztBQUFFLFlBQUEsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkYsUUFBQSxHQUFHLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN0QixHQUFHLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ2pELFFBQUEsR0FBRyxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxPQUFPLEdBQUcsQ0FBQztLQUNYO0FBQ08sSUFBQSxhQUFhLENBQUMsTUFBYyxFQUFBO1FBQ25DLE9BQU8sSUFBSSxPQUFPLENBQUM7QUFDbEIsWUFBQSxJQUFJLEVBQUU7Z0JBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSztnQkFDaEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUNsQyxnQkFBQSxLQUFLLEVBQUUsQ0FBQztBQUNSLGFBQUE7QUFDRCxZQUFBLElBQUksRUFBRTtBQUNMLGdCQUFBLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUMzQixhQUFBO0FBQ0QsWUFBQSxNQUFNLEVBQUUsWUFBWTtZQUNwQixLQUFLLEVBQUUsZUFBZSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQyxpQkFBaUI7QUFDckcsU0FBQSxDQUFDLENBQUM7S0FDSDtBQUNPLElBQUEsTUFBTSxVQUFVLEdBQUE7UUFDdkIsTUFBTSxNQUFNLEdBQXVCLEVBQUUsQ0FBQztBQUN0QyxRQUFBLElBQUksa0JBQWtCLEdBQWlCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN6RCxRQUFBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDckIsWUFBQSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxLQUFVLEVBQUUsS0FBYSxLQUFJO2dCQUN4RCxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDZCxvQkFBQSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBRyxFQUFBLElBQUksQ0FBQyxPQUFPLENBQUksQ0FBQSxFQUFBLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDaEcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQzt5QkFDbkMsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQzt5QkFDbkMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUNWLGlCQUFpQixDQUFDLElBQUksRUFBRTtBQUN2Qix3QkFBQSxvQkFBb0IsRUFBRSxNQUFNO0FBQzVCLHFCQUFBLENBQUMsQ0FDRixDQUFDO0FBQ0gsaUJBQUE7YUFDRCxDQUFDLENBQ0YsQ0FBQztBQUNGLFNBQUE7QUFDRCxRQUFBLElBQUksa0JBQWtCLEdBQWlCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN6RCxRQUFBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDckIsWUFBQSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxLQUFVLEVBQUUsS0FBYSxLQUFJO0FBQ3hELGdCQUFBLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7QUFDbkMsb0JBQUEsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ25GLG9CQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUNwQixNQUFNLEtBQUssQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsRUFDdkQsVUFBVSxDQUNWLENBQUM7QUFDRixvQkFBQSxJQUFJLElBQUksQ0FBQztvQkFDVCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7QUFDbkIsd0JBQUEsSUFBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDdEIscUJBQUE7QUFBTSx5QkFBQTtBQUNOLHdCQUFBLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFHLFlBQVksR0FBRyxXQUFXLENBQUM7QUFDdEQscUJBQUE7QUFDRCxvQkFBQSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDekMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0saUJBQWlCLENBQUMsSUFBSSxFQUFFO0FBQzdDLHdCQUFBLG9CQUFvQixFQUFFLE1BQU07QUFDNUIscUJBQUEsQ0FBQyxDQUFDO0FBQ0gsaUJBQUE7YUFDRCxDQUFDLENBQ0YsQ0FBQztBQUNGLFNBQUE7UUFFRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7QUFDNUQsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBQ08sSUFBQSxNQUFNLFVBQVUsR0FBQTtRQUN2QixNQUFNLE9BQU8sR0FBdUIsRUFBRSxDQUFDO0FBQ3ZDLFFBQUEsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFXLEVBQUUsS0FBYSxLQUFJO0FBQ3BELFlBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ2hCLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtBQUNoQixvQkFBQSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDeEMsaUJBQUE7QUFDRCxnQkFBQSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU8sQ0FBQztBQUM5QixnQkFBQSxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN6QixhQUFBO0FBQ0QsWUFBQSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBRyxFQUFBLElBQUksQ0FBQyxPQUFPLENBQUksQ0FBQSxFQUFBLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNwRyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUM7aUJBQ3JCLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDMUMsaUJBQUEsSUFBSSxDQUFDLENBQUMsV0FBd0IsS0FBSTtBQUNsQyxnQkFBQSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQzlCLGFBQUMsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUNGLENBQUM7QUFDRixRQUFBLE9BQU8sT0FBTyxDQUFDO0tBQ2Y7SUFDTyxVQUFVLEdBQUE7QUFDakIsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSTtBQUNoRCxZQUFBLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFDeEIsWUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNsQyxJQUFJLFFBQVEsQ0FBQyxJQUFJO0FBQUUsZ0JBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQzdDLFlBQUEsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRTtBQUMvQixnQkFBQSxJQUFJLFFBQVEsR0FBRyxTQUFTLEVBQ3ZCLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDcEIsZ0JBQUEsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRTtvQkFDL0IsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDMUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUNsQixpQkFBQTtBQUNELGdCQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFlLEVBQUUsS0FBYSxFQUFFLE1BQW1CLEtBQUk7b0JBQ3JHLE1BQU0sYUFBYSxHQUNsQixVQUFVLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJOzBCQUNsRCxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUM7MEJBQ3BELFNBQVMsQ0FBQztvQkFDZCxJQUFJLFVBQVUsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGdCQUFnQixDQUFDLElBQUksRUFBRTtBQUMxRCx3QkFBQSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsYUFBYSxDQUFDO3dCQUM5QixhQUFhLENBQUMsV0FBVyxDQUFDOzRCQUN6QixtQkFBbUIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFlBQVksRUFBRTs0QkFDbEYsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNOzs7QUFHdkIseUJBQUEsQ0FBQyxDQUFDO0FBQ0gscUJBQUE7QUFDRCxvQkFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3pCLGlCQUFDLENBQUMsQ0FBQztBQUNILGFBQUE7QUFDRCxZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2IsU0FBQyxDQUFDLENBQUM7S0FDSDtJQUNPLFlBQVksQ0FBQyxJQUFVLEVBQUUsUUFBdUIsRUFBQTtRQUN2RCxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEdBQUcsUUFBUSxDQUFDO0FBQ3hELFFBQUEsSUFBSSxNQUFNLEVBQUU7WUFDWCxNQUFNLFdBQVcsR0FBRyxJQUFJLE9BQU8sRUFBRSxFQUNoQyxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQUUsRUFDekIsZUFBZSxHQUFHLElBQUksT0FBTyxFQUFFLEVBQy9CLFlBQVksR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLFlBQUEsT0FBTyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNsRCxZQUFBLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3pDLFlBQUEsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDckQsWUFBQSxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUMvQyxZQUFBLFFBQVEsR0FBRyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbEMsWUFBQSxXQUFXLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3hDLFlBQUEsS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM1QixTQUFBO0FBQ0QsUUFBQSxJQUFJLFFBQVE7WUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RixRQUFBLElBQUksV0FBVztZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkYsUUFBQSxJQUFJLEtBQUs7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDWjtJQUNPLGFBQWEsR0FBQTtRQUNwQixJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQVUsRUFBRSxLQUFLLEtBQUk7QUFDeEMsWUFBQSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBYyxLQUFJO2dCQUN6RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLGdCQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDckIsYUFBQyxDQUFDLENBQUM7QUFDSixTQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFJO1lBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFJO0FBQ2pDLGdCQUFBLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRO0FBQzlDLG9CQUFBLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUk7QUFDakQsd0JBQUEsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFTLEtBQUssQ0FBQyxDQUFDO0FBQ2xDLHFCQUFDLENBQUMsQ0FBQztBQUNMLGFBQUMsQ0FBQyxDQUFDO0FBQ0osU0FBQyxDQUFDLENBQUM7S0FDSDtBQUNELENBQUE7QUFDTSxlQUFlLFFBQVEsQ0FBQyxHQUFXLEVBQUE7QUFDekMsSUFBQSxJQUFJLElBQUksQ0FBQztJQUNULE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDakMsSUFBQSxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkQsSUFBSSxHQUFHLEtBQUssTUFBTSxFQUFFO1FBQ25CLE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQyxLQUFBO0FBQU0sU0FBQTtRQUNOLE1BQU0sR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN4RSxRQUFBLE1BQU0sVUFBVSxHQUFHLElBQUksV0FBVyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN0RCxRQUFBLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsUUFBQSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3JELEtBQUE7QUFDRCxJQUFBLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3ZCLElBQUEsT0FBTyxJQUFJLENBQUM7QUFDYjs7QUNwZE8sZUFBZSxXQUFXLENBQUMsR0FBRyxFQUFBO0lBQ3BDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUMsSUFBQSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUEsTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbkIsSUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELElBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxPQUFPLENBQUM7QUFDL0IsUUFBQSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO0FBQ3hFLFFBQUEsSUFBSSxFQUFFO0FBQ0wsWUFBQSxNQUFNLEVBQUUsV0FBVztBQUNuQixTQUFBO0FBQ0QsUUFBQSxNQUFNLEVBQUUsWUFBWTtBQUNwQixLQUFBLENBQUMsQ0FBQztBQUNILElBQUEsT0FBTyxXQUFXLENBQUM7QUFDcEI7O0FDeERBO0FBQ0EsTUFBTSxTQUFTLENBQUE7SUFLZCxXQUFZLENBQUEsTUFBTSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUE7QUFDekMsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixRQUFBLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2YsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUVuQixRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ1o7QUFDRCxJQUFBLEdBQUcsQ0FBQyxNQUFjLEVBQUUsR0FBVyxFQUFFLEtBQWEsRUFBQTtBQUM3QyxRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLFFBQUEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDZixRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBRW5CLFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDWjtBQUNELElBQUEsSUFBSSxDQUFDLEtBQWdCLEVBQUE7QUFDcEIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDM0IsUUFBQSxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDckIsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFFekIsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNaOztJQUVELFFBQVEsR0FBQTtRQUNQLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFNUQsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNaO0FBRUQsSUFBQSxjQUFjLENBQUMsQ0FBVSxFQUFBO0FBQ3hCLFFBQUEsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNsRDtBQUNELElBQUEsc0JBQXNCLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUE7QUFDckQsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUUvQyxRQUFBLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDdEIsWUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNmLFlBQUEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDYixTQUFBO0FBQU0sYUFBQTtZQUNOLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCxTQUFBO0FBRUQsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNaO0lBRUQsS0FBSyxHQUFBO0FBQ0osUUFBQSxPQUFPLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDeEQ7QUFDRDs7QUNwREQ7QUFFQSxNQUFNLFlBQVksR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUN4QyxNQUFNLFdBQVcsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUN0QyxNQUFNLFNBQVMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUViLE1BQUEsWUFBYSxTQUFRLGVBQWUsQ0FBQTtJQXlDdkQsV0FBWSxDQUFBLE1BQU0sRUFBRSxVQUFVLEVBQUE7QUFDNUIsUUFBQSxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksVUFBVSxLQUFLLFNBQVM7QUFDMUIsWUFBQSxPQUFPLENBQUMsSUFBSSxDQUNWLG9FQUFvRSxDQUNyRSxDQUFDO1FBQ0osSUFBSSxVQUFVLEtBQUssUUFBUTtBQUN6QixZQUFBLE9BQU8sQ0FBQyxLQUFLLENBQ1gsb0hBQW9ILENBQ3JILENBQUM7QUFFSixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQzs7QUFHM0MsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzs7QUFHcEIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7O0FBRzVCLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDckIsUUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQzs7QUFHNUIsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNqQixRQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDOzs7QUFJeEIsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7OztBQUk3QixRQUFBLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxRQUFRLENBQUM7QUFDakMsUUFBQSxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQzs7O0FBSWhDLFFBQUEsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDM0IsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzs7O0FBSTFCLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQzs7QUFHckIsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN6QixRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDOztBQUd2QixRQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDcEIsUUFBQSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7OztBQUl2QixRQUFBLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLFFBQUEsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUM7O1FBRzNCLElBQUksQ0FBQyxJQUFJLEdBQUc7QUFDVixZQUFBLElBQUksRUFBRSxXQUFXO0FBQ2pCLFlBQUEsRUFBRSxFQUFFLFNBQVM7QUFDYixZQUFBLEtBQUssRUFBRSxZQUFZO0FBQ25CLFlBQUEsTUFBTSxFQUFFLFdBQVc7U0FDcEIsQ0FBQzs7UUFHRixJQUFJLENBQUMsWUFBWSxHQUFHO1lBQ2xCLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNsQixNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbkIsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHO1NBQ2pCLENBQUM7O0FBR0YsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFHM0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQzs7QUFHOUIsUUFBQSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDOzs7OztRQU1qQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLFlBQUE7QUFDYixZQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7O1lBRTdCLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUMsa0JBQWtCLENBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUNkLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3JCLENBQUM7WUFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFFMUMsWUFBQSxNQUFNLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ25DLFlBQUEsTUFBTSxjQUFjLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUV4QyxZQUFBLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzFCLFlBQUEsT0FBTyxTQUFTLE1BQU0sR0FBQTtBQUNwQixnQkFBQSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUV0QyxnQkFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7O0FBRzVDLGdCQUFBLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRzdCLGdCQUFBLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBRWpDLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLElBQUksRUFBRTtBQUMzQyxvQkFBQSxVQUFVLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztBQUN6QyxpQkFBQTtnQkFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQ3RCLFNBQVMsQ0FBQyxLQUFLLElBQUksY0FBYyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO29CQUM3RCxTQUFTLENBQUMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUMxRCxpQkFBQTtBQUFNLHFCQUFBO0FBQ0wsb0JBQUEsU0FBUyxDQUFDLEtBQUssSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDO0FBQ3hDLG9CQUFBLFNBQVMsQ0FBQyxHQUFHLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQztBQUNyQyxpQkFBQTs7QUFJRCxnQkFBQSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO0FBQy9CLGdCQUFBLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7Z0JBRS9CLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNsQyxvQkFBQSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUFFLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDNUIseUJBQUEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUU7d0JBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUVyQyxvQkFBQSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUFFLEdBQUcsSUFBSSxLQUFLLENBQUM7QUFDNUIseUJBQUEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUU7d0JBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQztvQkFFckMsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFO3dCQUNkLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDakUscUJBQUE7QUFBTSx5QkFBQTtBQUNMLHdCQUFBLFNBQVMsQ0FBQyxLQUFLOzRCQUNiLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7a0NBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUM7a0NBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QyxxQkFBQTtBQUNGLGlCQUFBOztnQkFHRCxTQUFTLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQ3RCLElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQzVDLENBQUM7Z0JBRUYsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBRXJCLGdCQUFBLFNBQVMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDOztnQkFHMUIsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUN6QixJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUM3QyxDQUFDOztBQUlGLGdCQUFBLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDNUQsaUJBQUE7QUFBTSxxQkFBQTtBQUNMLG9CQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVCLGlCQUFBO0FBQ0QsZ0JBQUEsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7O0FBRXpDLGdCQUFBLE1BQU0sQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFcEMsZ0JBQUEsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUV2QyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRWhFLGdCQUFBLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUU7b0JBQy9CLGNBQWMsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7b0JBQy9DLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFFN0Msb0JBQUEsT0FBTyxDQUFDLGdCQUFnQixDQUN0QixTQUFTLEVBQ1QsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQ3RCLFNBQVMsQ0FDVixDQUFDOztBQUVILGlCQUFBO0FBQU0scUJBQUE7b0JBQ0wsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUU1QixTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEIsaUJBQUE7Z0JBRUQsS0FBSyxHQUFHLENBQUMsQ0FBQzs7OztBQU1WLGdCQUFBLElBQ0UsV0FBVztBQUNYLG9CQUFBLE9BQU8sQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRztBQUNqRSxvQkFBQSxDQUFDLElBQUksQ0FBQyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFDMUQ7QUFDQSxvQkFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDOztvQkFHakMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztvQkFDbEQsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQzs7b0JBRXpELFdBQVcsR0FBRyxLQUFLLENBQUM7QUFFcEIsb0JBQUEsT0FBTyxJQUFJLENBQUM7QUFDYixpQkFBQTtBQUVELGdCQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2YsYUFBQyxDQUFDO1NBQ0gsR0FBRyxDQUFDO1FBQ0wsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0tBQ2I7SUFDRCxhQUFhLEdBQUE7QUFDWCxRQUFBLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7S0FDM0I7SUFDRCxpQkFBaUIsR0FBQTtBQUNmLFFBQUEsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztLQUM3QjtJQUVELFdBQVcsR0FBQTtBQUNULFFBQUEsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUM1RDtBQUVELElBQUEsaUJBQWlCLENBQUMsVUFBVSxFQUFBO1FBQzFCLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZELFFBQUEsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFVBQVUsQ0FBQztLQUN4QztJQUVELFNBQVMsR0FBQTtRQUNQLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7O0FBRXpDLFFBQUEsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7O1FBRXBELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7S0FDL0I7SUFFRCxLQUFLLEdBQUE7UUFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztBQUV6QyxRQUFBLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztRQUVwRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBRTlCLFFBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0FBQ3JDLFFBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVqQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFFZCxRQUFBLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0tBQ3BCO0lBRU8sSUFBSSxHQUFBO1FBQ1YsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLENBQUMsWUFBQTtBQUNmLFlBQUEsTUFBTSxDQUFDLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUN4QixZQUFBLE9BQU8sU0FBUyxPQUFPLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBQTtnQkFDNUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2QyxnQkFBQSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5QixnQkFBQSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25CLGFBQUMsQ0FBQztTQUNILEdBQUcsQ0FBQztRQUNMLE1BQU0sS0FBSyxHQUFHLENBQUMsWUFBQTtBQUNiLFlBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUM3QixZQUFBLE9BQU8sU0FBUyxLQUFLLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBQTtBQUMxQyxnQkFBQSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxJQUFJLEVBQUU7QUFDcEMsb0JBQUEsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxpQkFBQTtBQUFNLHFCQUFBO0FBQ0wsb0JBQUEsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQzs7QUFFNUMsb0JBQUEsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0MsaUJBQUE7QUFFRCxnQkFBQSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFbEMsZ0JBQUEsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4QixhQUFDLENBQUM7U0FDSCxHQUFHLENBQUM7O1FBRUwsTUFBTSxHQUFHLEdBQUcsQ0FBQyxZQUFBO0FBQ1gsWUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzdCLFlBQUEsT0FBTyxTQUFTLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFBO0FBQ2hDLGdCQUFBLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDaEMsZ0JBQUEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFOztBQUVuQyxvQkFBQSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUN0QyxvQkFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUMsb0JBQUEsSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDOztvQkFHckMsY0FBYyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDOztBQUd0RSxvQkFBQSxPQUFPLENBQ0wsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLGNBQWMsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUNwRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDeEIsQ0FBQztBQUNGLG9CQUFBLEtBQUssQ0FDSCxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsY0FBYyxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUN4QixDQUFDO0FBQ0gsaUJBQUE7QUFBTSxxQkFBQSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUU7O0FBRTNDLG9CQUFBLE9BQU8sQ0FDTCxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQzt3QkFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJO3dCQUNoQixPQUFPLENBQUMsV0FBVyxFQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDeEIsQ0FBQztBQUNGLG9CQUFBLEtBQUssQ0FDSCxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzt3QkFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJO3dCQUNoQixPQUFPLENBQUMsWUFBWSxFQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDeEIsQ0FBQztBQUNILGlCQUFBO0FBQU0scUJBQUE7O0FBRUwsb0JBQUEsT0FBTyxDQUFDLElBQUksQ0FDViw4RUFBOEUsQ0FDL0UsQ0FBQztBQUNGLG9CQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLGlCQUFBO0FBQ0gsYUFBQyxDQUFDO1NBQ0gsR0FBRyxDQUFDO0FBQ0wsUUFBQSxNQUFNLFFBQVEsR0FBRyxDQUFDLFVBQVUsS0FBSTtBQUM5QixZQUFBLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRTtnQkFDbkMsS0FBSyxJQUFJLFVBQVUsQ0FBQztBQUNyQixhQUFBO0FBQU0saUJBQUEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixFQUFFO0FBQzNDLGdCQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQ3pCLElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUN0RCxDQUFDO0FBQ0YsZ0JBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUNyQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLGFBQUE7QUFBTSxpQkFBQTtBQUNMLGdCQUFBLE9BQU8sQ0FBQyxJQUFJLENBQ1YscUZBQXFGLENBQ3RGLENBQUM7QUFDRixnQkFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUN6QixhQUFBO0FBQ0gsU0FBQyxDQUFDO0FBRUYsUUFBQSxNQUFNLE9BQU8sR0FBRyxDQUFDLFVBQVUsS0FBSTtBQUM3QixZQUFBLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRTtnQkFDbkMsS0FBSyxJQUFJLFVBQVUsQ0FBQztBQUNyQixhQUFBO0FBQU0saUJBQUEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixFQUFFO0FBQzNDLGdCQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQ3pCLElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUN0RCxDQUFDO0FBQ0YsZ0JBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUNyQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLGFBQUE7QUFBTSxpQkFBQTtBQUNMLGdCQUFBLE9BQU8sQ0FBQyxJQUFJLENBQ1YscUZBQXFGLENBQ3RGLENBQUM7QUFDRixnQkFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUN6QixhQUFBO0FBQ0gsU0FBQyxDQUFDO0FBQ0YsUUFBQSxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBSyxLQUFJO1lBQ3RDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFNUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3RELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQzs7QUFHckUsWUFBQSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBRWhDLFlBQUEsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFakUsWUFBQSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxXQUFXLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUUvRCxZQUFBLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDOztZQUd0QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDaEIsU0FBQyxDQUFDO0FBRUYsUUFBQSxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBSyxLQUFJO1lBQ3JDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFM0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDOztBQUduRCxZQUFBLElBQUksVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDcEIsZ0JBQUEsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDMUIsYUFBQTtBQUFNLGlCQUFBLElBQUksVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDM0IsZ0JBQUEsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDekIsYUFBQTtBQUVELFlBQUEsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7O1lBR3BDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNoQixTQUFDLENBQUM7QUFFRixRQUFBLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFLLEtBQUk7WUFDbkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV6QyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDN0MsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDOztZQUc1RCxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFNUIsWUFBQSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQzs7WUFHaEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2hCLFNBQUMsQ0FBQztBQUVGLFFBQUEsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUNqQyxZQUFBLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDcEIsZ0JBQUEsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDekIsYUFBQTtBQUFNLGlCQUFBLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDM0IsZ0JBQUEsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDMUIsYUFBQTtZQUVELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNoQixTQUFDLENBQUM7QUFFRixRQUFBLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBSyxLQUFJO1lBQzlCLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztZQUV4QixRQUFRLEtBQUssQ0FBQyxJQUFJO0FBQ2hCLGdCQUFBLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2Ysb0JBQUEsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3pCLFdBQVcsR0FBRyxJQUFJLENBQUM7b0JBQ25CLE1BQU07QUFFUixnQkFBQSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtvQkFDbkIsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDMUIsV0FBVyxHQUFHLElBQUksQ0FBQztvQkFDbkIsTUFBTTtBQUVSLGdCQUFBLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO0FBQ2pCLG9CQUFBLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN6QixXQUFXLEdBQUcsSUFBSSxDQUFDO29CQUNuQixNQUFNO0FBRVIsZ0JBQUEsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7b0JBQ2xCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzFCLFdBQVcsR0FBRyxJQUFJLENBQUM7b0JBQ25CLE1BQU07QUFDVCxhQUFBO0FBRUQsWUFBQSxJQUFJLFdBQVcsRUFBRTs7Z0JBRWYsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUV2QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDZixhQUFBO0FBQ0gsU0FBQyxDQUFDO1FBRUYsTUFBTSx3QkFBd0IsR0FBRyxNQUFLO1lBQ3BDLElBQUksSUFBSSxDQUFDLFVBQVU7QUFBRSxnQkFBQSxxQkFBcUIsRUFBRSxDQUFDO1lBRTdDLElBQUksSUFBSSxDQUFDLFNBQVM7QUFBRSxnQkFBQSxtQkFBbUIsRUFBRSxDQUFDO0FBQzVDLFNBQUMsQ0FBQztRQUNGLE1BQU0sMkJBQTJCLEdBQUcsTUFBSztZQUN2QyxJQUFJLElBQUksQ0FBQyxVQUFVO0FBQUUsZ0JBQUEscUJBQXFCLEVBQUUsQ0FBQztZQUU3QyxJQUFJLElBQUksQ0FBQyxZQUFZO0FBQUUsZ0JBQUEsc0JBQXNCLEVBQUUsQ0FBQztBQUNsRCxTQUFDLENBQUM7QUFFRixRQUFBLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxLQUFLLEtBQUk7QUFDdEMsWUFBQSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUN4QixTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pDLGFBQUE7QUFBTSxpQkFBQTtBQUNMLGdCQUFBLE1BQU0sUUFBUSxHQUFHLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRWpELGdCQUFBLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxnQkFBQSxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFM0MsZ0JBQUEsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckIsYUFBQTtZQUVELE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUN0RCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7O0FBR3JFLFlBQUEsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUVoQyxZQUFBLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBRWpFLFlBQUEsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDL0QsWUFBQSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQzs7QUFFeEMsU0FBQyxDQUFDO0FBRUYsUUFBQSxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBSyxLQUFJO0FBQ25DLFlBQUEsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QyxhQUFBO0FBQU0saUJBQUE7QUFDTCxnQkFBQSxNQUFNLFFBQVEsR0FBRyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUVqRCxnQkFBQSxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsZ0JBQUEsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRTNDLGdCQUFBLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLGFBQUE7WUFDRCxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDN0MsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDOztZQUk1RCxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFNUIsWUFBQSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQzs7QUFFbEMsU0FBQyxDQUFDO0FBRUYsUUFBQSxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBSyxLQUFJO0FBQ3JDLFlBQUEsTUFBTSxRQUFRLEdBQUcsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFakQsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUVwQyxZQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFFOUMsWUFBQSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUUxQixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUV2RSxZQUFBLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFdkIsWUFBQSxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQzs7QUFFdEMsU0FBQyxDQUFDO0FBRUYsUUFBQSxNQUFNLHVCQUF1QixHQUFHLENBQUMsS0FBSyxLQUFJO1lBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVU7Z0JBQUUsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFakQsSUFBSSxJQUFJLENBQUMsU0FBUztnQkFBRSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRCxTQUFDLENBQUM7QUFFRixRQUFBLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxLQUFLLEtBQUk7WUFDM0MsSUFBSSxJQUFJLENBQUMsVUFBVTtnQkFBRSxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVqRCxJQUFJLElBQUksQ0FBQyxZQUFZO2dCQUFFLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RELFNBQUMsQ0FBQzs7OztBQU1GLFFBQUEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUM3QixZQUFBLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLO2dCQUFFLE9BQU87QUFFbkMsWUFBQSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFFbkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDakUsYUFBQTs7WUFJRCxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFbEIsWUFBQSxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssT0FBTyxFQUFFO2dCQUNqQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckIsYUFBQTtBQUFNLGlCQUFBO2dCQUNMLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwQixhQUFBO0FBQ0gsU0FBQyxDQUFDO0FBRUYsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsS0FBSyxLQUFJO0FBQzdCLFlBQUEsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUs7Z0JBQUUsT0FBTztBQUVuQyxZQUFBLElBQUksS0FBSyxDQUFDLFdBQVcsS0FBSyxPQUFPLEVBQUU7Z0JBQ2pDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwQixhQUFBO0FBQU0saUJBQUE7Z0JBQ0wsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BCLGFBQUE7QUFDSCxTQUFDLENBQUM7QUFFRixRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxLQUFLLEtBQUk7WUFDM0IsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRXJCLFlBQUEsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBRXZELElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDdkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3BFLGFBQUE7QUFFRCxZQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFOUIsWUFBQSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUNyQixTQUFDLENBQUM7QUFFRixRQUFBLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxLQUFJO0FBQzVCLFlBQUEsSUFBSSxXQUFXLENBQUM7WUFFaEIsUUFBUSxLQUFLLENBQUMsTUFBTTtBQUNsQixnQkFBQSxLQUFLLENBQUM7QUFDSixvQkFBQSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7b0JBQ3JDLE1BQU07QUFFUixnQkFBQSxLQUFLLENBQUM7QUFDSixvQkFBQSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7b0JBQ3ZDLE1BQU07QUFFUixnQkFBQSxLQUFLLENBQUM7QUFDSixvQkFBQSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7b0JBQ3RDLE1BQU07QUFFUixnQkFBQTtvQkFDRSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEIsYUFBQTtBQUVELFlBQUEsUUFBUSxXQUFXO2dCQUNqQixLQUFLLEtBQUssQ0FBQyxLQUFLO0FBQ2Qsb0JBQUEsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUs7d0JBQUUsT0FBTztvQkFFdEMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFNUIsb0JBQUEsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7b0JBRXBCLE1BQU07Z0JBRVIsS0FBSyxLQUFLLENBQUMsTUFBTTtvQkFDZixJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ3BELHdCQUFBLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLOzRCQUFFLE9BQU87d0JBRXJDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRTFCLHdCQUFBLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ25CLHFCQUFBO0FBQU0seUJBQUE7QUFDTCx3QkFBQSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSzs0QkFBRSxPQUFPO3dCQUV4QyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUU3Qix3QkFBQSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUN0QixxQkFBQTtvQkFFRCxNQUFNO2dCQUVSLEtBQUssS0FBSyxDQUFDLEdBQUc7b0JBQ1osSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtBQUNwRCx3QkFBQSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSzs0QkFBRSxPQUFPO3dCQUV4QyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUU3Qix3QkFBQSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUN0QixxQkFBQTtBQUFNLHlCQUFBO0FBQ0wsd0JBQUEsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUs7NEJBQUUsT0FBTzt3QkFFckMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFMUIsd0JBQUEsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDbkIscUJBQUE7b0JBRUQsTUFBTTtBQUVSLGdCQUFBO0FBQ0Usb0JBQUEsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsYUFBQTtBQUVELFlBQUEsSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLElBQUksRUFBRTtBQUN4QixnQkFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUE7QUFDSCxTQUFDLENBQUM7QUFFRixRQUFBLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxLQUFJO0FBQzVCLFlBQUEsUUFBUSxLQUFLO2dCQUNYLEtBQUssS0FBSyxDQUFDLE1BQU07QUFDZixvQkFBQSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSzt3QkFBRSxPQUFPO29CQUV4QyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFFN0IsTUFBTTtnQkFFUixLQUFLLEtBQUssQ0FBQyxLQUFLO0FBQ2Qsb0JBQUEsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUs7d0JBQUUsT0FBTztvQkFFdEMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBRTVCLE1BQU07Z0JBRVIsS0FBSyxLQUFLLENBQUMsR0FBRztBQUNaLG9CQUFBLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLO3dCQUFFLE9BQU87b0JBRXJDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUUxQixNQUFNO0FBQ1QsYUFBQTtBQUNILFNBQUMsQ0FBQztBQUVGLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEtBQUssS0FBSTtBQUM1QixZQUFBLElBQ0UsSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLO2dCQUN0QixJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUs7Z0JBQ3pCLEtBQUssS0FBSyxLQUFLLENBQUMsSUFBSTtnQkFFcEIsT0FBTztZQUVULEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUV2QixZQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFaEMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFeEIsWUFBQSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2hDLFNBQUMsQ0FBQztBQUVGLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQUssS0FBSTtZQUN6QixJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSztnQkFBRSxPQUFPO1lBRS9ELGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2QixTQUFDLENBQUM7QUFFRixRQUFBLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBSyxLQUFJO1lBQzdCLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVwQixRQUFRLFFBQVEsQ0FBQyxNQUFNO0FBQ3JCLGdCQUFBLEtBQUssQ0FBQztBQUNKLG9CQUFBLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHO3dCQUN0QixLQUFLLEtBQUssQ0FBQyxNQUFNO0FBQ2YsNEJBQUEsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUs7Z0NBQUUsT0FBTztBQUV4Qyw0QkFBQSxzQkFBc0IsRUFBRSxDQUFDO0FBRXpCLDRCQUFBLEtBQUssR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDOzRCQUUzQixNQUFNO3dCQUVSLEtBQUssS0FBSyxDQUFDLEdBQUc7QUFDWiw0QkFBQSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSztnQ0FBRSxPQUFPO0FBRXJDLDRCQUFBLG1CQUFtQixFQUFFLENBQUM7QUFFdEIsNEJBQUEsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7NEJBRXhCLE1BQU07QUFFUix3QkFBQTtBQUNFLDRCQUFBLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ3RCLHFCQUFBO29CQUVELE1BQU07QUFFUixnQkFBQSxLQUFLLENBQUM7QUFDSixvQkFBQSxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRzt3QkFDdEIsS0FBSyxLQUFLLENBQUMsU0FBUzs0QkFDbEIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUs7Z0NBQUUsT0FBTztBQUVsRSw0QkFBQSx3QkFBd0IsRUFBRSxDQUFDO0FBRTNCLDRCQUFBLEtBQUssR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDOzRCQUU5QixNQUFNO3dCQUVSLEtBQUssS0FBSyxDQUFDLFlBQVk7NEJBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLO2dDQUMxRCxPQUFPO0FBRVQsNEJBQUEsMkJBQTJCLEVBQUUsQ0FBQztBQUU5Qiw0QkFBQSxLQUFLLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDOzRCQUVqQyxNQUFNO0FBRVIsd0JBQUE7QUFDRSw0QkFBQSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUN0QixxQkFBQTtvQkFFRCxNQUFNO0FBRVIsZ0JBQUE7QUFDRSxvQkFBQSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUN0QixhQUFBO0FBRUQsWUFBQSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFO0FBQ3hCLGdCQUFBLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDakMsYUFBQTtBQUNILFNBQUMsQ0FBQztBQUVGLFFBQUEsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFLLEtBQUk7WUFDNUIsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRXBCLFlBQUEsUUFBUSxLQUFLO2dCQUNYLEtBQUssS0FBSyxDQUFDLFlBQVk7QUFDckIsb0JBQUEsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUs7d0JBQUUsT0FBTztvQkFFeEMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBRTdCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFFZCxNQUFNO2dCQUVSLEtBQUssS0FBSyxDQUFDLFNBQVM7QUFDbEIsb0JBQUEsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUs7d0JBQUUsT0FBTztvQkFFckMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBRTFCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFFZCxNQUFNO2dCQUVSLEtBQUssS0FBSyxDQUFDLGVBQWU7b0JBQ3hCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLO3dCQUFFLE9BQU87b0JBRWxFLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUUvQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBRWQsTUFBTTtnQkFFUixLQUFLLEtBQUssQ0FBQyxrQkFBa0I7b0JBQzNCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLO3dCQUFFLE9BQU87b0JBRXJFLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUVsQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBRWQsTUFBTTtBQUVSLGdCQUFBO0FBQ0Usb0JBQUEsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsYUFBQTtBQUNILFNBQUMsQ0FBQztBQUVGLFFBQUEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEtBQUssS0FBSTtBQUM3QixZQUFBLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLO2dCQUFFLE9BQU87WUFFbkMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3pCLFNBQUMsQ0FBQztBQUNGLFFBQUEsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE1BQUs7QUFDL0IsWUFBQSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUM7QUFDMUQsU0FBQyxDQUFDO1FBRUYsTUFBTSxZQUFZLEdBQUcsTUFBSztZQUN4QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN4QyxTQUFDLENBQUM7UUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFcEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDM0QsWUFBQSxPQUFPLEVBQUUsS0FBSztBQUNmLFNBQUEsQ0FBQyxDQUFDO0tBQ0o7SUFDRCxPQUFPLEdBQUE7UUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFdkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVoRSxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRW5FLFFBQUEsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEtBQUssSUFBSSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFFLFNBQUE7O0tBR0Y7QUFDRixDQUFBO0FBQ0QsTUFBTSxLQUFLLEdBQUc7SUFDWixJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ1IsSUFBQSxNQUFNLEVBQUUsQ0FBQztBQUNULElBQUEsS0FBSyxFQUFFLENBQUM7QUFDUixJQUFBLEdBQUcsRUFBRSxDQUFDO0FBQ04sSUFBQSxZQUFZLEVBQUUsQ0FBQztBQUNmLElBQUEsU0FBUyxFQUFFLENBQUM7QUFDWixJQUFBLGVBQWUsRUFBRSxDQUFDO0FBQ2xCLElBQUEsa0JBQWtCLEVBQUUsQ0FBQztDQUN0QixDQUFDO0FBRUYsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUV2QixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUM7QUFFckI7QUFDQSxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sY0FBYyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7QUFFdkMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNoQyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFFeEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNsQyxNQUFNLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2hDLE1BQU0sV0FBVyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFFbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFFL0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNqQyxNQUFNLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQy9CLE1BQU0sVUFBVSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFFakMsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQzVCLElBQVksS0FPWCxDQUFBO0FBUEQsQ0FBQSxVQUFZLEtBQUssRUFBQTtBQUNmLElBQUEsS0FBQSxDQUFBLEtBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxNQUFRLENBQUE7QUFDUixJQUFBLEtBQUEsQ0FBQSxLQUFBLENBQUEsUUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsUUFBVSxDQUFBO0FBQ1YsSUFBQSxLQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLE9BQVMsQ0FBQTtBQUNULElBQUEsS0FBQSxDQUFBLEtBQUEsQ0FBQSxRQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxRQUFVLENBQUE7QUFDVixJQUFBLEtBQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsT0FBUyxDQUFBO0FBQ1QsSUFBQSxLQUFBLENBQUEsS0FBQSxDQUFBLEtBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLEtBQU8sQ0FBQTtBQUNULENBQUMsRUFQVyxLQUFLLEtBQUwsS0FBSyxHQU9oQixFQUFBLENBQUEsQ0FBQSxDQUFBO0FBRUQsSUFBWSxLQUtYLENBQUE7QUFMRCxDQUFBLFVBQVksS0FBSyxFQUFBO0FBQ2YsSUFBQSxLQUFBLENBQUEsS0FBQSxDQUFBLFFBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLFFBQU0sQ0FBQTtBQUNOLElBQUEsS0FBQSxDQUFBLEtBQUEsQ0FBQSxLQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxLQUFHLENBQUE7QUFDSCxJQUFBLEtBQUEsQ0FBQSxLQUFBLENBQUEsV0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsV0FBUyxDQUFBO0FBQ1QsSUFBQSxLQUFBLENBQUEsS0FBQSxDQUFBLGNBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLGNBQVksQ0FBQTtBQUNkLENBQUMsRUFMVyxLQUFLLEtBQUwsS0FBSyxHQUtoQixFQUFBLENBQUEsQ0FBQSxDQUFBO0FBQ0QsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFBO0FBQ3ZCLElBQUEsY0FBYyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDaEMsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBQTtBQUNyQixJQUFBLGNBQWMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDO0FBQzlCLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFLLEVBQUE7QUFDdkIsSUFBQSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxLQUFLLEVBQUE7QUFDMUIsSUFBQSxPQUFPLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUV6QyxJQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO0FBQzVDLFlBQUEsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEIsT0FBTztBQUNSLFNBQUE7QUFDRixLQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEtBQUssRUFBQTtJQUN6QixJQUFJLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFakQsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQzFCLFFBQUEsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDekIsUUFBQSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzlDLEtBQUE7SUFFRCxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLEtBQUssRUFBQTtJQUNyQyxNQUFNLE9BQU8sR0FDWCxLQUFLLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV4RSxJQUFBLE9BQU8sZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLEtBQUssRUFBQTtJQUNsQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLEtBQUssRUFBQTtJQUNqQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLEtBQUssRUFBQTtJQUMvQixRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFDRCxTQUFTLGVBQWUsQ0FBQyxLQUFLLEVBQUE7SUFDNUIsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZCLENBQUM7QUFDRCxTQUFTLHNCQUFzQixHQUFBO0FBQzdCLElBQUEsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUN6QixRQUFBLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkQsS0FBQTtBQUFNLFNBQUE7QUFDTCxRQUFBLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RCxRQUFBLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUV4RCxRQUFBLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEtBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsR0FBQTtBQUMxQixJQUFBLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDekIsUUFBQSxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BELEtBQUE7QUFBTSxTQUFBO0FBQ0wsUUFBQSxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEQsUUFBQSxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFeEQsUUFBQSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwQixLQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMscUJBQXFCLEdBQUE7QUFDNUIsSUFBQSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDakQsSUFBQSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFFakQsSUFBQSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBRTlDLElBQUEsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDOUI7Ozs7In0= +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3JlL1dlYkdQVUNvbnN0YW50LnRzIiwiLi4vc3JjL3JlbmRlci9CdWZmZXIudHMiLCIuLi9zcmMvcmVuZGVyL1BpcGVsaW5lTGF5b3V0LnRzIiwiLi4vc3JjL3JlbmRlci9QaXBlbGluZS50cyIsIi4uL3NyYy9yZW5kZXIvRHJhd0NvbW1hbmQudHMiLCIuLi9zcmMvY29yZS9XZWJHUFVUeXBlcy50cyIsIi4uL3NyYy91dGlscy9NaXBtYXBHZW5lcmF0b3IudHMiLCIuLi9zcmMvdXRpbHMvZGVmYXVsdFZhbHVlLnRzIiwiLi4vc3JjL3JlbmRlci9SZW5kZXJTdGF0ZS50cyIsIi4uL3NyYy9yZW5kZXIvQ29udGV4dC50cyIsIi4uL3NyYy9yZW5kZXIvVGV4dHVyZS50cyIsIi4uL3NyYy9yZW5kZXIvU2FtcGxlci50cyIsIi4uL3NyYy9yZW5kZXIvQXR0YWNobWVudC50cyIsIi4uL3NyYy91dGlscy9kZWZpbmVkLnRzIiwiLi4vbm9kZV9tb2R1bGVzL21lcnNlbm5lLXR3aXN0ZXIvc3JjL21lcnNlbm5lLXR3aXN0ZXIuanMiLCIuLi9zcmMvbWF0aC9NYXRoLnRzIiwiLi4vc3JjL21hdGgvVmVjdG9yMi50cyIsIi4uL3NyYy9tYXRoL1ZlY3RvcjMudHMiLCIuLi9zcmMvcmVuZGVyL0F0dHJpYnV0ZS50cyIsIi4uL3NyYy9yZW5kZXIvQmluZEdyb3VwLnRzIiwiLi4vc3JjL3JlbmRlci9CaW5kR3JvdXBFbnRpdHkudHMiLCIuLi9zcmMvbWF0aC9NYXRyaXgzLnRzIiwiLi4vc3JjL21hdGgvVmVjdG9yNC50cyIsIi4uL3NyYy9tYXRoL01hdHJpeDQudHMiLCIuLi9zcmMvY29yZS9Cb3VuZGluZ1NwaGVyZS50cyIsIi4uL3NyYy9yZW5kZXIvSW5kZXhCdWZmZXIudHMiLCIuLi9zcmMvcmVuZGVyL0F0dHJpYnV0ZXMudHMiLCIuLi9zcmMvcmVuZGVyL1ZlcnRleHRCdWZmZXIudHMiLCIuLi9zcmMvdXRpbHMvY29tYmluZS50cyIsIi4uL3NyYy9nZW9tZXRyeS9HZW9tZXRyeS50cyIsIi4uL3NyYy9nZW9tZXRyeS9QbGFuZUdlb21ldHJ5LnRzIiwiLi4vc3JjL21hdGgvUXVhdGVybmlvbi50cyIsIi4uL3NyYy9jb3JlL1JlbmRlck9iamVjdC50cyIsIi4uL3NyYy9saWdodC9MaWdodC50cyIsIi4uL3NyYy9tYXRoL0NvbG9yLnRzIiwiLi4vc3JjL21hdGgvTWF0cml4Mi50cyIsIi4uL3NyYy9yZW5kZXIvVW5pZm9ybXMudHMiLCIuLi9zcmMvcmVuZGVyL1VuaWZvcm1CdWZmZXIudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL2JpbGxib2FyZF9mcy50cyIsIi4uL3NyYy9zaGFkZXIvV2dzbFByZXByb2Nlc3Nvci50cyIsIi4uL3NyYy9zaGFkZXIvbWF0ZXJpYWwvYmlsbGJvYXJkX3ZzLnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9jb2xvckZyYWcudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL2NvbG9yVmVydC50cyIsIi4uL3NyYy9zaGFkZXIvbWF0ZXJpYWwvcGJyX2ZzLnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9wYnJfdnMudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL3BickZyYWcudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL3BiclZlcnQudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL3Bob25nRnJhZy50cyIsIi4uL3NyYy9zaGFkZXIvbWF0ZXJpYWwvcGhvbmdWZXJ0LnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9xdWFkRnJhZy50cyIsIi4uL3NyYy9zaGFkZXIvbWF0ZXJpYWwvcXVhZFZlcnQudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL3NreUJveEZyYWcudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL3NreUJveFZlcnQudHMiLCIuLi9zcmMvc2hhZGVyL3Bvc3RQcm9jZXNzL2JsZW5kL2JsZW5kRnJhZy50cyIsIi4uL3NyYy9zaGFkZXIvcG9zdFByb2Nlc3MvYmxvb20vQmx1ci50cyIsIi4uL3NyYy9zaGFkZXIvcG9zdFByb2Nlc3MvYmxvb20vTHVtaW5vc2l0eUhpZ2gudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL2F0dHJpYnV0ZS9GcmFnSW5wdXQudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL2F0dHJpYnV0ZS9WZXJ0ZXhJbnB1dC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvYXR0cmlidXRlL1ZlcnRleE91dHB1dC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvY29tbW9uL1N5c3RlbVVuaWZvcm0udHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL2NvbW1vbi9UZXh0dXJlQW5kU2FtcGxlckRlZmluZS50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvZW52aXJvbm1lbnQvZW52aXJvbm1lbnQudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL2luc3RhbmNlL0luc3RhbmNlLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9saWdodC9saWdodC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvbGlnaHQvbGlnaHRDb21tb24udHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL25vcm1hbC9nZXROb3JtYWxCYWNrVXAudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3Bici9icmRmLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9wYnIvaWJsLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9wYnIvcGJyRnVuY3Rpb24udHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3Bici9wYnJTdHJ1Y3QudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3Bici9wYnJUZXh0dXJlLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9wYnIvcGJyVXRpbHMudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3Bob25nL2JsaW5uX3Bob25nLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9waG9uZy9waG9uZ0Z1bmN0aW9uLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9waG9uZy9waG9uZ1V0aWxzLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9za2luL1NraW5WZXJ0LnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9zdHJ1Y3QvUGJyTWF0ZXJpYWxTdHJ1Y3QudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL1NoYWRlckNodW5rLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9zaGFkb3cvc2hhZG93TWFwRGVidWdnZXJGcmFnLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9zaGFkb3cvc2hhZG93TWFwRGVidWdnZXJWZXJ0LnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9zaGFkb3cvc2hhZG93TWFwRnJhZy50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvc2hhZG93L3NoYWRvd01hcFZlcnQudHMiLCIuLi9zcmMvc2hhZGVyL1NoYWRlcnMudHMiLCIuLi9zcmMvc2hhZGVyL1NoYWRlclNvdXJjZS50cyIsIi4uL3NyYy91dGlscy91bmlmb3JtVXRpbHMudHMiLCIuLi9zcmMvcmVuZGVyL0JpbmRHcm91cExheW91dC50cyIsIi4uL3NyYy9yZW5kZXIvQmluZEdyb3VwTGF5b3V0RW50cnkudHMiLCIuLi9zcmMvcmVuZGVyL1NoYWRlckRhdGEudHMiLCIuLi9zcmMvbWF0ZXJpYWwvTWF0ZXJpYWwudHMiLCIuLi9zcmMvbWF0ZXJpYWwvU2hhZGVyTWF0ZXJpYWwudHMiLCIuLi9zcmMvdXRpbHMvY3JlYXRlR3VpZC50cyIsIi4uL3NyYy9tZXNoL01lc2gudHMiLCIuLi9zcmMvaGVscGVyL1NoYWRvd01hcERlYnVnZ2VyLnRzIiwiLi4vc3JjL21hdGVyaWFsL0NvbG9yTWF0ZXJpYWwudHMiLCIuLi9zcmMvbWVzaC9BeGVzLnRzIiwiLi4vc3JjL2dlb21ldHJ5L1NreUJveEdlb21ldHJ5LnRzIiwiLi4vc3JjL3V0aWxzL2Rlc3Ryb3lPYmplY3QudHMiLCIuLi9zcmMvY29yZS9UZXh0dXJlQ2FjaGUudHMiLCIuLi9zcmMvbG9hZGVyL0N1YmVUZXh0dXJlTG9hZGVyLnRzIiwiLi4vc3JjL21hdGVyaWFsL1NreUJveE1hdGVyaWFsLnRzIiwiLi4vc3JjL21lc2gvU2t5Qm94LnRzIiwiLi4vc3JjL21lc2gvSW5zdGFuY2UudHMiLCIuLi9zcmMvbWVzaC9JbnN0YW5jZU1lc2gudHMiLCIuLi9zcmMvdXRpbHMvR2VvbWV0cnlVdGlscy50cyIsIi4uL3NyYy9nZW9tZXRyeS9TcGhlcmVHZW9tZXRyeS50cyIsIi4uL3NyYy9nZW9tZXRyeS9Cb3hHZW9tZXRyeS50cyIsIi4uL3NyYy9nZW9tZXRyeS9Ub3J1c0tub3RHZW9tZXRyeS50cyIsIi4uL3NyYy9tYXRlcmlhbC9CbGlublBob25nTWF0ZXJpYWwudHMiLCIuLi9zcmMvbWF0ZXJpYWwvUGJyTWF0ZXJpYWwudHMiLCIuLi9zcmMvY29yZS9FdmVudERpc3BhdGNoZXIudHMiLCIuLi9zcmMvY29yZS9SZW5kZXJRdWV1ZS50cyIsIi4uL3NyYy9jb3JlL0ZyYW1lU3RhdGUudHMiLCIuLi9zcmMvbGlnaHQvQW1iaWVudExpZ2h0LnRzIiwiLi4vc3JjL2NvcmUvTGlnaHRNYW5nZXIudHMiLCIuLi9zcmMvY29yZS9NZXNoTWFuZ2VyLnRzIiwiLi4vc3JjL3JlbmRlci9SZW5kZXJUYXJnZXQudHMiLCIuLi9zcmMvcG9zdC1wcm9jZXNzL1Jlc29sdmVGcmFtZS50cyIsIi4uL3NyYy9wb3N0LXByb2Nlc3MvUG9zdEVmZmVjdENvbGxlY3Rpb24udHMiLCIuLi9zcmMvcGFzcy9QYXNzLnRzIiwiLi4vc3JjL3Bhc3MvQmFzaWNQYXNzLnRzIiwiLi4vc3JjL21hdGgvUGxhbmUudHMiLCIuLi9zcmMvY29yZS9DdWxsaW5nVm9sdW1lLnRzIiwiLi4vc3JjL2NhbWVyYS9DYW1lcmEudHMiLCIuLi9zcmMvY2FtZXJhL1BlcnNwZWN0aXZlQ2FtZXJhLnRzIiwiLi4vc3JjL2NhbWVyYS9Qb2ludExpZ2h0U2hhZG93Q2FtZXJhLnRzIiwiLi4vc3JjL2xpZ2h0L3NoYWRvd3MvQmFzZVNoYWRvdy50cyIsIi4uL3NyYy9saWdodC9zaGFkb3dzL1BvaW50TGlnaHRTaGFkb3cudHMiLCIuLi9zcmMvbGlnaHQvUG9pbnRMaWdodC50cyIsIi4uL3NyYy9wYXNzL1NoYWRvd1Bhc3MudHMiLCIuLi9zcmMvcmVuZGVycGlwZWxpbmUvRm9yd2FyZFJlbmRlckxpbmUudHMiLCIuLi9zcmMvU2NlbmUudHMiLCIuLi9zcmMvcG9zdC1wcm9jZXNzL1Bvc3RFZmZlY3QudHMiLCIuLi9zcmMvcG9zdC1wcm9jZXNzL0Jsb29tUG9zdEVmZmVjdC50cyIsIi4uL3NyYy9jYW1lcmEvT3J0aG9ncmFwaGljQ2FtZXJhLnRzIiwiLi4vc3JjL2xpZ2h0L3NoYWRvd3MvU3BvdExpZ2h0U2hhZG93LnRzIiwiLi4vc3JjL2xpZ2h0L1Nwb3RMaWdodC50cyIsIi4uL3NyYy9saWdodC9zaGFkb3dzL0RpcmVjdGlvbmFsTGlnaHRTaGFkb3cudHMiLCIuLi9zcmMvbGlnaHQvRGlyZWN0aW9uYWxMaWdodC50cyIsIi4uL3NyYy9tZXNoL05vZGUudHMiLCIuLi9zcmMvbWVzaC9TS2luTWVzaC50cyIsIi4uL3NyYy91dGlscy9nbHRmVXRpbHMudHMiLCIuLi9zcmMvbG9hZGVyL2dsdGYvbGlicy9BY2Nlc3Nvci50cyIsIi4uL3NyYy9sb2FkZXIvZ2x0Zi9saWJzL0FuaW1hdGlvbi50cyIsIi4uL3NyYy9sb2FkZXIvZ2x0Zi9saWJzL0FuaW1hdGlvbkNoYW5uZWwudHMiLCIuLi9zcmMvbG9hZGVyL2dsdGYvbGlicy9BbmltYXRpb25DaGFubmVsVGFyZ2V0LnRzIiwiLi4vc3JjL2xvYWRlci9nbHRmL3R5cGVzL2dsdGZUeXBlLnRzIiwiLi4vc3JjL2xvYWRlci9nbHRmL2xpYnMvQW5pbWF0aW9uU2FtcGxlci50cyIsIi4uL3NyYy9sb2FkZXIvR0xURkxvYWRlci50cyIsIi4uL3NyYy91dGlscy91dGlscy50cyIsIi4uL3NyYy9tYXRoL1NwaGVyaWNhbC50cyIsIi4uL3NyYy9jb250cm9sL09yYml0Q29udHJvbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBQcmVkZWZpbmVkQ29sb3JTcGFjZSB7XG5cdFNSR0IgPSBcInNyZ2JcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBQb3dlclByZWZlcmVuY2Uge1xuXHRMb3dQb3dlciA9IFwibG93LXBvd2VyXCIsXG5cdEhpZ2hQZXJmb3JtYW5jZSA9IFwiaGlnaC1wZXJmb3JtYW5jZVwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEZlYXR1cmVOYW1lIHtcblx0RGVwdGhDbGlwQ29udHJvbCA9IFwiZGVwdGgtY2xpcC1jb250cm9sXCIsXG5cdERlcHRoMjRVbm9ybVN0ZW5jaWw4ID0gXCJkZXB0aDI0dW5vcm0tc3RlbmNpbDhcIixcblx0RGVwdGgzMkZsb2F0U3RlbmNpbDggPSBcImRlcHRoMzJmbG9hdC1zdGVuY2lsOFwiLFxuXHRUZXh0dXJlQ29tcHJlc3Npb25CQyA9IFwidGV4dHVyZS1jb21wcmVzc2lvbi1iY1wiLFxuXHRUZXh0dXJlQ29tcHJlc3Npb25FVEMyID0gXCJ0ZXh0dXJlLWNvbXByZXNzaW9uLWV0YzJcIixcblx0VGV4dHVyZUNvbXByZXNzaW9uQVNUQyA9IFwidGV4dHVyZS1jb21wcmVzc2lvbi1hc3RjXCIsXG5cdFRpbWVzdGFtcFF1ZXJ5ID0gXCJ0aW1lc3RhbXAtcXVlcnlcIixcblx0SW5kaXJlY3RGaXJzdEluc3RhbmNlID0gXCJpbmRpcmVjdC1maXJzdC1pbnN0YW5jZVwiLFxuXHRTaGFkZXJGMTYgPSBcInNoYWRlci1mMTZcIixcblx0QkdSQThVbm9ybVN0b3JhZ2UgPSBcImJncmE4dW5vcm0tc3RvcmFnZVwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEJ1ZmZlclVzYWdlIHtcblx0TWFwUmVhZCA9IDEsXG5cdE1hcFdyaXRlID0gMixcblx0Q29weVNyYyA9IDQsXG5cdENvcHlEc3QgPSA4LFxuXHRJbmRleCA9IDE2LFxuXHRWZXJ0ZXggPSAzMixcblx0VW5pZm9ybSA9IDY0LFxuXHRTdG9yYWdlID0gMTI4LFxuXHRJbmRpcmVjdCA9IDI1Nixcblx0UXVlcnlSZXNvbHZlID0gNTEyXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIE1hcE1vZGUge1xuXHRSZWFkID0gMSxcblx0V3JpdGUgPSAyXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFRleHR1cmVEaW1lbnNpb24ge1xuXHRFMWQgPSBcIjFkXCIsXG5cdEUyZCA9IFwiMmRcIixcblx0RTNkID0gXCIzZFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFRleHR1cmVVc2FnZSB7XG5cdENvcHlTcmMgPSAxLFxuXHRDb3B5RHN0ID0gMixcblx0VGV4dHVyZUJpbmRpbmcgPSA0LFxuXHRTdG9yYWdlQmluZGluZyA9IDgsXG5cdFJlbmRlckF0dGFjaG1lbnQgPSAxNlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBUZXh0dXJlVmlld0RpbWVuc2lvbiB7XG5cdEUxZCA9IFwiMWRcIixcblx0RTJkID0gXCIyZFwiLFxuXHRFMmRBcnJheSA9IFwiMmQtYXJyYXlcIixcblx0Q3ViZSA9IFwiY3ViZVwiLFxuXHRDdWJlQXJyYXkgPSBcImN1YmUtYXJyYXlcIixcblx0RTNkID0gXCIzZFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFRleHR1cmVBc3BlY3Qge1xuXHRBbGwgPSBcImFsbFwiLFxuXHRTdGVuY2lsT25seSA9IFwic3RlbmNpbC1vbmx5XCIsXG5cdERlcHRoT25seSA9IFwiZGVwdGgtb25seVwiXG59XG5cbi8qKlxuICogQ29tbWVudHMgdGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZ2Z4LXJzL3dncHUvYmxvYi9tYXN0ZXIvd2dwdS10eXBlcy9zcmMvbGliLnJzXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGVudW0gVGV4dHVyZUZvcm1hdCB7XG5cdC8vIDgtYml0IGZvcm1hdHNcblx0UjhVbm9ybSA9IFwicjh1bm9ybVwiLCAvLyBSZWQgY2hhbm5lbCBvbmx5LiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBbMCwgMjU1XSBjb252ZXJ0ZWQgdG8vZnJvbSBmbG9hdCBbMCwgMV0gaW4gc2hhZGVyLlxuXHRSOFNub3JtID0gXCJyOHNub3JtXCIsIC8vIFJlZCBjaGFubmVsIG9ubHkuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFstMTI3LCAxMjddIGNvbnZlcnRlZCB0by9mcm9tIGZsb2F0IFstMSwgMV0gaW4gc2hhZGVyLlxuXHRSOFVpbnQgPSBcInI4dWludFwiLCAvLyBSZWQgY2hhbm5lbCBvbmx5LiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBVbnNpZ25lZCBpbiBzaGFkZXIuXG5cdFI4U2ludCA9IFwicjhzaW50XCIsIC8vIFJlZCBjaGFubmVsIG9ubHkuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFNpZ25lZCBpbiBzaGFkZXIuXG5cblx0Ly8gMTYtYml0IGZvcm1hdHNcblx0UjE2VWludCA9IFwicjE2dWludFwiLCAvLyBSZWQgY2hhbm5lbCBvbmx5LiAxNiBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gVW5zaWduZWQgaW4gc2hhZGVyLlxuXHRSMTZTaW50ID0gXCJyMTZzaW50XCIsIC8vIFJlZCBjaGFubmVsIG9ubHkuIDE2IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBTaWduZWQgaW4gc2hhZGVyLlxuXHRSMTZGbG9hdCA9IFwicjE2ZmxvYXRcIiwgLy8gUmVkIGNoYW5uZWwgb25seS4gMTYgYml0IGZsb2F0IHBlciBjaGFubmVsLiBGbG9hdCBpbiBzaGFkZXIuXG5cdFJHOFVub3JtID0gXCJyZzh1bm9ybVwiLCAvLyBSZWQgYW5kIGdyZWVuIGNoYW5uZWxzLiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBbMCwgMjU1XSBjb252ZXJ0ZWQgdG8vZnJvbSBmbG9hdCBbMCwgMV0gaW4gc2hhZGVyLlxuXHRSRzhTbm9ybSA9IFwicmc4c25vcm1cIiwgLy8gUmVkIGFuZCBncmVlbiBjaGFubmVscy4gOCBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gWy0xMjcsIDEyN10gY29udmVydGVkIHRvL2Zyb20gZmxvYXQgWy0xLCAxXSBpbiBzaGFkZXIuXG5cdFJHOFVpbnQgPSBcInJnOHVpbnRcIiwgLy8gUmVkIGFuZCBncmVlbiBjaGFubmVscy4gOCBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gVW5zaWduZWQgaW4gc2hhZGVyLlxuXHRSRzhTaW50ID0gXCJyZzhzaW50XCIsIC8vIFJlZCBhbmQgZ3JlZW4gY2hhbm5lbHMuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFNpZ25lZCBpbiBzaGFkZXIuXG5cblx0Ly8gMzItYml0IGZvcm1hdHNcblx0UjMyVWludCA9IFwicjMydWludFwiLCAvLyBSZWQgY2hhbm5lbCBvbmx5LiAzMiBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gVW5zaWduZWQgaW4gc2hhZGVyLlxuXHRSMzJTaW50ID0gXCJyMzJzaW50XCIsIC8vIFJlZCBjaGFubmVsIG9ubHkuIDMyIGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBTaWduZWQgaW4gc2hhZGVyLlxuXHRSMzJGbG9hdCA9IFwicjMyZmxvYXRcIiwgLy8gUmVkIGNoYW5uZWwgb25seS4gMzIgYml0IGZsb2F0IHBlciBjaGFubmVsLiBGbG9hdCBpbiBzaGFkZXIuXG5cdFJHMTZVaW50ID0gXCJyZzE2dWludFwiLCAvLyBSZWQgYW5kIGdyZWVuIGNoYW5uZWxzLiAxNiBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gVW5zaWduZWQgaW4gc2hhZGVyLlxuXHRSRzE2U2ludCA9IFwicmcxNnNpbnRcIiwgLy8gUmVkIGFuZCBncmVlbiBjaGFubmVscy4gMTYgYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFNpZ25lZCBpbiBzaGFkZXIuXG5cdFJHMTZGbG9hdCA9IFwicmcxNmZsb2F0XCIsIC8vIFJlZCBhbmQgZ3JlZW4gY2hhbm5lbHMuIDE2IGJpdCBmbG9hdCBwZXIgY2hhbm5lbC4gRmxvYXQgaW4gc2hhZGVyLlxuXHRSR0JBOFVub3JtID0gXCJyZ2JhOHVub3JtXCIsIC8vIFJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYSBjaGFubmVscy4gOCBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gWzAsIDI1NV0gY29udmVydGVkIHRvL2Zyb20gZmxvYXQgWzAsIDFdIGluIHNoYWRlci5cblx0UkdCQThVbm9ybVNSR0IgPSBcInJnYmE4dW5vcm0tc3JnYlwiLCAvLyBSZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFNyZ2ItY29sb3IgWzAsIDI1NV0gY29udmVydGVkIHRvL2Zyb20gbGluZWFyLWNvbG9yIGZsb2F0IFswLCAxXSBpbiBzaGFkZXIuXG5cdFJHQkE4U25vcm0gPSBcInJnYmE4c25vcm1cIiwgLy8gUmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGNoYW5uZWxzLiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBbLTEyNywgMTI3XSBjb252ZXJ0ZWQgdG8vZnJvbSBmbG9hdCBbLTEsIDFdIGluIHNoYWRlci5cblx0UkdCQThVaW50ID0gXCJyZ2JhOHVpbnRcIiwgLy8gUmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGNoYW5uZWxzLiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBVbnNpZ25lZCBpbiBzaGFkZXIuXG5cdFJHQkE4U2ludCA9IFwicmdiYThzaW50XCIsIC8vIFJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYSBjaGFubmVscy4gOCBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gU2lnbmVkIGluIHNoYWRlci5cblx0QkdSQThVbm9ybSA9IFwiYmdyYTh1bm9ybVwiLCAvLyBCbHVlLCBncmVlbiwgcmVkLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFswLCAyNTVdIGNvbnZlcnRlZCB0by9mcm9tIGZsb2F0IFswLCAxXSBpbiBzaGFkZXIuXG5cdEJHUkE4VW5vcm1TUkdCID0gXCJiZ3JhOHVub3JtLXNyZ2JcIiwgLy8gQmx1ZSwgZ3JlZW4sIHJlZCwgYW5kIGFscGhhIGNoYW5uZWxzLiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBTcmdiLWNvbG9yIFswLCAyNTVdIGNvbnZlcnRlZCB0by9mcm9tIGxpbmVhci1jb2xvciBmbG9hdCBbMCwgMV0gaW4gc2hhZGVyLlxuXHQvLyBQYWNrZWQgMzItYml0IGZvcm1hdHNcblx0UkdCOUU1VUZsb2F0ID0gXCJyZ2I5ZTV1ZmxvYXRcIiwgLy8gUGFja2VkIHVuc2lnbmVkIGZsb2F0IHdpdGggOSBiaXRzIG1hbnRpc2EgZm9yIGVhY2ggUkdCIGNvbXBvbmVudCwgdGhlbiBhIGNvbW1vbiA1IGJpdHMgZXhwb25lbnRcblx0UkdCMTBBMlVub3JtID0gXCJyZ2IxMGEydW5vcm1cIiwgLy8gUmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGNoYW5uZWxzLiAxMCBiaXQgaW50ZWdlciBmb3IgUkdCIGNoYW5uZWxzLCAyIGJpdCBpbnRlZ2VyIGZvciBhbHBoYSBjaGFubmVsLiBbMCwgMTAyM10gKFswLCAzXSBmb3IgYWxwaGEpIGNvbnZlcnRlZCB0by9mcm9tIGZsb2F0IFswLCAxXSBpbiBzaGFkZXIuXG5cdFJHMTFCMTBVRmxvYXQgPSBcInJnMTFiMTB1ZmxvYXRcIiwgLy8gUmVkLCBncmVlbiwgYW5kIGJsdWUgY2hhbm5lbHMuIDExIGJpdCBmbG9hdCB3aXRoIG5vIHNpZ24gYml0IGZvciBSRyBjaGFubmVscy4gMTAgYml0IGZsb2F0IHdpdGggbm8gc2lnbiBiaXQgZm9yIGJsdWUgY2hhbm5lbC4gRmxvYXQgaW4gc2hhZGVyLlxuXG5cdC8vIDY0LWJpdCBmb3JtYXRzXG5cdFJHMzJVaW50ID0gXCJyZzMydWludFwiLCAvLyBSZWQgYW5kIGdyZWVuIGNoYW5uZWxzLiAzMiBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gVW5zaWduZWQgaW4gc2hhZGVyLlxuXHRSRzMyU2ludCA9IFwicmczMnNpbnRcIiwgLy8gUmVkIGFuZCBncmVlbiBjaGFubmVscy4gMzIgYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFNpZ25lZCBpbiBzaGFkZXIuXG5cdFJHMzJGbG9hdCA9IFwicmczMmZsb2F0XCIsIC8vIFJlZCBhbmQgZ3JlZW4gY2hhbm5lbHMuIDMyIGJpdCBmbG9hdCBwZXIgY2hhbm5lbC4gRmxvYXQgaW4gc2hhZGVyLlxuXHRSR0JBMTZVaW50ID0gXCJyZ2JhMTZ1aW50XCIsIC8vIFJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYSBjaGFubmVscy4gMTYgYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFVuc2lnbmVkIGluIHNoYWRlci5cblx0UkdCQTE2U2ludCA9IFwicmdiYTE2c2ludFwiLCAvLyBSZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDE2IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBTaWduZWQgaW4gc2hhZGVyLlxuXHRSR0JBMTZGbG9hdCA9IFwicmdiYTE2ZmxvYXRcIiwgLy8gUmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGNoYW5uZWxzLiAxNiBiaXQgZmxvYXQgcGVyIGNoYW5uZWwuIEZsb2F0IGluIHNoYWRlci5cblxuXHQvLyAxMjgtYml0IGZvcm1hdHNcblx0UkdCQTMyVWludCA9IFwicmdiYTMydWludFwiLCAvLyBSZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDMyIGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBVbnNpZ25lZCBpbiBzaGFkZXIuXG5cdFJHQkEzMlNpbnQgPSBcInJnYmEzMnNpbnRcIiwgLy8gUmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGNoYW5uZWxzLiAzMiBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gU2lnbmVkIGluIHNoYWRlci5cblx0UkdCQTMyRmxvYXQgPSBcInJnYmEzMmZsb2F0XCIsIC8vIFJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYSBjaGFubmVscy4gMzIgYml0IGZsb2F0IHBlciBjaGFubmVsLiBGbG9hdCBpbiBzaGFkZXIuXG5cblx0Ly8gRGVwdGggYW5kIHN0ZW5jaWwgZm9ybWF0c1xuXHRTdGVuY2lsOCA9IFwic3RlbmNpbDhcIixcblx0RGVwdGgxNlVub3JtID0gXCJkZXB0aDE2dW5vcm1cIixcblx0RGVwdGgyNFBsdXMgPSBcImRlcHRoMjRwbHVzXCIsIC8vIFNwZWNpYWwgZGVwdGggZm9ybWF0IHdpdGggYXQgbGVhc3QgMjQgYml0IGludGVnZXIgZGVwdGguXG5cdERlcHRoMjRQbHVzU3RlbmNpbDggPSBcImRlcHRoMjRwbHVzLXN0ZW5jaWw4XCIsIC8vIFNwZWNpYWwgZGVwdGgvc3RlbmNpbCBmb3JtYXQgd2l0aCBhdCBsZWFzdCAyNCBiaXQgaW50ZWdlciBkZXB0aCBhbmQgOCBiaXRzIGludGVnZXIgc3RlbmNpbC5cblx0RGVwdGgzMkZsb2F0ID0gXCJkZXB0aDMyZmxvYXRcIiwgLy8gU3BlY2lhbCBkZXB0aCBmb3JtYXQgd2l0aCAzMiBiaXQgZmxvYXRpbmcgcG9pbnQgZGVwdGguXG5cblx0Ly8gQkMgY29tcHJlc3NlZCBmb3JtYXRzIHVzYWJsZSBpZiBcInRleHR1cmUtY29tcHJlc3Npb24tYmNcIiBpcyBib3RoXG5cdC8vIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlL3VzZXIgYWdlbnQgYW5kIGVuYWJsZWQgaW4gcmVxdWVzdERldmljZS5cblx0QkMxUkdCQVVub3JtID0gXCJiYzEtcmdiYS11bm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiA4IGJ5dGVzIHBlciBibG9jayAoNCBiaXQvcHgpLiA0IGNvbG9yICsgYWxwaGEgcGFsbGV0LiA1IGJpdCBSICsgNiBiaXQgRyArIDUgYml0IEIgKyAxIGJpdCBhbHBoYS4gQWxzbyBrbm93biBhcyBEWFQxLlxuXHRCQzFSR0JBVW5vcm1TUkdCID0gXCJiYzEtcmdiYS11bm9ybS1zcmdiXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDggYnl0ZXMgcGVyIGJsb2NrICg0IGJpdC9weCkuIDQgY29sb3IgKyBhbHBoYSBwYWxsZXQuIDUgYml0IFIgKyA2IGJpdCBHICsgNSBiaXQgQiArIDEgYml0IGFscGhhLiBBbHNvIGtub3duIGFzIERYVDEuXG5cdEJDMlJHQkFVbm9ybSA9IFwiYmMyLXJnYmEtdW5vcm1cIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIDQgY29sb3IgcGFsbGV0LiA1IGJpdCBSICsgNiBiaXQgRyArIDUgYml0IEIgKyA0IGJpdCBhbHBoYS4gQWxzbyBrbm93biBhcyBEWFQzLlxuXHRCQzJSR0JBVW5vcm1TUkdCID0gXCJiYzItcmdiYS11bm9ybS1zcmdiXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiA0IGNvbG9yIHBhbGxldC4gNSBiaXQgUiArIDYgYml0IEcgKyA1IGJpdCBCICsgNCBiaXQgYWxwaGEuIEFsc28ga25vd24gYXMgRFhUMy5cblx0QkMzUkdCQVVub3JtID0gXCJiYzMtcmdiYS11bm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gNCBjb2xvciBwYWxsZXQgKyA4IGFscGhhIHBhbGxldC4gNSBiaXQgUiArIDYgYml0IEcgKyA1IGJpdCBCICsgOCBiaXQgYWxwaGEuIEFsc28ga25vd24gYXMgRFhUNS5cblx0QkMzUkdCQVVub3JtU1JHQiA9IFwiYmMzLXJnYmEtdW5vcm0tc3JnYlwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gNCBjb2xvciBwYWxsZXQgKyA4IGFscGhhIHBhbGxldC4gNSBiaXQgUiArIDYgYml0IEcgKyA1IGJpdCBCICsgOCBiaXQgYWxwaGEuIEFsc28ga25vd24gYXMgRFhUNS5cblx0QkM0UlVub3JtID0gXCJiYzQtci11bm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiA4IGJ5dGVzIHBlciBibG9jayAoNCBiaXQvcHgpLiA4IGNvbG9yIHBhbGxldC4gOCBiaXQgUi4gQWxzbyBrbm93biBhcyBSR1RDMS5cblx0QkM0UlNub3JtID0gXCJiYzQtci1zbm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiA4IGJ5dGVzIHBlciBibG9jayAoNCBiaXQvcHgpLiA4IGNvbG9yIHBhbGxldC4gOCBiaXQgUi4gQWxzbyBrbm93biBhcyBSR1RDMS5cblx0QkM1UkdVbm9ybSA9IFwiYmM1LXJnLXVub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiA4IGNvbG9yIHJlZCBwYWxsZXQgKyA4IGNvbG9yIGdyZWVuIHBhbGxldC4gOCBiaXQgUkcuIEFsc28ga25vd24gYXMgUkdUQzIuXG5cdEJDNVJHU25vcm0gPSBcImJjNS1yZy1zbm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gOCBjb2xvciByZWQgcGFsbGV0ICsgOCBjb2xvciBncmVlbiBwYWxsZXQuIDggYml0IFJHLiBBbHNvIGtub3duIGFzIFJHVEMyLlxuXHRCQzZIUkdCVUZsb2F0ID0gXCJiYzZoLXJnYi11ZmxvYXRcIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIFZhcmlhYmxlIHNpemVkIHBhbGxldC4gMTYgYml0IHVuc2lnbmVkIGZsb2F0IFJHQi4gRmxvYXQgaW4gc2hhZGVyLiBBbHNvIGtub3duIGFzIEJQVEMgKGZsb2F0KS5cblx0QkM2SFJHQkZsb2F0ID0gXCJiYzZoLXJnYi1mbG9hdFwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gVmFyaWFibGUgc2l6ZWQgcGFsbGV0LiAxNiBiaXQgc2lnbmVkIGZsb2F0IFJHQi4gRmxvYXQgaW4gc2hhZGVyLiBBbHNvIGtub3duIGFzIEJQVEMgKGZsb2F0KS5cblx0QkM3UkdCQVVub3JtID0gXCJiYzctcmdiYS11bm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gVmFyaWFibGUgc2l6ZWQgcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuIEFsc28ga25vd24gYXMgQlBUQyAodW5vcm0pLlxuXHRCQzdSR0JBVW5vcm1TUkdCID0gXCJiYzctcmdiYS11bm9ybS1zcmdiXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiBWYXJpYWJsZSBzaXplZCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS4gQWxzbyBrbm93biBhcyBCUFRDICh1bm9ybSkuXG5cblx0Ly8gRVRDMiBjb21wcmVzc2VkIGZvcm1hdHMgdXNhYmxlIGlmIFwidGV4dHVyZS1jb21wcmVzc2lvbi1ldGMyXCIgaXMgYm90aFxuXHQvLyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZS91c2VyIGFnZW50IGFuZCBlbmFibGVkIGluIHJlcXVlc3REZXZpY2UuXG5cdEVUQzJSR0I4VW5vcm0gPSBcImV0YzItcmdiOHVub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDggYnl0ZXMgcGVyIGJsb2NrICg0IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQi5cblx0RVRDMlJHQjhVbm9ybVNSR0IgPSBcImV0YzItcmdiOHVub3JtLXNyZ2JcIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gOCBieXRlcyBwZXIgYmxvY2sgKDQgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCLlxuXHRFVEMyUkdCOEExVW5vcm0gPSBcImV0YzItcmdiOGExdW5vcm1cIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gOCBieXRlcyBwZXIgYmxvY2sgKDQgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCICsgMSBiaXQgYWxwaGEuXG5cdEVUQzJSR0I4QTFVbm9ybVNSR0IgPSBcImV0YzItcmdiOGExdW5vcm0tc3JnYlwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiA4IGJ5dGVzIHBlciBibG9jayAoNCBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0IgKyAxIGJpdCBhbHBoYS5cblx0RVRDMlJHQkE4VW5vcm0gPSBcImV0YzItcmdiYTh1bm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCICsgOCBiaXQgYWxwaGEuXG5cdEVUQzJSR0JBOFVub3JtU1JHQiA9IFwiZXRjMi1yZ2JhOHVub3JtLXNyZ2JcIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQiArIDggYml0IGFscGhhLlxuXHRFQUNSMTFVbm9ybSA9IFwiZWFjLXIxMXVub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDggYnl0ZXMgcGVyIGJsb2NrICg0IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiAxMSBiaXQgaW50ZWdlciBSLlxuXHRFQUNSMTFTbm9ybSA9IFwiZWFjLXIxMXNub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDggYnl0ZXMgcGVyIGJsb2NrICg0IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiAxMSBiaXQgaW50ZWdlciBSLlxuXHRFQUNSRzExVW5vcm0gPSBcImVhYy1yZzExdW5vcm1cIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiAxMSBiaXQgaW50ZWdlciBSICsgMTEgYml0IGludGVnZXIgRy5cblx0RUFDUkcxMVNub3JtID0gXCJlYWMtcmcxMXNub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gMTEgYml0IGludGVnZXIgUiArIDExIGJpdCBpbnRlZ2VyIEcuXG5cblx0Ly8gQVNUQyBjb21wcmVzc2VkIGZvcm1hdHMgdXNhYmxlIGlmIFwidGV4dHVyZS1jb21wcmVzc2lvbi1hc3RjXCIgaXMgYm90aFxuXHQvLyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZS91c2VyIGFnZW50IGFuZCBlbmFibGVkIGluIHJlcXVlc3REZXZpY2UuXG5cdEFTVEM0eDRVbm9ybSA9IFwiYXN0Yy00eDQtdW5vcm1cIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM0eDRVbm9ybVNSR0IgPSBcImFzdGMtNHg0LXVub3JtLXNyZ2JcIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM1eDRVbm9ybSA9IFwiYXN0Yy01eDQtdW5vcm1cIiwgLy8gNXg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg2LjQgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzV4NFVub3JtU1JHQiA9IFwiYXN0Yy01eDQtdW5vcm0tc3JnYlwiLCAvLyA1eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDYuNCBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDNXg1VW5vcm0gPSBcImFzdGMtNXg1LXVub3JtXCIsIC8vIDV4NSBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoNS4xMiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDNXg1VW5vcm1TUkdCID0gXCJhc3RjLTV4NS11bm9ybS1zcmdiXCIsIC8vIDV4NSBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoNS4xMiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDNng1VW5vcm0gPSBcImFzdGMtNng1LXVub3JtXCIsIC8vIDZ4NSBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoNC4yNyBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDNng1VW5vcm1TUkdCID0gXCJhc3RjLTZ4NS11bm9ybS1zcmdiXCIsIC8vIDZ4NSBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoNC4yNyBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDNng2VW5vcm0gPSBcImFzdGMtNng2LXVub3JtXCIsIC8vIDZ4NiBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMy41NiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDNng2VW5vcm1TUkdCID0gXCJhc3RjLTZ4Ni11bm9ybS1zcmdiXCIsIC8vIDZ4NiBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMy41NiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDOHg1VW5vcm0gPSBcImFzdGMtOHg1LXVub3JtXCIsIC8vIDh4NSBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMy4yIGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM4eDVVbm9ybVNSR0IgPSBcImFzdGMtOHg1LXVub3JtLXNyZ2JcIiwgLy8gOHg1IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgzLjIgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzh4NlVub3JtID0gXCJhc3RjLTh4Ni11bm9ybVwiLCAvLyA4eDYgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDIuNjcgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzh4NlVub3JtU1JHQiA9IFwiYXN0Yy04eDYtdW5vcm0tc3JnYlwiLCAvLyA4eDYgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDIuNjcgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzh4OFVub3JtID0gXCJhc3RjLTh4OC11bm9ybVwiLCAvLyA4eDggYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDIgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzh4OFVub3JtU1JHQiA9IFwiYXN0Yy04eDgtdW5vcm0tc3JnYlwiLCAvLyA4eDggYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDIgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEweDVVbm9ybSA9IFwiYXN0Yy0xMHg1LXVub3JtXCIsIC8vIDEweDUgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDIuNTYgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEweDVVbm9ybVNSR0IgPSBcImFzdGMtMTB4NS11bm9ybS1zcmdiXCIsIC8vIDEweDUgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDIuNTYgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEweDZVbm9ybSA9IFwiYXN0Yy0xMHg2LXVub3JtXCIsIC8vIDEweDYgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDIuMTMgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEweDZVbm9ybVNSR0IgPSBcImFzdGMtMTB4Ni11bm9ybS1zcmdiXCIsIC8vIDEweDYgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDIuMTMgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEweDhVbm9ybSA9IFwiYXN0Yy0xMHg4LXVub3JtXCIsIC8vIDEweDggYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDEuNiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDMTB4OFVub3JtU1JHQiA9IFwiYXN0Yy0xMHg4LXVub3JtLXNyZ2JcIiwgLy8gMTB4OCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMS42IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEMxMHgxMFVub3JtID0gXCJhc3RjLTEweDEwLXVub3JtXCIsIC8vIDEweDEwIGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgxLjI4IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEMxMHgxMFVub3JtU1JHQiA9IFwiYXN0Yy0xMHgxMC11bm9ybS1zcmdiXCIsIC8vIDEweDEwIGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgxLjI4IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEMxMngxMFVub3JtID0gXCJhc3RjLTEyeDEwLXVub3JtXCIsIC8vIDEyeDEwIGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgxLjA3IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEMxMngxMFVub3JtU1JHQiA9IFwiYXN0Yy0xMngxMC11bm9ybS1zcmdiXCIsIC8vIDEyeDEwIGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgxLjA3IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEMxMngxMlVub3JtID0gXCJhc3RjLTEyeDEyLXVub3JtXCIsIC8vIDEyeDEyIGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgwLjg5IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEMxMngxMlVub3JtU1JHQiA9IFwiYXN0Yy0xMngxMi11bm9ybS1zcmdiXCIsIC8vIDEyeDEyIGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgwLjg5IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cblx0Ly8gXCJkZXB0aDI0dW5vcm0tc3RlbmNpbDhcIiBmZWF0dXJlXG5cdERlcHRoMjRVbm9ybVN0ZW5jaWw4ID0gXCJkZXB0aDI0dW5vcm0tc3RlbmNpbDhcIixcblxuXHQvLyBcImRlcHRoMzJmbG9hdC1zdGVuY2lsOFwiIGZlYXR1cmVcblx0RGVwdGgzMkZsb2F0U3RlbmNpbDggPSBcImRlcHRoMzJmbG9hdC1zdGVuY2lsOFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEFkZHJlc3NNb2RlIHtcblx0Q2xhbXBUb0VkZ2UgPSBcImNsYW1wLXRvLWVkZ2VcIixcblx0UmVwZWF0ID0gXCJyZXBlYXRcIixcblx0TWlycm9yUmVwZWF0ID0gXCJtaXJyb3ItcmVwZWF0XCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gRmlsdGVyTW9kZSB7XG5cdE5lYXJlc3QgPSBcIm5lYXJlc3RcIixcblx0TGluZWFyID0gXCJsaW5lYXJcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBDb21wYXJlRnVuY3Rpb24ge1xuXHROZXZlciA9IFwibmV2ZXJcIixcblx0TGVzcyA9IFwibGVzc1wiLFxuXHRFcXVhbCA9IFwiZXF1YWxcIixcblx0TGVzc0VxdWFsID0gXCJsZXNzLWVxdWFsXCIsXG5cdEdyZWF0ZXIgPSBcImdyZWF0ZXJcIixcblx0Tm90RXF1YWwgPSBcIm5vdC1lcXVhbFwiLFxuXHRHcmVhdGVyRXF1YWwgPSBcImdyZWF0ZXItZXF1YWxcIixcblx0QWx3YXlzID0gXCJhbHdheXNcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBTaGFkZXJTdGFnZSB7XG5cdFZlcnRleCA9IDEsXG5cdEZyYWdtZW50ID0gMixcblx0Q29tcHV0ZSA9IDRcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQnVmZmVyQmluZGluZ1R5cGUge1xuXHRVbmlmb3JtID0gXCJ1bmlmb3JtXCIsXG5cdFN0b3JhZ2UgPSBcInN0b3JhZ2VcIixcblx0UmVhZE9ubHlTdG9yYWdlID0gXCJyZWFkLW9ubHktc3RvcmFnZVwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFNhbXBsZXJCaW5kaW5nVHlwZSB7XG5cdEZpbHRlcmluZyA9IFwiZmlsdGVyaW5nXCIsXG5cdE5vbkZpbHRlcmluZyA9IFwibm9uLWZpbHRlcmluZ1wiLFxuXHRDb21wYXJpc29uID0gXCJjb21wYXJpc29uXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gVGV4dHVyZVNhbXBsZVR5cGUge1xuXHRGbG9hdCA9IFwiZmxvYXRcIixcblx0VW5maWx0ZXJhYmxlRmxvYXQgPSBcInVuZmlsdGVyYWJsZS1mbG9hdFwiLFxuXHREZXB0aCA9IFwiZGVwdGhcIixcblx0U2ludCA9IFwic2ludFwiLFxuXHRVaW50ID0gXCJ1aW50XCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gU3RvcmFnZVRleHR1cmVBY2Nlc3Mge1xuXHRXcml0ZU9ubHkgPSBcIndyaXRlLW9ubHlcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBDb21waWxhdGlvbk1lc3NhZ2VUeXBlIHtcblx0RXJyb3IgPSBcImVycm9yXCIsXG5cdFdhcm5pbmcgPSBcIndhcm5pbmdcIixcblx0SW5mbyA9IFwiaW5mb1wiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEF1dG9MYXlvdXRNb2RlIHtcblx0QXV0byA9IFwiYXV0b1wiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFByaW1pdGl2ZVRvcG9sb2d5IHtcblx0UG9pbnRMaXN0ID0gXCJwb2ludC1saXN0XCIsXG5cdExpbmVMaXN0ID0gXCJsaW5lLWxpc3RcIixcblx0TGluZVN0cmlwID0gXCJsaW5lLXN0cmlwXCIsXG5cdFRyaWFuZ2xlTGlzdCA9IFwidHJpYW5nbGUtbGlzdFwiLFxuXHRUcmlhbmdsZVN0cmlwID0gXCJ0cmlhbmdsZS1zdHJpcFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEZyb250RmFjZSB7XG5cdENDVyA9IFwiY2N3XCIsXG5cdENXID0gXCJjd1wiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEN1bGxNb2RlIHtcblx0Tm9uZSA9IFwibm9uZVwiLFxuXHRGcm9udCA9IFwiZnJvbnRcIixcblx0QmFjayA9IFwiYmFja1wiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIENvbG9yV3JpdGVGbGFncyB7XG5cdFJlZCA9IDEsXG5cdEdyZWVuID0gMixcblx0Qmx1ZSA9IDQsXG5cdEFscGhhID0gOCxcblx0QWxsID0gMTVcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQmxlbmRGYWN0b3Ige1xuXHRaZXJvID0gXCJ6ZXJvXCIsXG5cdE9uZSA9IFwib25lXCIsXG5cdFNyYyA9IFwic3JjXCIsXG5cdE9uZU1pbnVzU3JjID0gXCJvbmUtbWludXMtc3JjXCIsXG5cdFNyY0FscGhhID0gXCJzcmMtYWxwaGFcIixcblx0T25lTWludXNTcmNBbHBoYSA9IFwib25lLW1pbnVzLXNyYy1hbHBoYVwiLFxuXHREc3QgPSBcImRzdFwiLFxuXHRPbmVNaW51c0RzdCA9IFwib25lLW1pbnVzLWRzdFwiLFxuXHREc3RBbHBoYSA9IFwiZHN0LWFscGhhXCIsXG5cdE9uZU1pbnVzRHN0QWxwaGEgPSBcIm9uZS1taW51cy1kc3QtYWxwaGFcIixcblx0U3JjQWxwaGFTYXR1cmF0ZWQgPSBcInNyYy1hbHBoYS1zYXR1cmF0ZWRcIixcblx0Q29uc3RhbnQgPSBcImNvbnN0YW50XCIsXG5cdE9uZU1pbnVzQ29uc3RhbnQgPSBcIm9uZS1taW51cy1jb25zdGFudFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEJsZW5kT3BlcmF0aW9uIHtcblx0QWRkID0gXCJhZGRcIixcblx0U3VidHJhY3QgPSBcInN1YnRyYWN0XCIsXG5cdFJldmVyc2VTdWJ0cmFjdCA9IFwicmV2ZXJzZS1zdWJ0cmFjdFwiLFxuXHRNaW4gPSBcIm1pblwiLFxuXHRNYXggPSBcIm1heFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFN0ZW5jaWxPcGVyYXRpb24ge1xuXHRLZWVwID0gXCJrZWVwXCIsXG5cdFplcm8gPSBcInplcm9cIixcblx0UmVwbGFjZSA9IFwicmVwbGFjZVwiLFxuXHRJbnZlcnQgPSBcImludmVydFwiLFxuXHRJbmNyZW1lbnRDbGFtcCA9IFwiaW5jcmVtZW50LWNsYW1wXCIsXG5cdERlY3JlbWVudENsYW1wID0gXCJkZWNyZW1lbnQtY2xhbXBcIixcblx0SW5jcmVtZW50V3JhcCA9IFwiaW5jcmVtZW50LXdyYXBcIixcblx0RGVjcmVtZW50V3JhcCA9IFwiZGVjcmVtZW50LXdyYXBcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBJbmRleEZvcm1hdCB7XG5cdFVpbnQxNiA9IFwidWludDE2XCIsXG5cdFVpbnQzMiA9IFwidWludDMyXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gVmVydGV4Rm9ybWF0IHtcblx0VWludDh4MiA9IFwidWludDh4MlwiLFxuXHRVaW50OHg0ID0gXCJ1aW50OHg0XCIsXG5cdFNpbnQ4eDIgPSBcInNpbnQ4eDJcIixcblx0U2ludDh4NCA9IFwic2ludDh4NFwiLFxuXHRVbm9ybTh4MiA9IFwidW5vcm04eDJcIixcblx0VW5vcm04eDQgPSBcInVub3JtOHg0XCIsXG5cdFNub3JtOHgyID0gXCJzbm9ybTh4MlwiLFxuXHRTbm9ybTh4NCA9IFwic25vcm04eDRcIixcblx0VWludDE2eDIgPSBcInVpbnQxNngyXCIsXG5cdFVpbnQxNng0ID0gXCJ1aW50MTZ4NFwiLFxuXHRTaW50MTZ4MiA9IFwic2ludDE2eDJcIixcblx0U2ludDE2eDQgPSBcInNpbnQxNng0XCIsXG5cdFVub3JtMTZ4MiA9IFwidW5vcm0xNngyXCIsXG5cdFVub3JtMTZ4NCA9IFwidW5vcm0xNng0XCIsXG5cdFNub3JtMTZ4MiA9IFwic25vcm0xNngyXCIsXG5cdFNub3JtMTZ4NCA9IFwic25vcm0xNng0XCIsXG5cdEZsb2F0MTZ4MiA9IFwiZmxvYXQxNngyXCIsXG5cdEZsb2F0MTZ4NCA9IFwiZmxvYXQxNng0XCIsXG5cdEZsb2F0MzIgPSBcImZsb2F0MzJcIixcblx0RmxvYXQzMngyID0gXCJmbG9hdDMyeDJcIixcblx0RmxvYXQzMngzID0gXCJmbG9hdDMyeDNcIixcblx0RmxvYXQzMng0ID0gXCJmbG9hdDMyeDRcIixcblx0VWludDMyID0gXCJ1aW50MzJcIixcblx0VWludDMyeDIgPSBcInVpbnQzMngyXCIsXG5cdFVpbnQzMngzID0gXCJ1aW50MzJ4M1wiLFxuXHRVaW50MzJ4NCA9IFwidWludDMyeDRcIixcblx0U2ludDMyID0gXCJzaW50MzJcIixcblx0U2ludDMyeDIgPSBcInNpbnQzMngyXCIsXG5cdFNpbnQzMngzID0gXCJzaW50MzJ4M1wiLFxuXHRTaW50MzJ4NCA9IFwic2ludDMyeDRcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBJbnB1dFN0ZXBNb2RlIHtcblx0VmVydGV4ID0gXCJ2ZXJ0ZXhcIixcblx0SW5zdGFuY2UgPSBcImluc3RhbmNlXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQ29tcHV0ZVBhc3NUaW1lc3RhbXBMb2NhdGlvbiB7XG5cdEJlZ2lubmluZyA9IFwiYmVnaW5uaW5nXCIsXG5cdEVuZCA9IFwiZW5kXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gUmVuZGVyUGFzc1RpbWVzdGFtcExvY2F0aW9uIHtcblx0QmVnaW5uaW5nID0gXCJiZWdpbm5pbmdcIixcblx0RW5kID0gXCJlbmRcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBMb2FkT3Age1xuXHRMb2FkID0gXCJsb2FkXCIsXG5cdENsZWFyID0gXCJjbGVhclwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFN0b3JlT3Age1xuXHRTdG9yZSA9IFwic3RvcmVcIixcblx0RGlzY2FyZCA9IFwiZGlzY2FyZFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFF1ZXJ5VHlwZSB7XG5cdE9jY2x1c2lvbiA9IFwib2NjbHVzaW9uXCIsXG5cdFRpbWVzdGFtcCA9IFwidGltZXN0YW1wXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQ2FudmFzQWxwaGFNb2RlIHtcblx0T3BhcXVlID0gXCJvcGFxdWVcIixcblx0UHJlbXVsdGlwbGllZCA9IFwicHJlbXVsdGlwbGllZFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIERldmljZUxvc3RSZWFzb24ge1xuXHREZXN0cm95ZWQgPSBcImRlc3Ryb3llZFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEVycm9yRmlsdGVyIHtcblx0T3V0T2ZNZW1vcnkgPSBcIm91dC1vZi1tZW1vcnlcIixcblx0VmFsaWRhdGlvbiA9IFwidmFsaWRhdGlvblwiXG59XG5cbmV4cG9ydCBlbnVtIEdQVUNvbG9yV3JpdGUge1xuXHRSZWQgPSAweDEsXG5cdEdyZWVuID0gMHgyLFxuXHRCbHVlID0gMHg0LFxuXHRBbHBoYSA9IDB4OCxcblx0QWxsID0gMHhmXG59XG5leHBvcnQgZW51bSBDb21tYW5kU3ViVHlwZSB7XG5cdFNoYWRvdyA9IFwic2hhZG93XCIsXG5cdFBpY2sgPSBcInBpY2tcIlxufVxuZXhwb3J0IGVudW0gSW50ZXJzZWN0IHtcblx0T1VUU0lERSA9IC0xLFxuXHRJTlRFUlNFQ1RJTkcgPSAwLFxuXHRJTlNJREUgPSAxXG59XG4iLCJpbXBvcnQgeyBCdWZmZXJVc2FnZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmNsYXNzIEJ1ZmZlciB7XHJcblx0cHVibGljIGdwdUJ1ZmZlcjogR1BVQnVmZmVyO1xyXG5cdGRldmljZTogR1BVRGV2aWNlO1xyXG5cdHVzYWdlOiBudW1iZXI7XHJcblx0ZGF0YTogQXJyYXlCdWZmZXJWaWV3O1xyXG5cdHNpemU6IG51bWJlcjtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdGxhYmVsOiBzdHJpbmcsXHJcblx0XHRkZXZpY2U6IEdQVURldmljZSxcclxuXHRcdHVzYWdlOiBHUFVCdWZmZXJVc2FnZUZsYWdzLFxyXG5cdFx0ZGF0YTogQXJyYXlCdWZmZXJWaWV3IHwgbnVsbCxcclxuXHRcdHNpemU/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHRoaXMuZGV2aWNlID0gZGV2aWNlO1xyXG5cdFx0dGhpcy51c2FnZSA9IHVzYWdlO1xyXG5cdFx0dGhpcy5kYXRhID0gZGF0YTtcclxuXHRcdHRoaXMuc2l6ZSA9IHNpemUgIT0gdW5kZWZpbmVkID8gKHNpemUgKyAzKSAmIH4zIDogKGRhdGEuYnl0ZUxlbmd0aCArIDMpICYgfjM7IC8vIDQgYnl0ZXMgYWxpZ25tZW50cyAoYmVjYXVzZSBvZiB0aGUgdXBsb2FkIHdoaWNoIHJlcXVpcmVzIHRoaXMpXHJcblx0XHR0aGlzLmdwdUJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xyXG5cdFx0XHRsYWJlbDogbGFiZWwgfHwgXCJcIixcclxuXHRcdFx0c2l6ZTogdGhpcy5zaXplLFxyXG5cdFx0XHR1c2FnZVxyXG5cdFx0fSk7XHJcblx0XHRpZiAoZGF0YSkgdGhpcy5zZXRTdWJEYXRhKDAsIGRhdGEsIHRoaXMuc2l6ZSk7XHJcblx0fVxyXG5cdHN0YXRpYyBjcmVhdGUoXHJcblx0XHRsYWJlbDogc3RyaW5nLFxyXG5cdFx0ZGV2aWNlOiBHUFVEZXZpY2UsXHJcblx0XHR1c2FnZTogR1BVQnVmZmVyVXNhZ2VGbGFncyxcclxuXHRcdGRhdGE6IEFycmF5QnVmZmVyVmlldyB8IG51bGwsXHJcblx0XHRzaXplPzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRyZXR1cm4gbmV3IEJ1ZmZlcihsYWJlbCwgZGV2aWNlLCB1c2FnZSwgZGF0YSwgc2l6ZSk7XHJcblx0fVxyXG5cdHN0YXRpYyBjcmVhdGVWZXJ0ZXhCdWZmZXIobGFiZWw6IHN0cmluZywgZGV2aWNlOiBHUFVEZXZpY2UsIGRhdGE6IEFycmF5QnVmZmVyVmlldyk6IEJ1ZmZlciB7XHJcblx0XHRyZXR1cm4gbmV3IEJ1ZmZlcihsYWJlbCwgZGV2aWNlLCBCdWZmZXJVc2FnZS5WZXJ0ZXggfCBCdWZmZXJVc2FnZS5Db3B5RHN0LCBkYXRhLCBkYXRhLmJ5dGVMZW5ndGgpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNyZWF0ZUluZGV4QnVmZmVyKGxhYmVsOiBzdHJpbmcsIGRldmljZTogR1BVRGV2aWNlLCBkYXRhOiBBcnJheUJ1ZmZlclZpZXcpOiBCdWZmZXIge1xyXG5cdFx0cmV0dXJuIG5ldyBCdWZmZXIobGFiZWwsIGRldmljZSwgQnVmZmVyVXNhZ2UuSW5kZXggfCBCdWZmZXJVc2FnZS5Db3B5RHN0LCBkYXRhKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjcmVhdGVVbmlmb3JtQnVmZmVyKGxhYmVsOiBzdHJpbmcsIGRldmljZTogR1BVRGV2aWNlLCBzaXplOiBudW1iZXIsIHVzYWdlPzogQnVmZmVyVXNhZ2UpOiBCdWZmZXIge1xyXG5cdFx0cmV0dXJuIG5ldyBCdWZmZXIobGFiZWwsIGRldmljZSwgdXNhZ2UsIG51bGwsIHNpemUpO1xyXG5cdH1cclxuXHRzdGF0aWMgZ2V0QnVmZmVyVHlwZSh1c2FnZSkge1xyXG5cdFx0bGV0IHJlc3VsdDtcclxuXHRcdHN3aXRjaCAodXNhZ2UpIHtcclxuXHRcdFx0Y2FzZSBCdWZmZXJVc2FnZS5Vbmlmb3JtOlxyXG5cdFx0XHRcdHJlc3VsdCA9IFwidW5pZm9ybVwiO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIEJ1ZmZlclVzYWdlLlN0b3JhZ2U6XHJcblx0XHRcdFx0cmVzdWx0ID0gXCJzdG9yYWdlXCI7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0fVxyXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ncHV3ZWIvZ3B1d2ViL2Jsb2IvbWFpbi9kZXNpZ24vQnVmZmVyT3BlcmF0aW9ucy5tZFxyXG5cdHB1YmxpYyBzZXRTdWJEYXRhKG9mZnNldDogbnVtYmVyLCBkYXRhOiBBcnJheUJ1ZmZlclZpZXcsIHNpemU/OiBudW1iZXIpOiB2b2lkIHtcclxuXHRcdGNvbnN0IHNyY0FycmF5QnVmZmVyID0gZGF0YS5idWZmZXI7XHJcblx0XHRjb25zdCBieXRlQ291bnQgPSBzaXplID8/IHNyY0FycmF5QnVmZmVyLmJ5dGVMZW5ndGg7XHJcblx0XHRjb25zdCBzcmNCdWZmZXIgPSB0aGlzLmRldmljZS5jcmVhdGVCdWZmZXIoe1xyXG5cdFx0XHRtYXBwZWRBdENyZWF0aW9uOiB0cnVlLFxyXG5cdFx0XHRzaXplOiBieXRlQ291bnQsXHJcblx0XHRcdHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQ1xyXG5cdFx0fSk7XHJcblx0XHRjb25zdCBhcnJheUJ1ZmZlciA9IHNyY0J1ZmZlci5nZXRNYXBwZWRSYW5nZSgpO1xyXG5cclxuXHRcdG5ldyBVaW50MTZBcnJheShhcnJheUJ1ZmZlcikuc2V0KG5ldyBVaW50MTZBcnJheShzcmNBcnJheUJ1ZmZlcikpOyAvLyBtZW1jcHlcclxuXHRcdHNyY0J1ZmZlci51bm1hcCgpO1xyXG5cclxuXHRcdHRoaXMuY29weVRvQnVmZmVyKHNyY0J1ZmZlciwgb2Zmc2V0LCBieXRlQ291bnQpO1xyXG5cclxuXHRcdHNyY0J1ZmZlci5kZXN0cm95KCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgY29weVRvQnVmZmVyKHNyY0J1ZmZlcjogR1BVQnVmZmVyLCBvZmZzZXQ6IG51bWJlciwgYnl0ZUNvdW50OiBudW1iZXIpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gdGhpcy5kZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTtcclxuXHRcdGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihzcmNCdWZmZXIsIDAsIHRoaXMuZ3B1QnVmZmVyLCBvZmZzZXQsIGJ5dGVDb3VudCk7XHJcblx0XHR0aGlzLmRldmljZS5xdWV1ZS5zdWJtaXQoW2NvbW1hbmRFbmNvZGVyLmZpbmlzaCgpXSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgY29weVRvVGV4dHVyZShcclxuXHRcdGJ5dGVzUGVyUm93OiBudW1iZXIsXHJcblx0XHRyb3dzUGVySW1hZ2U6IG51bWJlcixcclxuXHRcdGRlc3RpbmF0aW9uOiBHUFVJbWFnZUNvcHlUZXh0dXJlLFxyXG5cdFx0ZXh0ZW50OiBHUFVFeHRlbnQzRFxyXG5cdCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgY29tbWFuZEVuY29kZXIgPSB0aGlzLmRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpO1xyXG5cdFx0Y29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvVGV4dHVyZShcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGJ1ZmZlcjogdGhpcy5ncHVCdWZmZXIsXHJcblx0XHRcdFx0Ynl0ZXNQZXJSb3csXHJcblx0XHRcdFx0cm93c1BlckltYWdlXHJcblx0XHRcdH0sXHJcblx0XHRcdGRlc3RpbmF0aW9uLFxyXG5cdFx0XHRleHRlbnRcclxuXHRcdCk7XHJcblx0XHR0aGlzLmRldmljZS5xdWV1ZS5zdWJtaXQoW2NvbW1hbmRFbmNvZGVyLmZpbmlzaCgpXSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuZ3B1QnVmZmVyLmRlc3Ryb3koKTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJ1ZmZlcjtcclxuIiwiaW1wb3J0IEJpbmRHcm91cExheW91dCBmcm9tIFwiLi9CaW5kR3JvdXBMYXlvdXRcIjtcclxuXHJcbmNvbnN0IHBpcGVsaW5lTGF5b3V0Q2FjaGUgPSBuZXcgTWFwKCk7XHJcbmV4cG9ydCBjbGFzcyBQaXBlbGluZUxheW91dCB7XHJcbiAgcHVibGljIGdwdVBpcGVsaW5lTGF5b3V0OiBHUFVQaXBlbGluZUxheW91dDtcclxuICBpbmRleDogbnVtYmVyO1xyXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXHJcbiAgICBkZXZpY2U6IEdQVURldmljZSxcclxuICAgIGxhYmVsOiBzdHJpbmcsXHJcbiAgICBwdWJsaWMgZ3JvdXBMYXlvdXRzOiBCaW5kR3JvdXBMYXlvdXRbXSA9IFtdLFxyXG4gICAgaW5kZXg/OiBudW1iZXJcclxuICApIHtcclxuICAgIHRoaXMuaW5kZXggPSBpbmRleCB8fCAwO1xyXG4gICAgdGhpcy5ncHVQaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dCh7XHJcbiAgICAgIGxhYmVsOiBsYWJlbCxcclxuICAgICAgYmluZEdyb3VwTGF5b3V0czogZ3JvdXBMYXlvdXRzLm1hcCgobGF5b3V0KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGxheW91dC5ncHVCaW5kR3JvdXBMYXlvdXQ7XHJcbiAgICAgIH0pLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXRQaXBlbGluZUxheW91dEZyb21DYWNoZShcclxuICAgIGRldmljZTogR1BVRGV2aWNlLFxyXG4gICAgbGFiZWw6IHN0cmluZyxcclxuICAgIGdyb3VwTGF5b3V0czogQmluZEdyb3VwTGF5b3V0W11cclxuICApOiBQaXBlbGluZUxheW91dCB7XHJcbiAgICBpZiAocGlwZWxpbmVMYXlvdXRDYWNoZS5oYXMobGFiZWwpKSB7XHJcbiAgICAgIHJldHVybiBwaXBlbGluZUxheW91dENhY2hlLmdldChsYWJlbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBuZXcgUGlwZWxpbmVMYXlvdXQoZGV2aWNlLCBsYWJlbCwgZ3JvdXBMYXlvdXRzKTtcclxuICAgICAgcGlwZWxpbmVMYXlvdXRDYWNoZS5zZXQobGFiZWwsIGJpbmRHcm91cExheW91dCk7XHJcbiAgICAgIHJldHVybiBiaW5kR3JvdXBMYXlvdXQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCBCaW5kR3JvdXBMYXlvdXQgZnJvbSBcIi4vQmluZEdyb3VwTGF5b3V0XCI7XHJcbmltcG9ydCB7IENvbXB1dGVDb21tYW5kIH0gZnJvbSBcIi4vQ29tcHV0ZUNvbW1hbmRcIjtcclxuaW1wb3J0IERyYXdDb21tYW5kIGZyb20gXCIuL0RyYXdDb21tYW5kXCI7XHJcbmltcG9ydCB7IFBpcGVsaW5lTGF5b3V0IH0gZnJvbSBcIi4vUGlwZWxpbmVMYXlvdXRcIjtcclxuaW1wb3J0IHsgUmVuZGVyU3RhdGUgfSBmcm9tIFwiLi9SZW5kZXJTdGF0ZVwiO1xyXG5cclxuY29uc3QgcmVuZGVyUGlwZWxpbmVzID0gbmV3IE1hcCgpO1xyXG5jb25zdCBjb21wdXRlUGlwZWxpbmVzID0gbmV3IE1hcCgpO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQaXBlbGluZSB7XHJcblx0Z3B1UGlwZWxpbmU6IEdQVVJlbmRlclBpcGVsaW5lIHwgR1BVQ29tcHV0ZVBpcGVsaW5lO1xyXG5cdHR5cGU6IHN0cmluZztcclxuXHRkZXZpY2U6IEdQVURldmljZTtcclxuXHRkZXNjcmlwdG9yOiBHUFVSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgfCBHUFVDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dHlwZTogc3RyaW5nLFxyXG5cdFx0ZGV2aWNlOiBHUFVEZXZpY2UsXHJcblx0XHRkZXNjcmlwdG9yOiBHUFVSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgfCBHUFVDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yXHJcblx0KSB7XHJcblx0XHR0aGlzLnR5cGUgPSB0eXBlO1xyXG5cdFx0dGhpcy5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjtcclxuXHRcdHRoaXMuZGV2aWNlID0gZGV2aWNlO1xyXG5cdFx0dGhpcy5jcmVhdGVQaXBlbGluZSgpO1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZVBpcGVsaW5lKCkge1xyXG5cdFx0aWYgKHRoaXMudHlwZSA9PSBcInJlbmRlclwiKSB7XHJcblx0XHRcdHRoaXMuZ3B1UGlwZWxpbmUgPSB0aGlzLmRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZSh0aGlzLmRlc2NyaXB0b3IgYXMgR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuZ3B1UGlwZWxpbmUgPSB0aGlzLmRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUodGhpcy5kZXNjcmlwdG9yIGFzIEdQVUNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRwdWJsaWMgYmluZChwYXNzRW5jb2RlcjogR1BVUmVuZGVyUGFzc0VuY29kZXIgfCBHUFVDb21wdXRlUGFzc0VuY29kZXIpIHtcclxuXHRcdGlmICh0aGlzLnR5cGUgPT0gXCJyZW5kZXJcIikge1xyXG5cdFx0XHQocGFzc0VuY29kZXIgYXMgR1BVUmVuZGVyUGFzc0VuY29kZXIpLnNldFBpcGVsaW5lKHRoaXMuZ3B1UGlwZWxpbmUgYXMgR1BVUmVuZGVyUGlwZWxpbmUpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0KHBhc3NFbmNvZGVyIGFzIEdQVUNvbXB1dGVQYXNzRW5jb2Rlcikuc2V0UGlwZWxpbmUodGhpcy5ncHVQaXBlbGluZSBhcyBHUFVDb21wdXRlUGlwZWxpbmUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRzdGF0aWMgZ2V0UmVuZGVyUGlwZWxpbmVGcm9tQ2FjaGUoXHJcblx0XHRkZXZpY2U6IEdQVURldmljZSxcclxuXHRcdGRyYXdDb21hbmQ6IERyYXdDb21tYW5kLFxyXG5cdFx0Z3JvdXBMYXlvdXRzOiBCaW5kR3JvdXBMYXlvdXRbXVxyXG5cdCk6IFBpcGVsaW5lIHtcclxuXHRcdGNvbnN0IHsgcmVuZGVyU3RhdGUsIHNoYWRlclNvdXJjZSB9ID0gZHJhd0NvbWFuZDtcclxuXHRcdGNvbnN0IHJzU3RyID0gSlNPTi5zdHJpbmdpZnkocmVuZGVyU3RhdGUpO1xyXG5cdFx0Y29uc3QgY29tYmluZVN0ciA9IHNoYWRlclNvdXJjZS51aWQuY29uY2F0KHJzU3RyKTtcclxuXHRcdGNvbnN0IGhhc2hJZCA9IHN0cmluZ1RvSGFzaChjb21iaW5lU3RyKTtcclxuXHRcdGNvbnN0IGNvbWJpbmVMYXlvdXRzID0gZ3JvdXBMYXlvdXRzXHJcblx0XHRcdD8uZmlsdGVyKChsYXlvdXQpID0+IGxheW91dCAhPSB1bmRlZmluZWQpXHJcblx0XHRcdD8uc29ydCgobGF5b3V0MSwgbGF5b3V0MikgPT4gbGF5b3V0MS5pbmRleCAtIGxheW91dDIuaW5kZXgpO1xyXG5cdFx0bGV0IHBpcGVsaW5lID0gcmVuZGVyUGlwZWxpbmVzLmdldChoYXNoSWQpO1xyXG5cdFx0aWYgKCFwaXBlbGluZSkge1xyXG5cdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gUGlwZWxpbmUuZ2V0UGlwZWxpbmVEZXNjcmlwdG9yKFxyXG5cdFx0XHRcdGRldmljZSxcclxuXHRcdFx0XHRkcmF3Q29tYW5kLFxyXG5cdFx0XHRcdHJlbmRlclN0YXRlLFxyXG5cdFx0XHRcdGNvbWJpbmVMYXlvdXRzLFxyXG5cdFx0XHRcdGhhc2hJZC50b1N0cmluZygpXHJcblx0XHRcdCk7XHJcblx0XHRcdHBpcGVsaW5lID0gbmV3IFBpcGVsaW5lKFwicmVuZGVyXCIsIGRldmljZSwgZGVzY3JpcHRvcik7XHJcblx0XHRcdHJlbmRlclBpcGVsaW5lcy5zZXQoaGFzaElkLCBwaXBlbGluZSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcGlwZWxpbmU7XHJcblx0fVxyXG5cdHN0YXRpYyBnZXRDb21wdXRlUGlwZWxpbmVGcm9tQ2FjaGUoXHJcblx0XHRkZXZpY2U6IEdQVURldmljZSxcclxuXHRcdGNvbXB1dGVDb21tYWQ6IENvbXB1dGVDb21tYW5kLFxyXG5cdFx0Z3JvdXBMYXlvdXRzOiBCaW5kR3JvdXBMYXlvdXRbXVxyXG5cdCk6IFBpcGVsaW5lIHtcclxuXHRcdGNvbnN0IHsgc2hhZGVyU291cmNlIH0gPSBjb21wdXRlQ29tbWFkO1xyXG5cdFx0Y29uc3QgaGFzaElkID0gc3RyaW5nVG9IYXNoKHNoYWRlclNvdXJjZS51aWQpO1xyXG5cdFx0bGV0IHBpcGVsaW5lID0gY29tcHV0ZVBpcGVsaW5lcy5nZXQoaGFzaElkKTtcclxuXHRcdGlmICghcGlwZWxpbmUpIHtcclxuXHRcdFx0cGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKHtcclxuXHRcdFx0XHRsYXlvdXQ6IFBpcGVsaW5lTGF5b3V0LmdldFBpcGVsaW5lTGF5b3V0RnJvbUNhY2hlKGRldmljZSwgaGFzaElkLnRvU3RyaW5nKCksIGdyb3VwTGF5b3V0cylcclxuXHRcdFx0XHRcdC5ncHVQaXBlbGluZUxheW91dCxcclxuXHRcdFx0XHRjb21wdXRlOiB7XHJcblx0XHRcdFx0XHRtb2R1bGU6IHNoYWRlclNvdXJjZS5jcmVhdGVTaGFkZXJNb2R1bGUoZGV2aWNlKSBhcyBHUFVTaGFkZXJNb2R1bGUsXHJcblx0XHRcdFx0XHRlbnRyeVBvaW50OiBzaGFkZXJTb3VyY2UuY29tcHV0ZU1haW5cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRjb21wdXRlUGlwZWxpbmVzLnNldChoYXNoSWQsIHBpcGVsaW5lKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBwaXBlbGluZTtcclxuXHR9XHJcblx0cHJpdmF0ZSBzdGF0aWMgZ2V0UGlwZWxpbmVEZXNjcmlwdG9yKFxyXG5cdFx0ZGV2aWNlOiBHUFVEZXZpY2UsXHJcblx0XHRkcmF3Q29tYW5kOiBEcmF3Q29tbWFuZCxcclxuXHRcdHJlbmRlclN0YXRlOiBSZW5kZXJTdGF0ZSxcclxuXHRcdGdyb3VwTGF5b3V0czogQmluZEdyb3VwTGF5b3V0W10sXHJcblx0XHRoYXNoSWQ6IHN0cmluZ1xyXG5cdCk6IEdQVVJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciB7XHJcblx0XHRjb25zdCB7IHZlcnRleEJ1ZmZlciwgc2hhZGVyU291cmNlIH0gPSBkcmF3Q29tYW5kO1xyXG5cdFx0Y29uc3QgeyB2ZXJ0LCBmcmFnIH0gPSBzaGFkZXJTb3VyY2UuY3JlYXRlU2hhZGVyTW9kdWxlKGRldmljZSkgYXMge1xyXG5cdFx0XHR2ZXJ0OiBHUFVTaGFkZXJNb2R1bGU7XHJcblx0XHRcdGZyYWc6IEdQVVNoYWRlck1vZHVsZTtcclxuXHRcdH07XHJcblx0XHRjb25zdCBwaXBlbGluZURlYyA9IHtcclxuXHRcdFx0bGF5b3V0OiBQaXBlbGluZUxheW91dC5nZXRQaXBlbGluZUxheW91dEZyb21DYWNoZShkZXZpY2UsIGhhc2hJZCwgZ3JvdXBMYXlvdXRzKS5ncHVQaXBlbGluZUxheW91dFxyXG5cdFx0fSBhcyBhbnk7XHJcblx0XHRpZiAodmVydClcclxuXHRcdFx0cGlwZWxpbmVEZWMudmVydGV4ID0ge1xyXG5cdFx0XHRcdG1vZHVsZTogdmVydCxcclxuXHRcdFx0XHRlbnRyeVBvaW50OiBzaGFkZXJTb3VyY2UudmVydEVudHJ5UG9pbnQsXHJcblx0XHRcdFx0YnVmZmVyczogdmVydGV4QnVmZmVyLmdldEJ1ZmZlckRlcygpIGFzIEl0ZXJhYmxlPEdQVVZlcnRleEJ1ZmZlckxheW91dD5cclxuXHRcdFx0fTtcclxuXHRcdGlmIChyZW5kZXJTdGF0ZS5wcmltaXRpdmUpIHBpcGVsaW5lRGVjLnByaW1pdGl2ZSA9IHJlbmRlclN0YXRlLnByaW1pdGl2ZS5nZXRHUFVQcmltaXRpdmVEZWMoKTtcclxuXHRcdGlmIChyZW5kZXJTdGF0ZS5kZXB0aFN0ZW5jaWwpIHBpcGVsaW5lRGVjLmRlcHRoU3RlbmNpbCA9IHJlbmRlclN0YXRlLmRlcHRoU3RlbmNpbC5nZXRHUFVEZXB0aFN0ZW5jaWxEZWMoKTtcclxuXHRcdGlmIChyZW5kZXJTdGF0ZS5tdWx0aXNhbXBsZSkgcGlwZWxpbmVEZWMubXVsdGlzYW1wbGUgPSByZW5kZXJTdGF0ZS5tdWx0aXNhbXBsZS5nZXRNdWx0aVNhbXBsZURlYygpO1xyXG5cdFx0aWYgKGZyYWcpXHJcblx0XHRcdHBpcGVsaW5lRGVjLmZyYWdtZW50ID0ge1xyXG5cdFx0XHRcdG1vZHVsZTogZnJhZyxcclxuXHRcdFx0XHRlbnRyeVBvaW50OiBzaGFkZXJTb3VyY2UuZnJhZ0VudHJ5UG9pbnQsXHJcblx0XHRcdFx0dGFyZ2V0czogcmVuZGVyU3RhdGUudGFyZ2V0cy5tYXAoKHRhcmdldCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRhcmdldC5nZXRHUFVUYXJnZXREZWMoKTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9O1xyXG5cdFx0cmV0dXJuIHBpcGVsaW5lRGVjO1xyXG5cdH1cclxufVxyXG4vLyBCb3Jyb3dlZCBmcm9tIGh0dHBzOi8vd2VyeGx0ZC5jb20vd3AvMjAxMC8wNS8xMy9qYXZhc2NyaXB0LWltcGxlbWVudGF0aW9uLW9mLWphdmFzLXN0cmluZy1oYXNoY29kZS1tZXRob2QvXHJcbmZ1bmN0aW9uIHN0cmluZ1RvSGFzaChzdHIpIHtcclxuXHRsZXQgaGFzaCA9IDA7XHJcblx0aWYgKHN0ci5sZW5ndGggPT0gMCkgcmV0dXJuIGhhc2g7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcclxuXHRcdGNvbnN0IGNoYXIgPSBzdHIuY2hhckNvZGVBdChpKTtcclxuXHRcdGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBjaGFyO1xyXG5cdFx0aGFzaCA9IGhhc2ggJiBoYXNoOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcclxuXHR9XHJcblx0cmV0dXJuIGhhc2g7XHJcbn1cclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vY2FtZXJhL0NhbWVyYVwiO1xyXG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCIuLi9tYXRlcmlhbC9NYXRlcmlhbFwiO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tIFwiLi4vbWF0aC9NYXRyaXg0XCI7XHJcbmltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XHJcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiLi9Db21tYW5kXCI7XHJcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuL0NvbnRleHRcIjtcclxuaW1wb3J0IEluZGV4QnVmZmVyIGZyb20gXCIuL0luZGV4QnVmZmVyXCI7XHJcbmltcG9ydCBQaXBlbGluZSBmcm9tIFwiLi9QaXBlbGluZVwiO1xyXG5pbXBvcnQgeyBSZW5kZXJTdGF0ZSB9IGZyb20gXCIuL1JlbmRlclN0YXRlXCI7XHJcbmltcG9ydCBSZW5kZXJUYXJnZXQgZnJvbSBcIi4vUmVuZGVyVGFyZ2V0XCI7XHJcbmltcG9ydCBTaGFkZXJEYXRhIGZyb20gXCIuL1NoYWRlckRhdGFcIjtcclxuaW1wb3J0IFZlcnRleHRCdWZmZXIgZnJvbSBcIi4vVmVydGV4dEJ1ZmZlclwiO1xyXG5cclxuY2xhc3MgRHJhd0NvbW1hbmQgaW1wbGVtZW50cyBDb21tYW5kIHtcclxuXHRwdWJsaWMgdHlwZT86IHN0cmluZztcclxuXHJcblx0cHVibGljIHNoYWRlckRhdGE/OiBTaGFkZXJEYXRhO1xyXG5cclxuXHRwdWJsaWMgcmVuZGVyVGFyZ2V0PzogUmVuZGVyVGFyZ2V0O1xyXG5cclxuXHRwdWJsaWMgdmVydGV4QnVmZmVyPzogVmVydGV4dEJ1ZmZlcjtcclxuXHJcblx0cHVibGljIGluZGV4QnVmZmVyPzogSW5kZXhCdWZmZXI7XHJcblxyXG5cdHB1YmxpYyByZW5kZXJTdGF0ZT86IFJlbmRlclN0YXRlO1xyXG5cclxuXHRwdWJsaWMgcXVlcnlJbmRleD86IG51bWJlcjtcclxuXHJcblx0cHVibGljIGNvdW50PzogbnVtYmVyO1xyXG5cclxuXHRwdWJsaWMgaW5zdGFuY2VzPzogbnVtYmVyO1xyXG5cclxuXHRwdWJsaWMgc2hhZGVyU291cmNlPzogU2hhZGVyU291cmNlO1xyXG5cclxuXHRwdWJsaWMgZGlydHk/OiBib29sZWFuO1xyXG5cclxuXHRwdWJsaWMgbGlnaHQ/OiBib29sZWFuO1xyXG5cclxuXHRwdWJsaWMgaW5kaXJlY3RCdWZmZXI/OiBCdWZmZXI7XHJcblxyXG5cdHB1YmxpYyBtb2RlbE1hdHJpeD86IE1hdHJpeDQ7XHJcblxyXG5cdHB1YmxpYyBsaWdodFNoYWRlckRhdGE/OiBTaGFkZXJEYXRhO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihvcHRpb25zOiBEcmF3Q29tbWFuZFByb3BzKSB7XHJcblx0XHR0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XHJcblxyXG5cdFx0dGhpcy5zaGFkZXJEYXRhID0gb3B0aW9ucy5zaGFkZXJEYXRhO1xyXG5cclxuXHRcdHRoaXMucmVuZGVyVGFyZ2V0ID0gb3B0aW9ucy5yZW5kZXJUYXJnZXQ7XHJcblxyXG5cdFx0dGhpcy52ZXJ0ZXhCdWZmZXIgPSBvcHRpb25zLnZlcnRleEJ1ZmZlcjtcclxuXHJcblx0XHR0aGlzLmluZGV4QnVmZmVyID0gb3B0aW9ucy5pbmRleEJ1ZmZlcjtcclxuXHJcblx0XHR0aGlzLnJlbmRlclN0YXRlID0gb3B0aW9ucy5yZW5kZXJTdGF0ZTtcclxuXHJcblx0XHR0aGlzLnF1ZXJ5SW5kZXggPSBvcHRpb25zLnF1ZXJ5SW5kZXg7XHJcblxyXG5cdFx0dGhpcy5jb3VudCA9IG9wdGlvbnMuY291bnQ7XHJcblxyXG5cdFx0dGhpcy5pbnN0YW5jZXMgPSBvcHRpb25zLmluc3RhbmNlcztcclxuXHJcblx0XHR0aGlzLnNoYWRlclNvdXJjZSA9IG9wdGlvbnMuc2hhZGVyU291cmNlO1xyXG5cclxuXHRcdHRoaXMuZGlydHkgPSBvcHRpb25zLmRpcnR5O1xyXG5cclxuXHRcdHRoaXMubGlnaHQgPSBvcHRpb25zLmxpZ2h0O1xyXG5cclxuXHRcdHRoaXMubW9kZWxNYXRyaXggPSBvcHRpb25zLm1vZGVsTWF0cml4O1xyXG5cclxuXHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhID0gb3B0aW9ucy5saWdodFNoYWRlckRhdGE7XHJcblx0fVxyXG5cdHB1YmxpYyBzaGFsbG93Q2xvbmUobWF0ZXJpYWw/OiBNYXRlcmlhbCkge1xyXG5cdFx0aWYgKG1hdGVyaWFsKSB7XHJcblx0XHRcdHJldHVybiBuZXcgRHJhd0NvbW1hbmQoe1xyXG5cdFx0XHRcdHZlcnRleEJ1ZmZlcjogdGhpcy52ZXJ0ZXhCdWZmZXIsXHJcblx0XHRcdFx0aW5kZXhCdWZmZXI6IHRoaXMuaW5kZXhCdWZmZXIsXHJcblx0XHRcdFx0c2hhZGVyRGF0YTogbWF0ZXJpYWwuc2hhZGVyRGF0YSxcclxuXHRcdFx0XHRpbnN0YW5jZXM6IHRoaXMuaW5zdGFuY2VzLFxyXG5cdFx0XHRcdGNvdW50OiB0aGlzLmNvdW50LFxyXG5cdFx0XHRcdHJlbmRlclN0YXRlOiBtYXRlcmlhbC5yZW5kZXJTdGF0ZSxcclxuXHRcdFx0XHRzaGFkZXJTb3VyY2U6IG1hdGVyaWFsLnNoYWRlclNvdXJjZSxcclxuXHRcdFx0XHR0eXBlOiBcInJlbmRlclwiLFxyXG5cdFx0XHRcdGxpZ2h0OiBtYXRlcmlhbC5saWdodCxcclxuXHRcdFx0XHRtb2RlbE1hdHJpeDogdGhpcy5tb2RlbE1hdHJpeCxcclxuXHRcdFx0XHRsaWdodFNoYWRlckRhdGE6IG1hdGVyaWFsLmxpZ2h0ID8gdGhpcy5saWdodFNoYWRlckRhdGEgOiB1bmRlZmluZWRcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHB1YmxpYyByZW5kZXIoY29udGV4dD86IENvbnRleHQsIHBhc3NFbmNvZGVyPzogR1BVUmVuZGVyUGFzc0VuY29kZXIsIGNhbWVyYT86IENhbWVyYSk6IHZvaWQge1xyXG5cdFx0Y29uc3Qge1xyXG5cdFx0XHRzaGFkZXJEYXRhLFxyXG5cdFx0XHRyZW5kZXJTdGF0ZSxcclxuXHRcdFx0dmVydGV4QnVmZmVyLFxyXG5cdFx0XHRpbmRleEJ1ZmZlcixcclxuXHRcdFx0bGlnaHRTaGFkZXJEYXRhLFxyXG5cdFx0XHRzaGFkZXJTb3VyY2UsXHJcblx0XHRcdGNvdW50LFxyXG5cdFx0XHRpbnN0YW5jZXMsXHJcblx0XHRcdHJlbmRlclRhcmdldFxyXG5cdFx0fSA9IHRoaXM7XHJcblx0XHRjb25zdCBjdXJyZW50UGFzc0VuY29kZXIgPSByZW5kZXJUYXJnZXQ/LmJlZ2luUmVuZGVyUGFzc0VuY29kZXI/Lihjb250ZXh0KSA/PyBwYXNzRW5jb2RlcjtcclxuXHRcdGNvbnN0IGRlZmluZXMgPSBPYmplY3QuYXNzaWduKHt9LCBsaWdodFNoYWRlckRhdGE/LmRlZmluZXMgPz8ge30sIGNhbWVyYT8uc2hhZGVyRGF0YT8uZGVmaW5lcyA/PyB7fSk7XHJcblx0XHRjb25zdCB7IGRldmljZSB9ID0gY29udGV4dDtcclxuXHJcblx0XHRzaGFkZXJEYXRhPy5iaW5kPy4oY29udGV4dCwgY3VycmVudFBhc3NFbmNvZGVyKTtcclxuXHJcblx0XHRjYW1lcmE/LnNoYWRlckRhdGE/LmJpbmQoY29udGV4dCwgY3VycmVudFBhc3NFbmNvZGVyKTtcclxuXHJcblx0XHRsaWdodFNoYWRlckRhdGE/LmJpbmQ/Lihjb250ZXh0LCBjdXJyZW50UGFzc0VuY29kZXIpO1xyXG5cclxuXHRcdHJlbmRlclN0YXRlPy5iaW5kPy4oY3VycmVudFBhc3NFbmNvZGVyLCBjb250ZXh0KTtcclxuXHJcblx0XHR2ZXJ0ZXhCdWZmZXI/LmJpbmQ/LihkZXZpY2UsIGN1cnJlbnRQYXNzRW5jb2Rlcik7XHJcblxyXG5cdFx0aW5kZXhCdWZmZXI/LmJpbmQ/LihkZXZpY2UsIGN1cnJlbnRQYXNzRW5jb2Rlcik7XHJcblxyXG5cdFx0c2hhZGVyU291cmNlPy5zZXREZWZpbmVzPy4oZGVmaW5lcyk7XHJcblxyXG5cdFx0Y29uc3QgcGlwZWxpbmUgPSBQaXBlbGluZS5nZXRSZW5kZXJQaXBlbGluZUZyb21DYWNoZShkZXZpY2UsIHRoaXMsIFtcclxuXHRcdFx0c2hhZGVyRGF0YT8uZ3JvdXBMYXlvdXQsXHJcblx0XHRcdGxpZ2h0U2hhZGVyRGF0YT8uZ3JvdXBMYXlvdXQsXHJcblx0XHRcdGNhbWVyYT8uc2hhZGVyRGF0YT8uZ3JvdXBMYXlvdXRcclxuXHRcdF0pO1xyXG5cdFx0cGlwZWxpbmUuYmluZChjdXJyZW50UGFzc0VuY29kZXIpO1xyXG5cdFx0aWYgKGluZGV4QnVmZmVyKSB7XHJcblx0XHRcdGN1cnJlbnRQYXNzRW5jb2Rlci5kcmF3SW5kZXhlZChjb3VudCB8fCAwLCBpbnN0YW5jZXMgfHwgMSwgMCwgMCwgMCk7XHJcblx0XHR9IGVsc2UgaWYgKGNvdW50KSB7XHJcblx0XHRcdGN1cnJlbnRQYXNzRW5jb2Rlci5kcmF3KGNvdW50LCBpbnN0YW5jZXMgfHwgMSwgMCwgMCk7XHJcblx0XHR9XHJcblx0XHRyZW5kZXJUYXJnZXQ/LmVuZFJlbmRlclBhc3NFbmNvZGVyPy4oKTtcclxuXHR9XHJcbn1cclxudHlwZSBEcmF3Q29tbWFuZFByb3BzID0ge1xyXG5cdHR5cGU/OiBzdHJpbmc7XHJcblxyXG5cdHNoYWRlckRhdGE/OiBTaGFkZXJEYXRhO1xyXG5cclxuXHRyZW5kZXJUYXJnZXQ/OiBSZW5kZXJUYXJnZXQ7XHJcblxyXG5cdHZlcnRleEJ1ZmZlcj86IFZlcnRleHRCdWZmZXI7XHJcblxyXG5cdGluZGV4QnVmZmVyPzogSW5kZXhCdWZmZXI7XHJcblxyXG5cdHJlbmRlclN0YXRlPzogUmVuZGVyU3RhdGU7XHJcblxyXG5cdHF1ZXJ5SW5kZXg/OiBudW1iZXI7XHJcblxyXG5cdGNvdW50PzogbnVtYmVyO1xyXG5cclxuXHRpbnN0YW5jZXM/OiBudW1iZXI7XHJcblxyXG5cdHNoYWRlclNvdXJjZT86IFNoYWRlclNvdXJjZTtcclxuXHJcblx0ZGlydHk/OiBib29sZWFuO1xyXG5cclxuXHRsaWdodD86IGJvb2xlYW47XHJcblxyXG5cdG1vZGVsTWF0cml4PzogTWF0cml4NDtcclxuXHJcblx0bGlnaHRTaGFkZXJEYXRhPzogU2hhZGVyRGF0YTtcclxufTtcclxuZXhwb3J0IGRlZmF1bHQgRHJhd0NvbW1hbmQ7XHJcbiIsImltcG9ydCBCaW5kR3JvdXBMYXlvdXQgZnJvbSBcIi4uL3JlbmRlci9CaW5kR3JvdXBMYXlvdXRcIjtcclxuaW1wb3J0IEJpbmRHcm91cEVudGl0eSBmcm9tIFwiLi4vcmVuZGVyL0JpbmRHcm91cEVudGl0eVwiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcclxuaW1wb3J0IHtcclxuXHRCbGVuZEZhY3RvcixcclxuXHRCbGVuZE9wZXJhdGlvbixcclxuXHRDb2xvcldyaXRlRmxhZ3MsXHJcblx0Q29tcGFyZUZ1bmN0aW9uLFxyXG5cdEN1bGxNb2RlLFxyXG5cdEZyb250RmFjZSxcclxuXHRJbmRleEZvcm1hdCxcclxuXHRQcmltaXRpdmVUb3BvbG9neSxcclxuXHRTdGVuY2lsT3BlcmF0aW9uLFxyXG5cdFRleHR1cmVGb3JtYXRcclxufSBmcm9tIFwiLi9XZWJHUFVDb25zdGFudFwiO1xyXG5pbXBvcnQgU2FtcGxlciBmcm9tIFwiLi4vcmVuZGVyL1NhbXBsZXJcIjtcclxuaW1wb3J0IFBvc3RFZmZlY3QgZnJvbSBcIi4uL3Bvc3QtcHJvY2Vzcy9Qb3N0RWZmZWN0XCI7XHJcbmltcG9ydCB7IExpZ2h0IH0gZnJvbSBcIi4uL2xpZ2h0L0xpZ2h0XCI7XHJcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi4vbWVzaC9NZXNoXCI7XHJcbmV4cG9ydCBjb25zdCBHUFVDYW52YXNDb21wb3NpdGluZ0FscGhhTW9kZToge1xyXG5cdFtrZXk6IHN0cmluZ106IEdQVUNhbnZhc0NvbXBvc2l0aW5nQWxwaGFNb2RlO1xyXG59ID0ge1xyXG5cdE9wYXF1ZTogXCJvcGFxdWVcIixcclxuXHRQcmVtdWx0aXBsaWVkOiBcInByZW11bHRpcGxpZWRcIlxyXG59O1xyXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHRTdGF0ZSB7XHJcblx0ZGV2aWNlOiBHUFVEZXZpY2U7XHJcblx0Z2xzbGFuZzoge1xyXG5cdFx0Y29tcGlsZUdMU0w6IChzb3VyY2U6IHN0cmluZywgdHlwZTogc3RyaW5nKSA9PiBzdHJpbmc7XHJcblx0fTtcclxuXHRkZWJ1ZzogYm9vbGVhbjtcclxuXHRlcnJvcjogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0T3B0aW9ucyB7XHJcblx0Y2FudmFzPzogSFRNTENhbnZhc0VsZW1lbnQ7XHJcblx0Y29udGFpbmVyPzogSFRNTERpdkVsZW1lbnQ7XHJcblx0Y29udGV4dD86IEdQVUNhbnZhc0NvbnRleHQ7XHJcblx0cGl4ZWxSYXRpbz86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMaWdodE1hbmdlck9wdGlvbnMge1xyXG5cdG9wZW5TaGFkb3c6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmluZEdyb3VwTGF5b3V0RW50cnkgZXh0ZW5kcyBHUFVCaW5kR3JvdXBMYXlvdXRFbnRyeSB7XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdHVuaWZvcm1zPzogYW55W107XHJcblx0ZGltZW5zaW9uPzogR1BVVGV4dHVyZURpbWVuc2lvbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBCaW5kR3JvdXBPcHRpb25zIGV4dGVuZHMgR1BVQmluZEdyb3VwRGVzY3JpcHRvciB7XHJcblx0cmVzb3VyY2VzOiBHUFVCaW5kaW5nUmVzb3VyY2VbXTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgU2hhZGVyU3RhZ2VOYW1lID0gXCJ2ZXJ0ZXhcIiB8IFwiZnJhZ21lbnRcIiB8IFwiY29tcHV0ZVwiO1xyXG5cclxuZXhwb3J0IHR5cGUgU2hhZGVyU3RhZ2VOYW1lT2JqZWN0S2V5cyA9IHtcclxuXHRba2V5IGluIFNoYWRlclN0YWdlTmFtZV0/OiBzdHJpbmc7XHJcbn07XHJcbmV4cG9ydCB0eXBlIFNoYWRlclN0YWdlQm9keU5hbWUgPSBcInZlcnRleEJvZHlcIiB8IFwiZnJhZ21lbnRCb2R5XCIgfCBcImNvbXB1dGVCb2R5XCI7XHJcbmV4cG9ydCB0eXBlIFNoYWRlclN0YWdlQm9keU5hbWVPYmplY3RLZXlzID0ge1xyXG5cdFtrZXkgaW4gU2hhZGVyU3RhZ2VCb2R5TmFtZV0/OiBzdHJpbmc7XHJcbn07XHJcbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudE9wdGlvbnMge1xyXG5cdG9wPzogR1BVU3RvcmVPcDtcclxuXHR0ZXh0dXJlPzogVGV4dHVyZTtcclxuXHRyZXNvbHZlVGFyZ2V0PzogVGV4dHVyZTtcclxuXHRzdG9yZU9wPzogR1BVU3RvcmVPcDtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUGFzc1R5cGUgPSBcInJlbmRlclwiIHwgXCJjb21wdXRlXCI7XHJcblxyXG5leHBvcnQgdHlwZSBHUFVCaW5kaW5nVHlwZSA9XHJcblx0fCBHUFVCdWZmZXJCaW5kaW5nVHlwZVxyXG5cdHwgR1BVU2FtcGxlckJpbmRpbmdUeXBlXHJcblx0fCBHUFVUZXh0dXJlU2FtcGxlVHlwZVxyXG5cdHwgR1BVU3RvcmFnZVRleHR1cmVBY2Nlc3M7XHJcblxyXG5leHBvcnQgdHlwZSBCaW5kR3JvdXBMYXlvdXRFbnRyeVR5cGUgPSB7XHJcblx0YmluZGluZzogbnVtYmVyO1xyXG5cdHZpc2liaWxpdHk6IEdQVVNoYWRlclN0YWdlRmxhZ3M7XHJcblx0dW5pZm9ybXM/OiBhbnlbXTtcclxuXHRidWZmZXI/OiBHUFVCdWZmZXJCaW5kaW5nTGF5b3V0O1xyXG5cdHNhbXBsZXI/OiBHUFVTYW1wbGVyQmluZGluZ0xheW91dDtcclxuXHR0ZXh0dXJlPzogR1BVVGV4dHVyZUJpbmRpbmdMYXlvdXQ7XHJcblx0c3RvcmFnZVRleHR1cmU/OiBHUFVTdG9yYWdlVGV4dHVyZUJpbmRpbmdMYXlvdXQ7XHJcblx0ZXh0ZXJuYWxUZXh0dXJlPzogR1BVRXh0ZXJuYWxUZXh0dXJlQmluZGluZ0xheW91dDtcclxufTtcclxuZXhwb3J0IHR5cGUgQnVmZmVyUmVzb3VyY2VUeXBlID0ge1xyXG5cdGJ1ZmZlcjogR1BVQnVmZmVyQmluZGluZ1R5cGU7XHJcblx0b2Zmc2V0OiBudW1iZXI7XHJcblx0c2l6ZTogbnVtYmVyO1xyXG59O1xyXG5leHBvcnQgdHlwZSBzYW1wbGVyQmluZEVudGl0eVJlc291cmNlVHlwZSA9IHtcclxuXHRyZXNvdXJjZTogR1BVU2FtcGxlcjtcclxufTtcclxuZXhwb3J0IHR5cGUgdGV4dHVyZUJpbmRFbnRpdHlSZXNvdXJjZVR5cGUgPSB7XHJcblx0cmVzb3VyY2U6IEdQVVRleHR1cmVWaWV3O1xyXG59O1xyXG5leHBvcnQgdHlwZSBCaW5kR3JvdXBFbnRpdHlSZXNvdXJjZVR5cGUgPVxyXG5cdHwgQnVmZmVyUmVzb3VyY2VUeXBlXHJcblx0fCBzYW1wbGVyQmluZEVudGl0eVJlc291cmNlVHlwZVxyXG5cdHwgdGV4dHVyZUJpbmRFbnRpdHlSZXNvdXJjZVR5cGU7XHJcbmV4cG9ydCB0eXBlIEJpbmRHcm91cEVudGl0eU9wdGlvbnMgPSB7XHJcblx0YmluZGluZzogbnVtYmVyO1xyXG5cdHJlc291cmNlOiBHUFVCaW5kaW5nUmVzb3VyY2U7XHJcbn07XHJcbmV4cG9ydCB0eXBlIEJpbmRHcm91cENhY2hlT3B0aW9ucyA9IHtcclxuXHRkZXZpY2U6IEdQVURldmljZTtcclxuXHRsYWJlbDogc3RyaW5nO1xyXG5cdGxheW91dDogQmluZEdyb3VwTGF5b3V0O1xyXG5cdGVudGlyZXM6IEJpbmRHcm91cEVudGl0eVtdO1xyXG5cdGluZGV4PzogbnVtYmVyO1xyXG5cdG9mZnNldD86IG51bWJlcjtcclxuXHRhbGlnbmVkU2l6ZT86IG51bWJlcjtcclxuXHRtYXhPZmZzZXQ/OiBudW1iZXI7XHJcblx0ZHluYW1pYz86IGJvb2xlYW47XHJcbn07XHJcbmV4cG9ydCB0eXBlIEltYWdlRGF0YSA9IHtcclxuXHRzb3VyY2U6IEltYWdlQml0bWFwIHwgSFRNTENhbnZhc0VsZW1lbnQgfCBUZXh0dXJlO1xyXG5cdHdpZHRoPzogbnVtYmVyO1xyXG5cdGhlaWdodD86IG51bWJlcjtcclxuXHRkZXB0aD86IG51bWJlcjtcclxuXHRzb3VyY2VYPzogbnVtYmVyO1xyXG5cdHNvdXJjZVk/OiBudW1iZXI7XHJcblx0bWlwTGV2ZWw/OiBudW1iZXI7XHJcblx0eD86IG51bWJlcjtcclxuXHR5PzogbnVtYmVyO1xyXG5cdHo/OiBudW1iZXI7XHJcblx0YXNwZWN0PzogXCJhbGxcIiB8IFwic3RlbmNpbC1vbmx5XCIgfCBcImRlcHRoLW9ubHlcIjtcclxuXHRjb2xvclNwYWNlPzogXCJzcmdiXCI7XHJcblx0cHJlbXVsdGlwbGllZEFscGhhPzogYm9vbGVhbjtcclxufTtcclxuZXhwb3J0IHR5cGUgV2ViR1BVVGV4dHVyZVByb3BzID0ge1xyXG5cdHNpemU6IHRleHR1cmVTaXplO1xyXG5cclxuXHRmaXhlZFNpemU/OiBib29sZWFuO1xyXG5cclxuXHRmb3JtYXQ6IHN0cmluZztcclxuXHJcblx0bGFiZWw/OiBzdHJpbmc7XHJcblxyXG5cdHVzYWdlPzogbnVtYmVyO1xyXG5cclxuXHRzYW1wbGVyPzogU2FtcGxlcjtcclxuXHJcblx0ZGF0YT86IEltYWdlRGF0YSB8IEFycmF5PEltYWdlRGF0YT47XHJcblxyXG5cdG1pcExldmVsQ291bnQ/OiBudW1iZXI7XHJcblxyXG5cdHNhbXBsZUNvdW50PzogbnVtYmVyO1xyXG5cclxuXHRkaW1lbnNpb24/OiBkaW1lbnNpb247XHJcblxyXG5cdHZpZXdGb3JtYXRzPzogc3RyaW5nO1xyXG5cclxuXHRzYW1wbGVUeXBlPzogc3RyaW5nO1xyXG5cclxuXHRuZWVkTWlwTWFwPzogYm9vbGVhbjtcclxuXHJcblx0ZGF0YUlzVGV4dHVyZT86IGJvb2xlYW47XHJcbn07XHJcbmV4cG9ydCB0eXBlIHRleHR1cmVTaXplID0ge1xyXG5cdHdpZHRoOiBudW1iZXI7XHJcblx0aGVpZ2h0OiBudW1iZXI7XHJcblx0ZGVwdGg6IG51bWJlcjtcclxufTtcclxuZXhwb3J0IHR5cGUgZGltZW5zaW9uID0gXCIxZFwiIHwgXCIyZFwiIHwgXCIzZFwiO1xyXG5leHBvcnQgdHlwZSBidWZmZXJMYXlvdXRUeXBlID0ge1xyXG5cdHR5cGU6IHN0cmluZzsgLy9cInVuaWZvcm1cIlxyXG5cdGhhc0R5bmFtaWNPZmZzZXQ/OiBCb29sZWFuO1xyXG5cdG1pbkJpbmRpbmdTaXplPzogbnVtYmVyO1xyXG59O1xyXG4vL3JlbmRlcnN0YXRlXHJcbmV4cG9ydCB0eXBlIERlcHRoU3RlbmNpbCA9IHtcclxuXHRmb3JtYXQ6IFRleHR1cmVGb3JtYXQ7XHJcblx0ZGVwdGhXcml0ZUVuYWJsZWQ6IGJvb2xlYW47XHJcblx0ZGVwdGhDb21wYXJlOiBDb21wYXJlRnVuY3Rpb247XHJcblx0c3RlbmNpbFJlYWRNYXNrPzogbnVtYmVyO1xyXG5cdHN0ZW5jaWxXcml0ZU1hc2s/OiBudW1iZXI7XHJcblx0c3RlbmNpbEZyb250Pzoge1xyXG5cdFx0Y29tcGFyZTogQ29tcGFyZUZ1bmN0aW9uO1xyXG5cdFx0ZmFpbE9wOiBTdGVuY2lsT3BlcmF0aW9uO1xyXG5cdFx0ZGVwdGhGYWlsT3A6IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0XHRwYXNzT3A6IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0fTtcclxuXHRzdGVuY2lsQmFjaz86IHtcclxuXHRcdGNvbXBhcmU6IENvbXBhcmVGdW5jdGlvbjtcclxuXHRcdGZhaWxPcDogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHRcdGRlcHRoRmFpbE9wOiBTdGVuY2lsT3BlcmF0aW9uO1xyXG5cdFx0cGFzc09wOiBTdGVuY2lsT3BlcmF0aW9uO1xyXG5cdH07XHJcblx0ZGVwdGhCaWFzPzogbnVtYmVyO1xyXG5cdGRlcHRoQmlhc1Nsb3BlU2NhbGU/OiBudW1iZXI7XHJcblx0ZGVwdGhCaWFzQ2xhbXA/OiBudW1iZXI7XHJcbn07XHJcbmV4cG9ydCB0eXBlIFByaW1pdGl2ZVN0YXRlID0ge1xyXG5cdGZyb250RmFjZT86IEZyb250RmFjZTtcclxuXHRjdWxsTW9kZT86IEN1bGxNb2RlO1xyXG5cdHVuY2xpcHBlZERlcHRoPzogYm9vbGVhbjtcclxuXHR0b3BvbG9neT86IFByaW1pdGl2ZVRvcG9sb2d5O1xyXG5cdHN0cmlwSW5kZXhGb3JtYXQ/OiBJbmRleEZvcm1hdDtcclxufTtcclxuZXhwb3J0IHR5cGUgTXVsdGlTYW1wbGUgPSB7XHJcblx0Y291bnQ/OiBudW1iZXI7XHJcblx0bWFzaz86IG51bWJlcjtcclxuXHRhbHBoYVRvQ292ZXJhZ2VFbmFibGVkPzogYm9vbGVhbjtcclxufTtcclxuZXhwb3J0IHR5cGUgVGFyZ2V0ID0ge1xyXG5cdGZvcm1hdDogVGV4dHVyZUZvcm1hdDtcclxuXHRibGVuZD86IHtcclxuXHRcdGNvbG9yOiB7XHJcblx0XHRcdG9wZXJhdGlvbjogQmxlbmRPcGVyYXRpb247XHJcblx0XHRcdHNyY0ZhY3RvcjogQmxlbmRGYWN0b3I7XHJcblx0XHRcdGRzdEZhY3RvcjogQmxlbmRGYWN0b3I7XHJcblx0XHR9O1xyXG5cdFx0YWxwaGE6IHtcclxuXHRcdFx0b3BlcmF0aW9uOiBCbGVuZE9wZXJhdGlvbjtcclxuXHRcdFx0c3JjRmFjdG9yOiBCbGVuZEZhY3RvcjtcclxuXHRcdFx0ZHN0RmFjdG9yOiBCbGVuZEZhY3RvcjtcclxuXHRcdH07XHJcblx0fTtcclxuXHR3cml0ZU1hc2s6IENvbG9yV3JpdGVGbGFncztcclxufTtcclxuZXhwb3J0IHR5cGUgQmxlbmRDb25zdGFudCA9IHtcclxuXHRyOiBudW1iZXI7XHJcblx0ZzogbnVtYmVyO1xyXG5cdGI6IG51bWJlcjtcclxuXHRhOiBudW1iZXI7XHJcbn07XHJcbmV4cG9ydCB0eXBlIFJlbmRlclN0YXRlUHJvcHMgPSB7XHJcblx0ZGVwdGhTdGVuY2lsPzogRGVwdGhTdGVuY2lsO1xyXG5cdHByaW1pdGl2ZT86IFByaW1pdGl2ZVN0YXRlO1xyXG5cdG11bHRpc2FtcGxlPzogTXVsdGlTYW1wbGU7XHJcblx0c3RlbmNpbFJlZmVyZW5jZT86IG51bWJlcjtcclxuXHR0YXJnZXRzPzogQXJyYXk8VGFyZ2V0PjtcclxuXHR2aWV3cG9ydD86IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH07XHJcblx0YmxlbmRDb25zdGFudD86IEJsZW5kQ29uc3RhbnQ7XHJcblx0c2Npc3NvclRlc3RFbmFibGVkPzogYm9vbGVhbjtcclxuXHRzdGVuY2lsRW5hYmxlZD86IGJvb2xlYW47XHJcbn07XHJcbmV4cG9ydCB0eXBlIFZpZXdQb3J0ID0ge1xyXG5cdHg6IG51bWJlcjtcclxuXHR5OiBudW1iZXI7XHJcblx0d2lkdGg6IG51bWJlcjtcclxuXHRoZWlnaHQ6IG51bWJlcjtcclxufTtcclxuZXhwb3J0IHR5cGUgU2Npc3NvclRlc3QgPSB7XHJcblx0eDogbnVtYmVyO1xyXG5cdHk6IG51bWJlcjtcclxuXHR3aWR0aDogbnVtYmVyO1xyXG5cdGhlaWdodDogbnVtYmVyO1xyXG59O1xyXG5leHBvcnQgdHlwZSBTaGFkZXJNYXRlcmlhbFBhcm1zID0ge1xyXG5cdHR5cGU6IHN0cmluZztcclxuXHRmcmFnOiBzdHJpbmcgfCBGdW5jdGlvbjtcclxuXHR2ZXJ0OiBzdHJpbmcgfCBGdW5jdGlvbjtcclxuXHR1bmlmb3JtczogeyBbdW5pZm9ybTogc3RyaW5nXTogSVVuaWZvcm0gfTtcclxuXHRkZWZpbmVzPzogYW55O1xyXG5cdGxpZ2h0PzogYm9vbGVhbjtcclxufTtcclxuZXhwb3J0IGludGVyZmFjZSBJVW5pZm9ybTxUVmFsdWUgPSBhbnk+IHtcclxuXHR0eXBlOiBzdHJpbmc7XHJcblx0dmFsdWU6IFRWYWx1ZTtcclxufVxyXG5leHBvcnQgdHlwZSBVbmlmb3JtcyA9IHsgW3VuaWZvcm06IHN0cmluZ106IElVbmlmb3JtIH07XHJcbmV4cG9ydCB0eXBlIEluc3RhbmNlID0gTWVzaCB8IFBvc3RFZmZlY3QgfCBMaWdodDtcclxuXHJcbmV4cG9ydCBlbnVtIFJlbmRlck9iamVjdFR5cGUge1xyXG5cdENhbWVyYSA9IFwiY2FtZXJhXCIsXHJcblx0TGlnaHQgPSBcImxpZ2h0XCIsXHJcblx0TWVzaCA9IFwibWVzaFwiLFxyXG5cdFNraW5NZXNoID0gXCJza2luTWVzaFwiLFxyXG5cdE5vZGUgPSBcIm5vZGVcIixcclxuXHRBeGVzID0gXCJheGVzXCIsXHJcblx0U2t5Ym94ID0gXCJza3lCb3hcIixcclxuXHRQb3N0RWZmZWN0ID0gXCJwb3N0RWZmZWN0XCIsXHJcblx0RGVidWcgPSBcImRlYnVnXCJcclxufVxyXG5leHBvcnQgZW51bSBMaWdodFR5cGUge1xyXG5cdFNwb3RMaWdodCA9IFwic3BvdExpZ2h0XCIsXHJcblx0UG9pbnRMaWdodCA9IFwicG9pbnRMaWdodFwiLFxyXG5cdEFtYmllbnRMaWdodCA9IFwiYW1iaWVudExpZ2h0XCIsXHJcblx0RGlyZWN0aW9uYWxMaWdodCA9IFwiZGlyZWN0aW9uYWxMaWdodFwiXHJcbn1cclxuIiwiaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTWlwbWFwR2VuZXJhdG9yIHtcclxuXHRkZXZpY2U6IEdQVURldmljZTtcclxuXHRzYW1wbGVyOiBHUFVTYW1wbGVyO1xyXG5cdHBpcGVsaW5lczogb2JqZWN0O1xyXG5cdG1pcG1hcFNoYWRlck1vZHVsZTogR1BVU2hhZGVyTW9kdWxlO1xyXG5cdGNvbnN0cnVjdG9yKGRldmljZSkge1xyXG5cdFx0dGhpcy5kZXZpY2UgPSBkZXZpY2U7XHJcblx0XHR0aGlzLnNhbXBsZXIgPSBkZXZpY2UuY3JlYXRlU2FtcGxlcih7IG1pbkZpbHRlcjogXCJsaW5lYXJcIiB9KTtcclxuXHRcdC8vIFdlJ2xsIG5lZWQgYSBuZXcgcGlwZWxpbmUgZm9yIGV2ZXJ5IHRleHR1cmUgZm9ybWF0IHVzZWQuXHJcblx0XHR0aGlzLnBpcGVsaW5lcyA9IHt9O1xyXG5cdH1cclxuXHRwcml2YXRlIGdldE1pcG1hcFBpcGVsaW5lKGZvcm1hdCkge1xyXG5cdFx0bGV0IHBpcGVsaW5lID0gdGhpcy5waXBlbGluZXNbZm9ybWF0XTtcclxuXHRcdGlmICghcGlwZWxpbmUpIHtcclxuXHRcdFx0Ly8gU2hhZGVyIG1vZHVsZXMgaXMgc2hhcmVkIGJldHdlZW4gYWxsIHBpcGVsaW5lcywgc28gb25seSBjcmVhdGUgb25jZS5cclxuXHRcdFx0aWYgKCF0aGlzLm1pcG1hcFNoYWRlck1vZHVsZSkge1xyXG5cdFx0XHRcdHRoaXMubWlwbWFwU2hhZGVyTW9kdWxlID0gdGhpcy5kZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtcclxuXHRcdFx0XHRcdGNvZGU6IGBcclxuICAgICAgICAgICAgICB2YXI8cHJpdmF0ZT4gcG9zIDogYXJyYXk8dmVjMjxmMzI+LCAzPiA9IGFycmF5PHZlYzI8ZjMyPiwgMz4oXHJcbiAgICAgICAgICAgICAgICB2ZWMyPGYzMj4oLTEuMCwgLTEuMCksIHZlYzI8ZjMyPigtMS4wLCAzLjApLCB2ZWMyPGYzMj4oMy4wLCAtMS4wKSk7XHJcbiAgICAgICAgICAgICAgc3RydWN0IFZlcnRleE91dHB1dCB7XHJcbiAgICAgICAgICAgICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb24gOiB2ZWM0PGYzMj4sXHJcbiAgICAgICAgICAgICAgICBAbG9jYXRpb24oMCkgdGV4Q29vcmQgOiB2ZWMyPGYzMj4sXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBAdmVydGV4XHJcbiAgICAgICAgICAgICAgZm4gdmVydGV4TWFpbihAYnVpbHRpbih2ZXJ0ZXhfaW5kZXgpIHZlcnRleEluZGV4IDogdTMyKSAtPiBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgICAgICAgICAgICAgdmFyIG91dHB1dCA6IFZlcnRleE91dHB1dDtcclxuICAgICAgICAgICAgICAgIG91dHB1dC50ZXhDb29yZCA9IHBvc1t2ZXJ0ZXhJbmRleF0gKiB2ZWMyPGYzMj4oMC41LCAtMC41KSArIHZlYzI8ZjMyPigwLjUpO1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0LnBvc2l0aW9uID0gdmVjNDxmMzI+KHBvc1t2ZXJ0ZXhJbmRleF0sIDAuMCwgMS4wKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygwKSB2YXIgaW1nU2FtcGxlciA6IHNhbXBsZXI7XHJcbiAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKDEpIHZhciBpbWcgOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICAgQGZyYWdtZW50XHJcbiAgICAgICAgICAgICAgZm4gZnJhZ21lbnRNYWluKEBsb2NhdGlvbigwKSB0ZXhDb29yZCA6IHZlYzI8ZjMyPikgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZVNhbXBsZShpbWcsIGltZ1NhbXBsZXIsIHRleENvb3JkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGBcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cGlwZWxpbmUgPSB0aGlzLmRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZSh7XHJcblx0XHRcdFx0bGF5b3V0OiBcImF1dG9cIixcclxuXHRcdFx0XHR2ZXJ0ZXg6IHtcclxuXHRcdFx0XHRcdG1vZHVsZTogdGhpcy5taXBtYXBTaGFkZXJNb2R1bGUsXHJcblx0XHRcdFx0XHRlbnRyeVBvaW50OiBcInZlcnRleE1haW5cIlxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0ZnJhZ21lbnQ6IHtcclxuXHRcdFx0XHRcdG1vZHVsZTogdGhpcy5taXBtYXBTaGFkZXJNb2R1bGUsXHJcblx0XHRcdFx0XHRlbnRyeVBvaW50OiBcImZyYWdtZW50TWFpblwiLFxyXG5cdFx0XHRcdFx0dGFyZ2V0czogW3sgZm9ybWF0IH1dXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0dGhpcy5waXBlbGluZXNbZm9ybWF0XSA9IHBpcGVsaW5lO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHBpcGVsaW5lO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2VuZXJhdGVzIG1pcG1hcHMgZm9yIHRoZSBnaXZlbiBHUFVUZXh0dXJlIGZyb20gdGhlIGRhdGEgaW4gbGV2ZWwgMC5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7bW9kdWxlOkV4dGVybmFsLkdQVVRleHR1cmV9IHRleHR1cmUgLSBUZXh0dXJlIHRvIGdlbmVyYXRlIG1pcG1hcHMgZm9yLlxyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSB0ZXh0dXJlRGVzY3JpcHRvciAtIEdQVVRleHR1cmVEZXNjcmlwdG9yIHRoZSB0ZXh0dXJlIHdhcyBjcmVhdGVkIHdpdGguXHJcblx0ICogQHJldHVybnMge21vZHVsZTpFeHRlcm5hbC5HUFVUZXh0dXJlfSAtIFRoZSBvcmlnaW5hbGx5IHBhc3NlZCB0ZXh0dXJlXHJcblx0ICovXHJcblx0Z2VuZXJhdGVNaXBtYXAoc291cmNlVGV4dHVyZTogVGV4dHVyZSkge1xyXG5cdFx0Y29uc3QgdGV4dHVyZSA9IHNvdXJjZVRleHR1cmUuZ3B1VGV4dHVyZTtcclxuXHRcdGNvbnN0IHRleHR1cmVEZXNjcmlwdG9yID0gc291cmNlVGV4dHVyZS50ZXh0dXJlUHJvcDtcclxuXHRcdC8vIFRPRE86IERvZXMgdGhpcyBuZWVkIHRvIGhhbmRsZSBzUkdCIGZvcm1hdHMgZGlmZmVyZW50bHk/XHJcblx0XHRjb25zdCBwaXBlbGluZSA9IHRoaXMuZ2V0TWlwbWFwUGlwZWxpbmUodGV4dHVyZURlc2NyaXB0b3IuZm9ybWF0KTtcclxuXHJcblx0XHRpZiAodGV4dHVyZURlc2NyaXB0b3IuZGltZW5zaW9uID09IFwiM2RcIiB8fCB0ZXh0dXJlRGVzY3JpcHRvci5kaW1lbnNpb24gPT0gXCIxZFwiKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRpbmcgbWlwbWFwcyBmb3Igbm9uLTJkIHRleHR1cmVzIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZCFcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IG1pcFRleHR1cmUgPSB0ZXh0dXJlO1xyXG5cdFx0Y29uc3QgYXJyYXlMYXllckNvdW50ID0gdGV4dHVyZURlc2NyaXB0b3Iuc2l6ZS5kZXB0aCB8fCAxOyAvLyBPbmx5IHZhbGlkIGZvciAyRCB0ZXh0dXJlcy5cclxuXHJcblx0XHQvLyBJZiB0aGUgdGV4dHVyZSB3YXMgY3JlYXRlZCB3aXRoIFJFTkRFUl9BVFRBQ0hNRU5UIHVzYWdlIHdlIGNhbiByZW5kZXIgZGlyZWN0bHkgYmV0d2VlbiBtaXAgbGV2ZWxzLlxyXG5cdFx0Y29uc3QgcmVuZGVyVG9Tb3VyY2UgPSB0ZXh0dXJlRGVzY3JpcHRvci51c2FnZSAmIEdQVVRleHR1cmVVc2FnZS5SRU5ERVJfQVRUQUNITUVOVDtcclxuXHRcdGlmICghcmVuZGVyVG9Tb3VyY2UpIHtcclxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHdlIGhhdmUgdG8gdXNlIGEgc2VwYXJhdGUgdGV4dHVyZSB0byByZW5kZXIgaW50by4gSXQgY2FuIGJlIG9uZSBtaXAgbGV2ZWwgc21hbGxlciB0aGFuIHRoZSBzb3VyY2VcclxuXHRcdFx0Ly8gdGV4dHVyZSwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSB0b3AgbGV2ZWwuXHJcblx0XHRcdGNvbnN0IG1pcFRleHR1cmVEZXNjcmlwdG9yID0ge1xyXG5cdFx0XHRcdHNpemU6IHtcclxuXHRcdFx0XHRcdHdpZHRoOiBNYXRoLmNlaWwodGV4dHVyZURlc2NyaXB0b3Iuc2l6ZS53aWR0aCAvIDIpLFxyXG5cdFx0XHRcdFx0aGVpZ2h0OiBNYXRoLmNlaWwodGV4dHVyZURlc2NyaXB0b3Iuc2l6ZS5oZWlnaHQgLyAyKSxcclxuXHRcdFx0XHRcdGRlcHRoT3JBcnJheUxheWVyczogYXJyYXlMYXllckNvdW50XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRmb3JtYXQ6IDxHUFVUZXh0dXJlRm9ybWF0PnRleHR1cmVEZXNjcmlwdG9yLmZvcm1hdCxcclxuXHRcdFx0XHR1c2FnZTogR1BVVGV4dHVyZVVzYWdlLlRFWFRVUkVfQklORElORyB8IEdQVVRleHR1cmVVc2FnZS5DT1BZX1NSQyB8IEdQVVRleHR1cmVVc2FnZS5SRU5ERVJfQVRUQUNITUVOVCxcclxuXHRcdFx0XHRtaXBMZXZlbENvdW50OiB0ZXh0dXJlRGVzY3JpcHRvci5taXBMZXZlbENvdW50IC0gMVxyXG5cdFx0XHR9O1xyXG5cdFx0XHRtaXBUZXh0dXJlID0gdGhpcy5kZXZpY2UuY3JlYXRlVGV4dHVyZShtaXBUZXh0dXJlRGVzY3JpcHRvcik7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgY29tbWFuZEVuY29kZXIgPSB0aGlzLmRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcih7fSk7XHJcblx0XHQvLyBUT0RPOiBDb25zaWRlciBtYWtpbmcgdGhpcyBzdGF0aWMuXHJcblx0XHRjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBwaXBlbGluZS5nZXRCaW5kR3JvdXBMYXlvdXQoMCk7XHJcblxyXG5cdFx0Zm9yIChsZXQgYXJyYXlMYXllciA9IDA7IGFycmF5TGF5ZXIgPCBhcnJheUxheWVyQ291bnQ7ICsrYXJyYXlMYXllcikge1xyXG5cdFx0XHRsZXQgc3JjVmlldyA9IHRleHR1cmUuY3JlYXRlVmlldyh7XHJcblx0XHRcdFx0YmFzZU1pcExldmVsOiAwLFxyXG5cdFx0XHRcdG1pcExldmVsQ291bnQ6IDEsXHJcblx0XHRcdFx0ZGltZW5zaW9uOiBcIjJkXCIsXHJcblx0XHRcdFx0YmFzZUFycmF5TGF5ZXI6IGFycmF5TGF5ZXIsXHJcblx0XHRcdFx0YXJyYXlMYXllckNvdW50OiAxXHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0bGV0IGRzdE1pcExldmVsID0gcmVuZGVyVG9Tb3VyY2UgPyAxIDogMDtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCB0ZXh0dXJlRGVzY3JpcHRvci5taXBMZXZlbENvdW50OyArK2kpIHtcclxuXHRcdFx0XHRjb25zdCBkc3RWaWV3ID0gbWlwVGV4dHVyZS5jcmVhdGVWaWV3KHtcclxuXHRcdFx0XHRcdGJhc2VNaXBMZXZlbDogZHN0TWlwTGV2ZWwrKyxcclxuXHRcdFx0XHRcdG1pcExldmVsQ291bnQ6IDEsXHJcblx0XHRcdFx0XHRkaW1lbnNpb246IFwiMmRcIixcclxuXHRcdFx0XHRcdGJhc2VBcnJheUxheWVyOiBhcnJheUxheWVyLFxyXG5cdFx0XHRcdFx0YXJyYXlMYXllckNvdW50OiAxXHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdGNvbnN0IHBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHtcclxuXHRcdFx0XHRcdGNvbG9yQXR0YWNobWVudHM6IFtcclxuXHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdHZpZXc6IGRzdFZpZXcsXHJcblx0XHRcdFx0XHRcdFx0bG9hZE9wOiBcImNsZWFyXCIsXHJcblx0XHRcdFx0XHRcdFx0c3RvcmVPcDogXCJzdG9yZVwiXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdF1cclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0Y29uc3QgYmluZEdyb3VwID0gdGhpcy5kZXZpY2UuY3JlYXRlQmluZEdyb3VwKHtcclxuXHRcdFx0XHRcdGxheW91dDogYmluZEdyb3VwTGF5b3V0LFxyXG5cdFx0XHRcdFx0ZW50cmllczogW1xyXG5cdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0YmluZGluZzogMCxcclxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZTogdGhpcy5zYW1wbGVyXHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRiaW5kaW5nOiAxLFxyXG5cdFx0XHRcdFx0XHRcdHJlc291cmNlOiBzcmNWaWV3XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdF1cclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0cGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocGlwZWxpbmUpO1xyXG5cdFx0XHRcdHBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApO1xyXG5cdFx0XHRcdHBhc3NFbmNvZGVyLmRyYXcoMywgMSwgMCwgMCk7XHJcblx0XHRcdFx0cGFzc0VuY29kZXIuZW5kKCk7XHJcblxyXG5cdFx0XHRcdHNyY1ZpZXcgPSBkc3RWaWV3O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSWYgd2UgZGlkbid0IHJlbmRlciB0byB0aGUgc291cmNlIHRleHR1cmUsIGZpbmlzaCBieSBjb3B5aW5nIHRoZSBtaXAgcmVzdWx0cyBmcm9tIHRoZSB0ZW1wb3JhcnkgbWlwbWFwIHRleHR1cmVcclxuXHRcdC8vIHRvIHRoZSBzb3VyY2UuXHJcblx0XHRpZiAoIXJlbmRlclRvU291cmNlKSB7XHJcblx0XHRcdGNvbnN0IG1pcExldmVsU2l6ZSA9IHtcclxuXHRcdFx0XHR3aWR0aDogTWF0aC5jZWlsKHRleHR1cmVEZXNjcmlwdG9yLnNpemUud2lkdGggLyAyKSxcclxuXHRcdFx0XHRoZWlnaHQ6IE1hdGguY2VpbCh0ZXh0dXJlRGVzY3JpcHRvci5zaXplLmhlaWdodCAvIDIpLFxyXG5cdFx0XHRcdGRlcHRoT3JBcnJheUxheWVyczogYXJyYXlMYXllckNvdW50XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8IHRleHR1cmVEZXNjcmlwdG9yLm1pcExldmVsQ291bnQ7ICsraSkge1xyXG5cdFx0XHRcdGNvbW1hbmRFbmNvZGVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlKFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHR0ZXh0dXJlOiBtaXBUZXh0dXJlLFxyXG5cdFx0XHRcdFx0XHRtaXBMZXZlbDogaSAtIDFcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdHRleHR1cmU6IHRleHR1cmUsXHJcblx0XHRcdFx0XHRcdG1pcExldmVsOiBpXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0bWlwTGV2ZWxTaXplXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0bWlwTGV2ZWxTaXplLndpZHRoID0gTWF0aC5jZWlsKG1pcExldmVsU2l6ZS53aWR0aCAvIDIpO1xyXG5cdFx0XHRcdG1pcExldmVsU2l6ZS5oZWlnaHQgPSBNYXRoLmNlaWwobWlwTGV2ZWxTaXplLmhlaWdodCAvIDIpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5kZXZpY2UucXVldWUuc3VibWl0KFtjb21tYW5kRW5jb2Rlci5maW5pc2goKV0pO1xyXG5cclxuXHRcdGlmICghcmVuZGVyVG9Tb3VyY2UpIHtcclxuXHRcdFx0bWlwVGV4dHVyZS5kZXN0cm95KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRleHR1cmU7XHJcblx0fVxyXG59XHJcbiIsImZ1bmN0aW9uIGRlZmF1bHRWYWx1ZShhLCBiKSB7XG5cdGlmIChhICE9PSB1bmRlZmluZWQgJiYgYSAhPT0gbnVsbCkge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdHJldHVybiBiO1xufVxuXG4vKipcbiAqIEEgZnJvemVuIGVtcHR5IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBvcHRpb25zIHBhc3NlZCBhc1xuICogYW4gb2JqZWN0IGxpdGVyYWwuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQG1lbWJlcm9mIGRlZmF1bHRWYWx1ZVxuICovXG5kZWZhdWx0VmFsdWUuRU1QVFlfT0JKRUNUID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRWYWx1ZTtcbiIsImltcG9ydCB7XHJcblx0QmxlbmRGYWN0b3IsXHJcblx0QmxlbmRPcGVyYXRpb24sXHJcblx0VGV4dHVyZUZvcm1hdCxcclxuXHRHUFVDb2xvcldyaXRlLFxyXG5cdENvbXBhcmVGdW5jdGlvbixcclxuXHRTdGVuY2lsT3BlcmF0aW9uLFxyXG5cdEZyb250RmFjZSxcclxuXHRDdWxsTW9kZSxcclxuXHRQcmltaXRpdmVUb3BvbG9neVxyXG59IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xyXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi9Db250ZXh0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVuZGVyU3RhdGUge1xyXG5cdHNjaXNzb3JUZXN0OiBTY2lzc29yVGVzdDtcclxuXHR2aWV3cG9ydDogVmlld1BvcnQ7XHJcblx0dGFyZ2V0czogQXJyYXk8VGFyZ2V0PjtcclxuXHRkZXB0aFN0ZW5jaWw6IERlcHRoU3RlbmNpbDtcclxuXHRibGVuZENvbnN0YW50OiBCbGVuZENvbnN0YW50O1xyXG5cdHN0ZW5jaWxSZWZlcmVuY2U6IG51bWJlcjtcclxuXHRtdWx0aXNhbXBsZTogTXVsdGlTYW1wbGU7XHJcblx0cHJpbWl0aXZlOiBQcmltaXRpdmU7XHJcblx0c3RlbmNpbEVuYWJsZWQ6IGJvb2xlYW47XHJcblx0c2Npc3NvclRlc3RFbmFibGVkOiBib29sZWFuO1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0dGhpcy5zY2lzc29yVGVzdCA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMudmlld3BvcnQgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLmRlcHRoU3RlbmNpbCA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuYmxlbmRDb25zdGFudCA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuc3RlbmNpbFJlZmVyZW5jZSA9IDA7XHJcblx0XHR0aGlzLm11bHRpc2FtcGxlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5wcmltaXRpdmUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLnN0ZW5jaWxFbmFibGVkID0gZmFsc2U7XHJcblx0XHR0aGlzLnNjaXNzb3JUZXN0RW5hYmxlZCA9IGZhbHNlO1xyXG5cdFx0dGhpcy50YXJnZXRzID0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHRiaW5kKHBhc3NFbmNvZGVyOiBHUFVSZW5kZXJQYXNzRW5jb2RlciwgY29udGV4dDogQ29udGV4dCkge1xyXG5cdFx0Y29uc3QgeyB2aWV3UG9ydCwgc2Npc3NvclRlc3QgfSA9IGNvbnRleHQ7XHJcblx0XHRjb25zdCBmaW5hbFZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydCA/PyB2aWV3UG9ydDtcclxuXHRcdGNvbnN0IGZpbmFsU2Npc3NvclRlc3QgPSB0aGlzLnNjaXNzb3JUZXN0ID8/IHNjaXNzb3JUZXN0O1xyXG5cdFx0aWYgKHRoaXMuc3RlbmNpbFJlZmVyZW5jZSkgcGFzc0VuY29kZXIuc2V0U3RlbmNpbFJlZmVyZW5jZSh0aGlzLnN0ZW5jaWxSZWZlcmVuY2UpO1xyXG5cdFx0aWYgKGZpbmFsVmlld3BvcnQuZXF1YWxzQW5kVXBkYXRlQ2FjaGUoY2FjaGVWaWV3UG9ydCkpIHtcclxuXHRcdFx0Y29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBtaW5EZXB0aCwgbWF4RGVwdGggfSA9IGZpbmFsVmlld3BvcnQ7XHJcblx0XHRcdHBhc3NFbmNvZGVyLnNldFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQsIG1pbkRlcHRoLCBtYXhEZXB0aCk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5ibGVuZENvbnN0YW50KSBwYXNzRW5jb2Rlci5zZXRCbGVuZENvbnN0YW50KHRoaXMuYmxlbmRDb25zdGFudCk7XHJcblx0XHRpZiAoZmluYWxTY2lzc29yVGVzdC5lcXVhbHNBbmRVcGRhdGVDYWNoZShjYWNoZVNjaXNzb3JUZXN0KSkge1xyXG5cdFx0XHRjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IGZpbmFsU2Npc3NvclRlc3Q7XHJcblx0XHRcdHBhc3NFbmNvZGVyLnNldFNjaXNzb3JSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRkZXN0cm95KCkge1xyXG5cdFx0dGhpcy5zY2lzc29yVGVzdCA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMudmlld3BvcnQgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLmRlcHRoU3RlbmNpbCA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuYmxlbmRDb25zdGFudCA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuc3RlbmNpbFJlZmVyZW5jZSA9IC0xO1xyXG5cdFx0dGhpcy5tdWx0aXNhbXBsZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMucHJpbWl0aXZlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5zdGVuY2lsRW5hYmxlZCA9IGZhbHNlO1xyXG5cdFx0dGhpcy5zY2lzc29yVGVzdEVuYWJsZWQgPSBmYWxzZTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEJsZW5kQ29uc3RhbnQge1xyXG5cdHI6IG51bWJlcjtcclxuXHRnOiBudW1iZXI7XHJcblx0YjogbnVtYmVyO1xyXG5cdGE6IG51bWJlcjtcclxuXHRjb25zdHJ1Y3RvcihyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyLCBhOiBudW1iZXIpIHtcclxuXHRcdHRoaXMuciA9IHI7XHJcblx0XHR0aGlzLmcgPSBnO1xyXG5cdFx0dGhpcy5iID0gYjtcclxuXHRcdHRoaXMuYSA9IGE7XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBNdWx0aVNhbXBsZSB7XHJcblx0Y291bnQ6IG51bWJlcjtcclxuXHRtYXNrOiBudW1iZXI7XHJcblx0YWxwaGFUb0NvdmVyYWdlRW5hYmxlZDogYm9vbGVhbjtcclxuXHRjb25zdHJ1Y3Rvcihjb3VudCA9IDEsIG1hc2sgPSAweGZmZmZmZmZmLCBhbHBoYVRvQ292ZXJhZ2VFbmFibGVkID0gZmFsc2UpIHtcclxuXHRcdHRoaXMuY291bnQgPSBjb3VudDtcclxuXHRcdHRoaXMubWFzayA9IG1hc2s7XHJcblx0XHR0aGlzLmFscGhhVG9Db3ZlcmFnZUVuYWJsZWQgPSBhbHBoYVRvQ292ZXJhZ2VFbmFibGVkO1xyXG5cdH1cclxuXHRnZXRNdWx0aVNhbXBsZURlYygpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGNvdW50OiB0aGlzLmNvdW50LFxyXG5cdFx0XHRtYXNrOiB0aGlzLm1hc2ssXHJcblx0XHRcdGFscGhhVG9Db3ZlcmFnZUVuYWJsZWQ6IHRoaXMuYWxwaGFUb0NvdmVyYWdlRW5hYmxlZFxyXG5cdFx0fTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFNjaXNzb3JUZXN0IHtcclxuXHR4OiBudW1iZXI7XHJcblx0eTogbnVtYmVyO1xyXG5cdHdpZHRoOiBudW1iZXI7XHJcblx0aGVpZ2h0OiBudW1iZXI7XHJcblx0dmFyaWFibGU6IGJvb2xlYW47XHJcblx0Y29uc3RydWN0b3IoeCA9IDAsIHkgPSAwLCB3aWR0aCA9IDAsIGhlaWdodCA9IDAsIHZhcmlhYmxlID0gdHJ1ZSkge1xyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblx0XHR0aGlzLndpZHRoID0gd2lkdGg7XHJcblx0XHR0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHRcdHRoaXMudmFyaWFibGUgPSB2YXJpYWJsZTtcclxuXHR9XHJcblx0c2V0KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblx0XHR0aGlzLndpZHRoID0gd2lkdGg7XHJcblx0XHR0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHR9XHJcblx0ZXF1YWxzQW5kVXBkYXRlQ2FjaGUoc2Npc3NvclRlc3Q6IFNjaXNzb3JUZXN0KTogYm9vbGVhbiB7XHJcblx0XHRjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IHNjaXNzb3JUZXN0O1xyXG5cdFx0aWYgKHRoaXMueCAhPSB4IHx8IHRoaXMueSAhPSB5IHx8IHRoaXMud2lkdGggIT0gd2lkdGggfHwgdGhpcy5oZWlnaHQgIT0gaGVpZ2h0KSB7XHJcblx0XHRcdHNjaXNzb3JUZXN0LnNldCh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFZpZXdQb3J0IHtcclxuXHR4OiBudW1iZXI7XHJcblx0eTogbnVtYmVyO1xyXG5cdHdpZHRoOiBudW1iZXI7XHJcblx0aGVpZ2h0OiBudW1iZXI7XHJcblx0bWluRGVwdGg6IG51bWJlcjtcclxuXHRtYXhEZXB0aDogbnVtYmVyO1xyXG5cdHZhcmlhYmxlOiBib29sZWFuO1xyXG5cdGNvbnN0cnVjdG9yKHggPSAwLCB5ID0gMCwgd2lkdGggPSAwLCBoZWlnaHQgPSAwLCBtaW5EZXB0aCA9IDAsIG1heERlcHRoID0gMSwgdmFyaWFibGUgPSB0cnVlKSB7XHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHRoaXMud2lkdGggPSB3aWR0aDtcclxuXHRcdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cdFx0dGhpcy5taW5EZXB0aCA9IG1pbkRlcHRoO1xyXG5cdFx0dGhpcy5tYXhEZXB0aCA9IG1heERlcHRoO1xyXG5cdFx0dGhpcy52YXJpYWJsZSA9IHZhcmlhYmxlO1xyXG5cdH1cclxuXHRzZXQoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBtaW5EZXB0aCA9IDAsIG1heERlcHRoID0gMSkge1xyXG5cdFx0aWYgKCF0aGlzLnZhcmlhYmxlKSByZXR1cm47XHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHRoaXMud2lkdGggPSB3aWR0aDtcclxuXHRcdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cdFx0dGhpcy5taW5EZXB0aCA9IG1pbkRlcHRoO1xyXG5cdFx0dGhpcy5tYXhEZXB0aCA9IG1heERlcHRoO1xyXG5cdH1cclxuXHRlcXVhbHNBbmRVcGRhdGVDYWNoZSh2aWV3UG9ydDogVmlld1BvcnQpOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCwgbWluRGVwdGgsIG1heERlcHRoIH0gPSB2aWV3UG9ydDtcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy54ICE9IHggfHxcclxuXHRcdFx0dGhpcy55ICE9IHkgfHxcclxuXHRcdFx0dGhpcy53aWR0aCAhPSB3aWR0aCB8fFxyXG5cdFx0XHR0aGlzLmhlaWdodCAhPSBoZWlnaHQgfHxcclxuXHRcdFx0dGhpcy5taW5EZXB0aCAhPSBtaW5EZXB0aCB8fFxyXG5cdFx0XHR0aGlzLm1heERlcHRoICE9IG1heERlcHRoXHJcblx0XHQpIHtcclxuXHRcdFx0dmlld1BvcnQuc2V0KHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5taW5EZXB0aCwgdGhpcy5tYXhEZXB0aCk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgUHJpbWl0aXZlIHtcclxuXHRmcm9udEZhY2U6IEZyb250RmFjZTtcclxuXHRjdWxsTW9kZTogQ3VsbE1vZGU7XHJcblx0dW5jbGlwcGVkRGVwdGg6IGJvb2xlYW47XHJcblx0dG9wb2xvZ3k6IFByaW1pdGl2ZVRvcG9sb2d5O1xyXG5cdGNvbnN0cnVjdG9yKHRvcG9sb2d5PzogUHJpbWl0aXZlVG9wb2xvZ3ksIGN1bGxNb2RlPzogQ3VsbE1vZGUsIGZyb250RmFjZT86IEZyb250RmFjZSwgdW5jbGlwcGVkRGVwdGg/OiBib29sZWFuKSB7XHJcblx0XHR0aGlzLmZyb250RmFjZSA9IGRlZmF1bHRWYWx1ZShmcm9udEZhY2UsIEZyb250RmFjZS5DQ1cpO1xyXG5cdFx0dGhpcy5jdWxsTW9kZSA9IGRlZmF1bHRWYWx1ZShjdWxsTW9kZSwgQ3VsbE1vZGUuTm9uZSk7XHJcblx0XHR0aGlzLnVuY2xpcHBlZERlcHRoID0gZGVmYXVsdFZhbHVlKHVuY2xpcHBlZERlcHRoLCBmYWxzZSk7XHJcblx0XHR0aGlzLnRvcG9sb2d5ID0gZGVmYXVsdFZhbHVlKHRvcG9sb2d5LCBQcmltaXRpdmVUb3BvbG9neS5UcmlhbmdsZUxpc3QpO1xyXG5cdH1cclxuXHRnZXRHUFVQcmltaXRpdmVEZWMoKSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRmcm9udEZhY2U6IHRoaXMuZnJvbnRGYWNlLFxyXG5cdFx0XHRjdWxsTW9kZTogdGhpcy5jdWxsTW9kZSxcclxuXHRcdFx0dW5jbGlwcGVkRGVwdGg6IHRoaXMudW5jbGlwcGVkRGVwdGgsXHJcblx0XHRcdHRvcG9sb2d5OiB0aGlzLnRvcG9sb2d5XHJcblx0XHR9O1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgRGVwdGhTdGVuY2lsIHtcclxuXHRmb3JtYXQ6IFRleHR1cmVGb3JtYXQ7XHJcblx0ZGVwdGhXcml0ZUVuYWJsZWQ6IGJvb2xlYW47XHJcblx0ZGVwdGhDb21wYXJlOiBDb21wYXJlRnVuY3Rpb247XHJcblx0c3RlbmNpbFJlYWRNYXNrOiBudW1iZXI7XHJcblx0c3RlbmNpbFdyaXRlTWFzazogbnVtYmVyO1xyXG5cdHN0ZW5jaWxGcm9udENvbXBhcmU6IENvbXBhcmVGdW5jdGlvbjtcclxuXHRzdGVuY2lsRnJvbnRGYWlsT3A6IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0c3RlbmNpbEZyb250RGVwdGhGYWlsT3A6IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0c3RlbmNpbEZyb250UGFzc09wOiBTdGVuY2lsT3BlcmF0aW9uO1xyXG5cclxuXHRzdGVuY2lsQmFja0NvbXBhcmU6IENvbXBhcmVGdW5jdGlvbjtcclxuXHRzdGVuY2lsQmFja0ZhaWxPcDogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHRzdGVuY2lsQmFja0RlcHRoRmFpbE9wOiBTdGVuY2lsT3BlcmF0aW9uO1xyXG5cdHN0ZW5jaWxCYWNrUGFzc09wOiBTdGVuY2lsT3BlcmF0aW9uO1xyXG5cdGRlcHRoQmlhczogbnVtYmVyO1xyXG5cdGRlcHRoQmlhc1Nsb3BlU2NhbGU6IG51bWJlcjtcclxuXHRkZXB0aEJpYXNDbGFtcDogbnVtYmVyO1xyXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBEZXB0aFN0ZW5jaWxQcm9wcykge1xyXG5cdFx0dGhpcy5mb3JtYXQgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uZm9ybWF0LCBUZXh0dXJlRm9ybWF0LkRlcHRoMjRQbHVzKTtcclxuXHRcdHRoaXMuZGVwdGhXcml0ZUVuYWJsZWQgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uZGVwdGhXcml0ZUVuYWJsZWQsIHRydWUpO1xyXG5cdFx0dGhpcy5kZXB0aENvbXBhcmUgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uZGVwdGhDb21wYXJlLCBDb21wYXJlRnVuY3Rpb24uTGVzcyk7XHJcblx0XHR0aGlzLnN0ZW5jaWxSZWFkTWFzayA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5zdGVuY2lsUmVhZE1hc2ssIDB4ZmZmZmZmZmYpO1xyXG5cdFx0dGhpcy5zdGVuY2lsV3JpdGVNYXNrID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LnN0ZW5jaWxXcml0ZU1hc2ssIDB4ZmZmZmZmZmYpO1xyXG5cdFx0dGhpcy5zdGVuY2lsRnJvbnRDb21wYXJlID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LnN0ZW5jaWxGcm9udENvbXBhcmUsIENvbXBhcmVGdW5jdGlvbi5BbHdheXMpO1xyXG5cdFx0dGhpcy5zdGVuY2lsRnJvbnRGYWlsT3AgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uc3RlbmNpbEZyb250RmFpbE9wLCBTdGVuY2lsT3BlcmF0aW9uLktlZXApO1xyXG5cdFx0dGhpcy5zdGVuY2lsRnJvbnREZXB0aEZhaWxPcCA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5zdGVuY2lsRnJvbnREZXB0aEZhaWxPcCwgU3RlbmNpbE9wZXJhdGlvbi5LZWVwKTtcclxuXHRcdHRoaXMuc3RlbmNpbEZyb250UGFzc09wID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LnN0ZW5jaWxGcm9udFBhc3NPcCwgU3RlbmNpbE9wZXJhdGlvbi5LZWVwKTtcclxuXHRcdHRoaXMuc3RlbmNpbEJhY2tDb21wYXJlID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LnN0ZW5jaWxCYWNrQ29tcGFyZSwgQ29tcGFyZUZ1bmN0aW9uLkFsd2F5cyk7XHJcblx0XHR0aGlzLnN0ZW5jaWxCYWNrRmFpbE9wID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LnN0ZW5jaWxCYWNrRmFpbE9wLCBTdGVuY2lsT3BlcmF0aW9uLktlZXApO1xyXG5cdFx0dGhpcy5zdGVuY2lsQmFja0RlcHRoRmFpbE9wID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LnN0ZW5jaWxCYWNrRGVwdGhGYWlsT3AsIFN0ZW5jaWxPcGVyYXRpb24uS2VlcCk7XHJcblx0XHR0aGlzLnN0ZW5jaWxCYWNrUGFzc09wID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LnN0ZW5jaWxCYWNrUGFzc09wLCBTdGVuY2lsT3BlcmF0aW9uLktlZXApO1xyXG5cdFx0dGhpcy5kZXB0aEJpYXMgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uZGVwdGhCaWFzLCAwKTtcclxuXHRcdHRoaXMuZGVwdGhCaWFzU2xvcGVTY2FsZSA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5kZXB0aEJpYXNTbG9wZVNjYWxlLCAwKTtcclxuXHRcdHRoaXMuZGVwdGhCaWFzQ2xhbXAgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uZGVwdGhCaWFzQ2xhbXAsIDApO1xyXG5cdH1cclxuXHRnZXRHUFVEZXB0aFN0ZW5jaWxEZWMoKSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRmb3JtYXQ6IHRoaXMuZm9ybWF0LFxyXG5cdFx0XHRkZXB0aFdyaXRlRW5hYmxlZDogdGhpcy5kZXB0aFdyaXRlRW5hYmxlZCxcclxuXHRcdFx0ZGVwdGhDb21wYXJlOiB0aGlzLmRlcHRoQ29tcGFyZSxcclxuXHRcdFx0c3RlbmNpbFJlYWRNYXNrOiB0aGlzLnN0ZW5jaWxSZWFkTWFzayxcclxuXHRcdFx0c3RlbmNpbFdyaXRlTWFzazogdGhpcy5zdGVuY2lsV3JpdGVNYXNrLFxyXG5cdFx0XHRzdGVuY2lsRnJvbnQ6IHtcclxuXHRcdFx0XHRjb21wYXJlOiB0aGlzLnN0ZW5jaWxGcm9udENvbXBhcmUsXHJcblx0XHRcdFx0ZmFpbE9wOiB0aGlzLnN0ZW5jaWxGcm9udEZhaWxPcCxcclxuXHRcdFx0XHRkZXB0aEZhaWxPcDogdGhpcy5zdGVuY2lsRnJvbnREZXB0aEZhaWxPcCxcclxuXHRcdFx0XHRwYXNzT3A6IHRoaXMuc3RlbmNpbEZyb250UGFzc09wXHJcblx0XHRcdH0sXHJcblx0XHRcdHN0ZW5jaWxCYWNrOiB7XHJcblx0XHRcdFx0Y29tcGFyZTogdGhpcy5zdGVuY2lsQmFja0NvbXBhcmUsXHJcblx0XHRcdFx0ZmFpbE9wOiB0aGlzLnN0ZW5jaWxCYWNrRmFpbE9wLFxyXG5cdFx0XHRcdGRlcHRoRmFpbE9wOiB0aGlzLnN0ZW5jaWxCYWNrRGVwdGhGYWlsT3AsXHJcblx0XHRcdFx0cGFzc09wOiB0aGlzLnN0ZW5jaWxCYWNrUGFzc09wXHJcblx0XHRcdH0sXHJcblx0XHRcdGRlcHRoQmlhczogdGhpcy5kZXB0aEJpYXMsXHJcblx0XHRcdGRlcHRoQmlhc1Nsb3BlU2NhbGU6IHRoaXMuZGVwdGhCaWFzU2xvcGVTY2FsZSxcclxuXHRcdFx0ZGVwdGhCaWFzQ2xhbXA6IHRoaXMuZGVwdGhCaWFzQ2xhbXBcclxuXHRcdH07XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBUYXJnZXQge1xyXG5cdGZvcm1hdDogVGV4dHVyZUZvcm1hdDtcclxuXHRibGVuZENvbG9yT3BlcmF0aW9uPzogQmxlbmRPcGVyYXRpb247XHJcblx0YmxlbmRDb2xvclNyY0ZhY3Rvcj86IEJsZW5kRmFjdG9yO1xyXG5cdGJsZW5kQ29sb3JEc3RGYWN0b3I/OiBCbGVuZEZhY3RvcjtcclxuXHRibGVuZEFscGhhT3BlcmF0aW9uPzogQmxlbmRPcGVyYXRpb247XHJcblx0YmxlbmRBbHBoYVNyY0ZhY3Rvcj86IEJsZW5kRmFjdG9yO1xyXG5cdGJsZW5kQWxwaGFEc3RGYWN0b3I/OiBCbGVuZEZhY3RvcjtcclxuXHR3cml0ZU1hc2s6IEdQVUNvbG9yV3JpdGU7XHJcblx0Y29uc3RydWN0b3Iob3B0aW9ucz86IFRhcmdldFByb3BzKSB7XHJcblx0XHR0aGlzLmZvcm1hdCA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5mb3JtYXQsIFRleHR1cmVGb3JtYXQuQkdSQThVbm9ybSk7XHJcblx0XHR0aGlzLmJsZW5kQ29sb3JPcGVyYXRpb24gPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uYmxlbmRDb2xvck9wZXJhdGlvbiwgQmxlbmRPcGVyYXRpb24uQWRkKTtcclxuXHRcdHRoaXMuYmxlbmRDb2xvclNyY0ZhY3RvciA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5ibGVuZENvbG9yU3JjRmFjdG9yLCBCbGVuZEZhY3Rvcj8uU3JjQWxwaGEpO1xyXG5cdFx0dGhpcy5ibGVuZENvbG9yRHN0RmFjdG9yID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LmJsZW5kQ29sb3JEc3RGYWN0b3IsIEJsZW5kRmFjdG9yLk9uZU1pbnVzU3JjQWxwaGEpO1xyXG5cdFx0dGhpcy5ibGVuZEFscGhhT3BlcmF0aW9uID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LmJsZW5kQWxwaGFPcGVyYXRpb24sIEJsZW5kT3BlcmF0aW9uLkFkZCk7XHJcblx0XHR0aGlzLmJsZW5kQWxwaGFTcmNGYWN0b3IgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uYmxlbmRBbHBoYVNyY0ZhY3RvciwgQmxlbmRGYWN0b3IuT25lKTtcclxuXHRcdHRoaXMuYmxlbmRBbHBoYURzdEZhY3RvciA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5ibGVuZEFscGhhRHN0RmFjdG9yLCBCbGVuZEZhY3Rvci5PbmUpO1xyXG5cdFx0dGhpcy53cml0ZU1hc2sgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8ud3JpdGVNYXNrLCBHUFVDb2xvcldyaXRlLkFsbCk7XHJcblx0fVxyXG5cdGdldEdQVVRhcmdldERlYygpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGZvcm1hdDogdGhpcy5mb3JtYXQsXHJcblx0XHRcdGJsZW5kOiB7XHJcblx0XHRcdFx0Y29sb3I6IHtcclxuXHRcdFx0XHRcdG9wZXJhdGlvbjogdGhpcy5ibGVuZENvbG9yT3BlcmF0aW9uLFxyXG5cdFx0XHRcdFx0c3JjRmFjdG9yOiB0aGlzLmJsZW5kQ29sb3JTcmNGYWN0b3IsXHJcblx0XHRcdFx0XHRkc3RGYWN0b3I6IHRoaXMuYmxlbmRDb2xvckRzdEZhY3RvclxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0YWxwaGE6IHtcclxuXHRcdFx0XHRcdG9wZXJhdGlvbjogdGhpcy5ibGVuZEFscGhhT3BlcmF0aW9uLFxyXG5cdFx0XHRcdFx0c3JjRmFjdG9yOiB0aGlzLmJsZW5kQWxwaGFTcmNGYWN0b3IsXHJcblx0XHRcdFx0XHRkc3RGYWN0b3I6IHRoaXMuYmxlbmRBbHBoYURzdEZhY3RvclxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0d3JpdGVNYXNrOiB0aGlzLndyaXRlTWFza1xyXG5cdFx0fTtcclxuXHR9XHJcbn1cclxuY29uc3QgY2FjaGVWaWV3UG9ydCA9IG5ldyBWaWV3UG9ydCgpO1xyXG5jb25zdCBjYWNoZVNjaXNzb3JUZXN0ID0gbmV3IFNjaXNzb3JUZXN0KCk7XHJcbnR5cGUgRGVwdGhTdGVuY2lsUHJvcHMgPSB7XHJcblx0Zm9ybWF0PzogVGV4dHVyZUZvcm1hdDtcclxuXHRkZXB0aFdyaXRlRW5hYmxlZD86IGJvb2xlYW47XHJcblx0ZGVwdGhDb21wYXJlPzogQ29tcGFyZUZ1bmN0aW9uO1xyXG5cdHN0ZW5jaWxSZWFkTWFzaz86IG51bWJlcjtcclxuXHRzdGVuY2lsV3JpdGVNYXNrPzogbnVtYmVyO1xyXG5cdHN0ZW5jaWxGcm9udENvbXBhcmU/OiBDb21wYXJlRnVuY3Rpb247XHJcblx0c3RlbmNpbEZyb250RmFpbE9wPzogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHRzdGVuY2lsRnJvbnREZXB0aEZhaWxPcD86IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0c3RlbmNpbEZyb250UGFzc09wPzogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHJcblx0c3RlbmNpbEJhY2tDb21wYXJlPzogQ29tcGFyZUZ1bmN0aW9uO1xyXG5cdHN0ZW5jaWxCYWNrRmFpbE9wPzogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHRzdGVuY2lsQmFja0RlcHRoRmFpbE9wPzogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHRzdGVuY2lsQmFja1Bhc3NPcD86IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0ZGVwdGhCaWFzPzogbnVtYmVyO1xyXG5cdGRlcHRoQmlhc1Nsb3BlU2NhbGU/OiBudW1iZXI7XHJcblx0ZGVwdGhCaWFzQ2xhbXA/OiBudW1iZXI7XHJcbn07XHJcbnR5cGUgVGFyZ2V0UHJvcHMgPSB7XHJcblx0Zm9ybWF0PzogVGV4dHVyZUZvcm1hdDtcclxuXHRibGVuZENvbG9yT3BlcmF0aW9uPzogQmxlbmRPcGVyYXRpb247XHJcblx0YmxlbmRDb2xvclNyY0ZhY3Rvcj86IEJsZW5kRmFjdG9yO1xyXG5cdGJsZW5kQ29sb3JEc3RGYWN0b3I/OiBCbGVuZEZhY3RvcjtcclxuXHRibGVuZEFscGhhT3BlcmF0aW9uPzogQmxlbmRPcGVyYXRpb247XHJcblx0YmxlbmRBbHBoYVNyY0ZhY3Rvcj86IEJsZW5kRmFjdG9yO1xyXG5cdGJsZW5kQWxwaGFEc3RGYWN0b3I/OiBCbGVuZEZhY3RvcjtcclxuXHR3cml0ZU1hc2s/OiBHUFVDb2xvcldyaXRlO1xyXG59O1xyXG4iLCJpbXBvcnQgeyBUZXh0dXJlVXNhZ2UgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xuaW1wb3J0IHsgR1BVQ2FudmFzQ29tcG9zaXRpbmdBbHBoYU1vZGUsIENvbnRleHRPcHRpb25zIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcbmltcG9ydCB7IE1pcG1hcEdlbmVyYXRvciB9IGZyb20gXCIuLi91dGlscy9NaXBtYXBHZW5lcmF0b3JcIjtcbmltcG9ydCB7IFNjaXNzb3JUZXN0LCBWaWV3UG9ydCB9IGZyb20gXCIuL1JlbmRlclN0YXRlXCI7XG5cbmNsYXNzIENvbnRleHQge1xuXHRwdWJsaWMgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcblxuXHRwdWJsaWMgY29udGV4dDogR1BVQ2FudmFzQ29udGV4dDtcblxuXHRwdWJsaWMgcGl4ZWxSYXRpbzogbnVtYmVyO1xuXG5cdHB1YmxpYyBkZXZpY2U6IEdQVURldmljZTtcblxuXHRwcml2YXRlIGFkYXB0ZXI6IEdQVUFkYXB0ZXI7XG5cblx0cHVibGljIHByZXNlbnRhdGlvblNpemU6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXI7IGRlcHRoOiBudW1iZXIgfTtcblxuXHRwdWJsaWMgcHJlc2VudGF0aW9uRm9ybWF0OiBHUFVUZXh0dXJlRm9ybWF0O1xuXG5cdHB1YmxpYyBtaXBtYXBUb29sczogTWlwbWFwR2VuZXJhdG9yO1xuXG5cdHByaXZhdGUgX3ZpZXdQb3J0OiBWaWV3UG9ydDtcblxuXHRwcml2YXRlIF9zY2lzc29yVGVzdDogU2Npc3NvclRlc3Q7XG5cblx0cHVibGljIGdldCB2aWV3UG9ydCgpOiBWaWV3UG9ydCB7XG5cdFx0cmV0dXJuIHRoaXMuX3ZpZXdQb3J0O1xuXHR9XG5cblx0cHVibGljIGdldCBzY2lzc29yVGVzdCgpOiBTY2lzc29yVGVzdCB7XG5cdFx0cmV0dXJuIHRoaXMuX3NjaXNzb3JUZXN0O1xuXHR9XG5cdGNvbnN0cnVjdG9yKHsgY2FudmFzLCBjb250YWluZXIsIGNvbnRleHQsIHBpeGVsUmF0aW8gfTogQ29udGV4dE9wdGlvbnMgPSB7fSkge1xuXHRcdGlmICghY29udGFpbmVyLmNsaWVudFdpZHRoIHx8ICFjb250YWluZXIuY2xpZW50SGVpZ2h0KSB0aHJvdyBuZXcgRXJyb3IoXCJjb250YWluZXIgd2lkdGggb3IgaGVpZ2h0IGlsbGVnYWxpdHlcIik7XG5cdFx0dGhpcy5jYW52YXMgPSBjYW52YXMgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcblx0XHQvLyB0aGlzLmNhbnZhcy5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuXHRcdHRoaXMucGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW8gfHwgd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcblx0XHRjb25zdCB3aWR0aCA9IGNvbnRhaW5lci5jbGllbnRXaWR0aCAqIHRoaXMucGl4ZWxSYXRpbztcblx0XHRjb25zdCBoZWlnaHQgPSBjb250YWluZXIuY2xpZW50SGVpZ2h0ICogdGhpcy5waXhlbFJhdGlvO1xuXHRcdHRoaXMuY2FudmFzLndpZHRoID0gd2lkdGg7XG5cdFx0dGhpcy5jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXHRcdHRoaXMuY2FudmFzLnN0eWxlLndpZHRoID0gY29udGFpbmVyLmNsaWVudFdpZHRoICsgXCJweFwiO1xuXHRcdHRoaXMuY2FudmFzLnN0eWxlLmhlaWdodCA9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG5cdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuY2FudmFzKTtcblx0XHR0aGlzLmNvbnRleHQgPSBjb250ZXh0IHx8ICh0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwid2ViZ3B1XCIpIGFzIEdQVUNhbnZhc0NvbnRleHQpO1xuXG5cdFx0dGhpcy5kZXZpY2UgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgaW5pdChcblx0XHRyZXF1ZXN0QWRhcHRlciA9IHt9LFxuXHRcdGRldmljZURlc2NyaXB0b3IgPSB7fSxcblx0XHRwcmVzZW50YXRpb25Db250ZXh0RGVzY3JpcHRvciA9IHt9XG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAoIXRoaXMuY29udGV4dCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBpbnN0YW50aWF0ZSBcIndlYmdwdVwiIGNvbnRleHQuYCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW5hdmlnYXRvci5ncHUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIFwibmF2aWdhdG9yLmdwdVwiLmApO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7XG5cdFx0XHR0aGlzLmRldmljZSA9IGF3YWl0IHRoaXMuYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7XG5cdFx0XHR0aGlzLnByZXNlbnRhdGlvblNpemUgPSB7XG5cdFx0XHRcdHdpZHRoOiB0aGlzLmNhbnZhcy5jbGllbnRXaWR0aCAqIHRoaXMucGl4ZWxSYXRpbyxcblx0XHRcdFx0aGVpZ2h0OiB0aGlzLmNhbnZhcy5jbGllbnRIZWlnaHQgKiB0aGlzLnBpeGVsUmF0aW8sXG5cdFx0XHRcdGRlcHRoOiAxXG5cdFx0XHR9O1xuXHRcdFx0dGhpcy5wcmVzZW50YXRpb25Gb3JtYXQgPSBuYXZpZ2F0b3IuZ3B1LmdldFByZWZlcnJlZENhbnZhc0Zvcm1hdCgpO1xuXHRcdFx0dGhpcy5kZXZpY2UuYWRkRXZlbnRMaXN0ZW5lcihcInVuY2FwdHVyZWRlcnJvclwiLCAoZXJyb3IpID0+IHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvcik7XG5cdFx0XHRcdC8vIFN0YXRlLmVycm9yID0gdHJ1ZTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5taXBtYXBUb29scyA9IG5ldyBNaXBtYXBHZW5lcmF0b3IodGhpcy5kZXZpY2UpO1xuXHRcdFx0dGhpcy5jb250ZXh0LmNvbmZpZ3VyZSh7XG5cdFx0XHRcdGRldmljZTogdGhpcy5kZXZpY2UsXG5cdFx0XHRcdGZvcm1hdDogdGhpcy5wcmVzZW50YXRpb25Gb3JtYXQsXG5cdFx0XHRcdHVzYWdlOiBUZXh0dXJlVXNhZ2UuUmVuZGVyQXR0YWNobWVudCxcblx0XHRcdFx0YWxwaGFNb2RlOiBcInByZW11bHRpcGxpZWRcIixcblx0XHRcdFx0Li4ucHJlc2VudGF0aW9uQ29udGV4dERlc2NyaXB0b3Jcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5fdmlld1BvcnQgPSBuZXcgVmlld1BvcnQoXG5cdFx0XHRcdDAsXG5cdFx0XHRcdDAsXG5cdFx0XHRcdHRoaXMuY2FudmFzLmNsaWVudFdpZHRoICogdGhpcy5waXhlbFJhdGlvLFxuXHRcdFx0XHR0aGlzLmNhbnZhcy5jbGllbnRIZWlnaHQgKiB0aGlzLnBpeGVsUmF0aW9cblx0XHRcdCk7XG5cdFx0XHR0aGlzLl9zY2lzc29yVGVzdCA9IG5ldyBTY2lzc29yVGVzdChcblx0XHRcdFx0MCxcblx0XHRcdFx0MCxcblx0XHRcdFx0dGhpcy5jYW52YXMuY2xpZW50V2lkdGggKiB0aGlzLnBpeGVsUmF0aW8sXG5cdFx0XHRcdHRoaXMuY2FudmFzLmNsaWVudEhlaWdodCAqIHRoaXMucGl4ZWxSYXRpb1xuXHRcdFx0KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihlcnJvcik7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cHVibGljIHNldFZpZXdQb3J0KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuXHRcdHRoaXMuX3ZpZXdQb3J0LnNldCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcblx0fVxuXG5cdHB1YmxpYyByZXNldFZpZXdQb3J0VG9GdWxsQ2FudmFzKCkge1xuXHRcdHRoaXMuX3ZpZXdQb3J0LnNldCgwLCAwLCB0aGlzLmNhbnZhcy5jbGllbnRXaWR0aCAqIHRoaXMucGl4ZWxSYXRpbywgdGhpcy5jYW52YXMuY2xpZW50SGVpZ2h0ICogdGhpcy5waXhlbFJhdGlvKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRTY2lzc29yVGVzdCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcblx0XHR0aGlzLl9zY2lzc29yVGVzdC5zZXQoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG5cdH1cblx0cHVibGljIHJlc2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcHJlc2VudGF0aW9uQ29udGV4dERlc2NyaXB0b3IgPSB7fSk6IHZvaWQge1xuXHRcdGNvbnN0IHcgPSB3aWR0aCAqIHRoaXMucGl4ZWxSYXRpbztcblx0XHRjb25zdCBoID0gaGVpZ2h0ICogdGhpcy5waXhlbFJhdGlvO1xuXHRcdHRoaXMuY2FudmFzLnN0eWxlLndpZHRoID0gdyArIFwicHhcIjtcblx0XHR0aGlzLmNhbnZhcy5zdHlsZS5oZWlnaHQgPSBoICsgXCJweFwiO1xuXHRcdHRoaXMuY2FudmFzLndpZHRoID0gdztcblx0XHR0aGlzLmNhbnZhcy5oZWlnaHQgPSBoO1xuXHRcdHRoaXMucHJlc2VudGF0aW9uU2l6ZSA9IHtcblx0XHRcdHdpZHRoOiB3LFxuXHRcdFx0aGVpZ2h0OiBoLFxuXHRcdFx0ZGVwdGg6IDFcblx0XHR9O1xuXHRcdHRoaXMuY29udGV4dC5jb25maWd1cmUoe1xuXHRcdFx0ZGV2aWNlOiB0aGlzLmRldmljZSxcblx0XHRcdGZvcm1hdDogbmF2aWdhdG9yLmdwdS5nZXRQcmVmZXJyZWRDYW52YXNGb3JtYXQoKSxcblx0XHRcdHVzYWdlOiBUZXh0dXJlVXNhZ2UuUmVuZGVyQXR0YWNobWVudCxcblx0XHRcdGFscGhhTW9kZTogR1BVQ2FudmFzQ29tcG9zaXRpbmdBbHBoYU1vZGUuUHJlbXVsdGlwbGllZCxcblx0XHRcdC4uLnByZXNlbnRhdGlvbkNvbnRleHREZXNjcmlwdG9yXG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29udGV4dDtcbiIsImltcG9ydCB7IFRleHR1cmVGb3JtYXQgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xyXG5pbXBvcnQgeyBXZWJHUFVUZXh0dXJlUHJvcHMsIEltYWdlRGF0YSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xyXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi9Db250ZXh0XCI7XHJcbmltcG9ydCBTYW1wbGVyIGZyb20gXCIuL1NhbXBsZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRleHR1cmUge1xyXG5cdFt4OiBzdHJpbmddOiBhbnk7XHJcblx0cHJpdmF0ZSBfdGV4dHVyZVZpZXc6IEdQVVRleHR1cmVWaWV3O1xyXG5cdHB1YmxpYyBncHVUZXh0dXJlPzogR1BVVGV4dHVyZTtcclxuXHRwdWJsaWMgbWlwTGV2ZWxDb3VudD86IG51bWJlcjtcclxuXHRwdWJsaWMgc2FtcGxlcj86IFNhbXBsZXI7XHJcblx0cHVibGljIGNvbnRleHQ/OiBDb250ZXh0O1xyXG5cdHB1YmxpYyB0ZXh0dXJlUHJvcD86IFdlYkdQVVRleHR1cmVQcm9wcztcclxuXHRwdWJsaWMgZGlydHk6IGJvb2xlYW47XHJcblx0cHVibGljIGZpeGVkU2l6ZTogYm9vbGVhbjtcclxuXHRjb25zdHJ1Y3Rvcih0ZXh0dXJlUHJvcDogV2ViR1BVVGV4dHVyZVByb3BzKSB7XHJcblx0XHR0aGlzLnRleHR1cmVQcm9wID0gT2JqZWN0LmFzc2lnbihcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGZvcm1hdDogVGV4dHVyZUZvcm1hdC5SR0JBOFVub3JtLFxyXG5cdFx0XHRcdHVzYWdlOiBHUFVUZXh0dXJlVXNhZ2UuVEVYVFVSRV9CSU5ESU5HIHwgR1BVVGV4dHVyZVVzYWdlLkNPUFlfRFNUIHwgR1BVVGV4dHVyZVVzYWdlLlJFTkRFUl9BVFRBQ0hNRU5ULFxyXG5cdFx0XHRcdGRhdGFJc1RleHR1cmU6IGZhbHNlXHJcblx0XHRcdH0sXHJcblx0XHRcdHRleHR1cmVQcm9wXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5zYW1wbGVyID0gdGV4dHVyZVByb3Auc2FtcGxlcjtcclxuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5maXhlZFNpemUgPSB0ZXh0dXJlUHJvcC5maXhlZFNpemUgfHwgZmFsc2U7XHJcblx0fVxyXG5cdGdldCBsYXlvdXRUeXBlKCkge1xyXG5cdFx0Y29uc3QgeyB2aWV3Rm9ybWF0cywgc2FtcGxlVHlwZSwgc2FtcGxlQ291bnQgfSA9IHRoaXMudGV4dHVyZVByb3A7XHJcblx0XHQvLyBjb25zdFxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0c2FtcGxlVHlwZTogZGVmYXVsdFZhbHVlKHNhbXBsZVR5cGUsIFwiZmxvYXRcIiksXHJcblx0XHRcdHZpZXdEaW1lbnNpb246IGRlZmF1bHRWYWx1ZSh2aWV3Rm9ybWF0cywgXCIyZFwiKSxcclxuXHRcdFx0bXVsdGlzYW1wbGVkOiBzYW1wbGVDb3VudCAmJiBzYW1wbGVDb3VudCA+IDEgPyB0cnVlIDogZmFsc2VcclxuXHRcdH07XHJcblx0fVxyXG5cdGdldCB0ZXh0dXJlVmlldygpIHtcclxuXHRcdGlmICghdGhpcy5fdGV4dHVyZVZpZXcpXHJcblx0XHRcdHRoaXMuX3RleHR1cmVWaWV3ID0gdGhpcy5ncHVUZXh0dXJlLmNyZWF0ZVZpZXcoe1xyXG5cdFx0XHRcdGRpbWVuc2lvbjogPEdQVVRleHR1cmVWaWV3RGltZW5zaW9uPmRlZmF1bHRWYWx1ZSh0aGlzLnRleHR1cmVQcm9wLnZpZXdGb3JtYXRzLCBcIjJkXCIpXHJcblx0XHRcdH0pO1xyXG5cdFx0cmV0dXJuIHRoaXMuX3RleHR1cmVWaWV3O1xyXG5cdH1cclxuXHR1cGRhdGUoY29udGV4dDogQ29udGV4dCkge1xyXG5cdFx0aWYgKCF0aGlzLmNvbnRleHQpIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcblx0XHRpZiAodGhpcy5kaXJ0eSkge1xyXG5cdFx0XHR0aGlzLmNoZWNrTmVlZENyZWF0ZVRleHR1cmUoKTtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHRpZiAodGhpcy50ZXh0dXJlUHJvcC5kYXRhKSB7XHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodGhpcy50ZXh0dXJlUHJvcC5kYXRhKSkge1xyXG5cdFx0XHRcdFx0dGhpcy50ZXh0dXJlUHJvcC5kYXRhLmZvckVhY2goKGltYWdlRGF0YSkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldERhdGEoaW1hZ2VEYXRhKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLnNldERhdGEodGhpcy50ZXh0dXJlUHJvcC5kYXRhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMudGV4dHVyZVByb3AubmVlZE1pcE1hcCkge1xyXG5cdFx0XHRcdHRoaXMuZ3B1VGV4dHVyZSA9IGNvbnRleHQubWlwbWFwVG9vbHMuZ2VuZXJhdGVNaXBtYXAodGhpcyk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMuc2FtcGxlcikgdGhpcy5zYW1wbGVyLnVwZGF0ZShjb250ZXh0KTtcclxuXHRcdH1cclxuXHR9XHJcblx0cHJpdmF0ZSBzZXREYXRhKG9wdGlvbnM6IEltYWdlRGF0YSkge1xyXG5cdFx0Y29uc3Qge1xyXG5cdFx0XHRzb3VyY2UsXHJcblx0XHRcdHdpZHRoID0gb3B0aW9ucy5zb3VyY2Uud2lkdGgsXHJcblx0XHRcdGhlaWdodCA9IG9wdGlvbnMuc291cmNlLmhlaWdodCxcclxuXHRcdFx0ZGVwdGggPSAxLFxyXG5cdFx0XHRzb3VyY2VYID0gMCxcclxuXHRcdFx0c291cmNlWSA9IDAsXHJcblx0XHRcdG1pcExldmVsID0gMCxcclxuXHRcdFx0eCA9IDAsXHJcblx0XHRcdHkgPSAwLFxyXG5cdFx0XHR6ID0gMCxcclxuXHRcdFx0YXNwZWN0ID0gXCJhbGxcIixcclxuXHRcdFx0Y29sb3JTcGFjZSA9IFwic3JnYlwiLFxyXG5cdFx0XHRwcmVtdWx0aXBsaWVkQWxwaGEgPSBmYWxzZVxyXG5cdFx0fSA9IG9wdGlvbnM7XHJcblx0XHRpZiAoc291cmNlIGluc3RhbmNlb2YgVGV4dHVyZSkge1xyXG5cdFx0XHRsZXQgY29tbWFuZEVuY29kZXIgPSB0aGlzLmNvbnRleHQuZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7XHJcblx0XHRcdGNvbW1hbmRFbmNvZGVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlKFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdHRleHR1cmU6IDxHUFVUZXh0dXJlPnNvdXJjZS5ncHVUZXh0dXJlLFxyXG5cdFx0XHRcdFx0b3JpZ2luOiBbc291cmNlWCwgc291cmNlWV1cclxuXHRcdFx0XHRcdC8vIGFzcGVjdFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0dGV4dHVyZTogdGhpcy5ncHVUZXh0dXJlLFxyXG5cdFx0XHRcdFx0b3JpZ2luOiB7IHg6IDAsIHk6IDAsIHogfSxcclxuXHRcdFx0XHRcdG1pcExldmVsXHJcblx0XHRcdFx0XHQvLyBhc3BlY3RcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdHdpZHRoLFxyXG5cdFx0XHRcdFx0aGVpZ2h0LFxyXG5cdFx0XHRcdFx0ZGVwdGhPckFycmF5TGF5ZXJzOiAxXHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0XHR0aGlzLmNvbnRleHQuZGV2aWNlLnF1ZXVlLnN1Ym1pdChbY29tbWFuZEVuY29kZXIuZmluaXNoKCldKTtcclxuXHRcdFx0Y29tbWFuZEVuY29kZXIgPSBudWxsO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5jb250ZXh0LmRldmljZS5xdWV1ZS5jb3B5RXh0ZXJuYWxJbWFnZVRvVGV4dHVyZShcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRzb3VyY2UsXHJcblx0XHRcdFx0XHRvcmlnaW46IFtzb3VyY2VYLCBzb3VyY2VZXVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0dGV4dHVyZTogdGhpcy5ncHVUZXh0dXJlLFxyXG5cdFx0XHRcdFx0b3JpZ2luOiBbeCwgeSwgel0sXHJcblx0XHRcdFx0XHRtaXBMZXZlbCxcclxuXHRcdFx0XHRcdGFzcGVjdCxcclxuXHRcdFx0XHRcdGNvbG9yU3BhY2UsXHJcblx0XHRcdFx0XHRwcmVtdWx0aXBsaWVkQWxwaGFcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdFt3aWR0aCwgaGVpZ2h0LCBkZXB0aF1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblx0c2V0U2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgZGVwdGg/OiBudW1iZXIpIHtcclxuXHRcdGlmICh0aGlzLmZpeGVkU2l6ZSkgcmV0dXJuO1xyXG5cdFx0dGhpcy50ZXh0dXJlUHJvcC5zaXplLndpZHRoID0gd2lkdGg7XHJcblx0XHR0aGlzLnRleHR1cmVQcm9wLnNpemUuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cdFx0aWYgKGRlcHRoKSB0aGlzLnRleHR1cmVQcm9wLnNpemUuZGVwdGggPSBkZXB0aDtcclxuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xyXG5cdH1cclxuXHRkZXN0cm95KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5ncHVUZXh0dXJlLmRlc3Ryb3koKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVhdGVHUFVUZXh0dXJlKCkge1xyXG5cdFx0aWYgKHR5cGVvZiB0aGlzLnRleHR1cmVQcm9wLmZvcm1hdCA9PT0gXCJudW1iZXJcIikge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJudW1iZXIgZm9ybWF0XCIpO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBkZXB0aCB9ID0gdGhpcy50ZXh0dXJlUHJvcC5zaXplO1xyXG5cdFx0cmV0dXJuIHRoaXMuY29udGV4dC5kZXZpY2UuY3JlYXRlVGV4dHVyZSh7XHJcblx0XHRcdGxhYmVsOiB0aGlzLnRleHR1cmVQcm9wPy5sYWJlbCB8fCBcInVuZGVmaW5lZFwiLFxyXG5cdFx0XHRzaXplOiBbd2lkdGgsIGhlaWdodCwgZGVwdGhdLFxyXG5cdFx0XHRkaW1lbnNpb246IHRoaXMudGV4dHVyZVByb3AuZGltZW5zaW9uIHx8IFwiMmRcIixcclxuXHRcdFx0Zm9ybWF0OiB0aGlzLnRleHR1cmVQcm9wLmZvcm1hdCBhcyBHUFVUZXh0dXJlRm9ybWF0LFxyXG5cdFx0XHR1c2FnZTogdGhpcy50ZXh0dXJlUHJvcC51c2FnZSxcclxuXHRcdFx0bWlwTGV2ZWxDb3VudDogdGhpcy50ZXh0dXJlUHJvcC5taXBMZXZlbENvdW50IHx8IDEsXHJcblx0XHRcdHNhbXBsZUNvdW50OiB0aGlzLnRleHR1cmVQcm9wLnNhbXBsZUNvdW50IHx8IDFcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRwcml2YXRlIGNoZWNrTmVlZENyZWF0ZVRleHR1cmUoKSB7XHJcblx0XHRjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGRlcHRoIH0gPSB0aGlzLnRleHR1cmVQcm9wLnNpemU7XHJcblx0XHRpZiAodGhpcy5ncHVUZXh0dXJlKSB7XHJcblx0XHRcdGlmICh3aWR0aCAhPSB0aGlzLmdwdVRleHR1cmUud2lkdGggfHwgaGVpZ2h0ICE9IHRoaXMuZ3B1VGV4dHVyZS5oZWlnaHQpIHtcclxuXHRcdFx0XHR0aGlzLl90ZXh0dXJlVmlldyA9IHVuZGVmaW5lZDtcclxuXHRcdFx0XHR0aGlzLmdwdVRleHR1cmUuZGVzdHJveSgpO1xyXG5cdFx0XHRcdHRoaXMuZ3B1VGV4dHVyZSA9IHRoaXMuY3JlYXRlR1BVVGV4dHVyZSgpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmdwdVRleHR1cmUgPSB0aGlzLmNyZWF0ZUdQVVRleHR1cmUoKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IENvbnRleHQgZnJvbSBcIi4vQ29udGV4dFwiO1xyXG5cclxuY2xhc3MgU2FtcGxlciB7XHJcblx0cHVibGljIGdwdVNhbXBsZXI6IEdQVVNhbXBsZXI7XHJcblx0cHVibGljIGxheW91dFR5cGU6IEdQVVNhbXBsZXJCaW5kaW5nTGF5b3V0O1xyXG5cclxuXHRzdGF0aWMgYmFzZVNhbXBsZXIgPSBuZXcgU2FtcGxlcih7XHJcblx0XHRtYWdGaWx0ZXI6IFwibGluZWFyXCIsXHJcblx0XHRtaW5GaWx0ZXI6IFwibGluZWFyXCJcclxuXHR9KTtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwdWJsaWMgZGVzY3JpcHRvcj86IEdQVVNhbXBsZXJEZXNjcmlwdG9yLFxyXG5cdFx0bGF5b3V0VHlwZTogR1BVU2FtcGxlckJpbmRpbmdMYXlvdXQgPSB7XHJcblx0XHRcdHR5cGU6IFwiZmlsdGVyaW5nXCJcclxuXHRcdH1cclxuXHQpIHtcclxuXHRcdHRoaXMuZGVzY3JpcHRvciA9IHt9O1xyXG5cdFx0T2JqZWN0LmFzc2lnbihcclxuXHRcdFx0dGhpcy5kZXNjcmlwdG9yLFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bWFnRmlsdGVyOiBcImxpbmVhclwiLFxyXG5cdFx0XHRcdG1pbkZpbHRlcjogXCJsaW5lYXJcIixcclxuXHRcdFx0XHQvLyBtaXBtYXBGaWx0ZXI6IFwibGluZWFyXCIsXHJcblx0XHRcdFx0YWRkcmVzc01vZGVVOiBcImNsYW1wLXRvLWVkZ2VcIixcclxuXHRcdFx0XHRhZGRyZXNzTW9kZVY6IFwiY2xhbXAtdG8tZWRnZVwiXHJcblx0XHRcdFx0Ly8gYWRkcmVzc01vZGVXOiBcImNsYW1wLXRvLWVkZ2VcIixcclxuXHRcdFx0fSxcclxuXHRcdFx0ZGVzY3JpcHRvclxyXG5cdFx0KTtcclxuXHRcdHRoaXMubGF5b3V0VHlwZSA9IGxheW91dFR5cGU7XHJcblx0fVxyXG5cdHVwZGF0ZShjb250ZXh0OiBDb250ZXh0KSB7XHJcblx0XHRpZiAoIXRoaXMuZ3B1U2FtcGxlcikgdGhpcy5ncHVTYW1wbGVyID0gY29udGV4dC5kZXZpY2UuY3JlYXRlU2FtcGxlcih0aGlzLmRlc2NyaXB0b3IpO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2FtcGxlcjtcclxuIiwiaW1wb3J0IHsgQXR0YWNobWVudE9wdGlvbnMgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi9UZXh0dXJlXCI7XHJcblxyXG5jbGFzcyBBdHRhY2htZW50IHtcclxuXHRwdWJsaWMgb3A6IEdQVUxvYWRPcCA9IFwiY2xlYXJcIjtcclxuXHRwdWJsaWMgc3RvcmVPcDogR1BVU3RvcmVPcCA9IFwic3RvcmVcIjtcclxuXHJcblx0cHVibGljIHRleHR1cmU/OiBUZXh0dXJlO1xyXG5cdHB1YmxpYyByZXNvbHZlVGFyZ2V0PzogVGV4dHVyZTtcclxuXHJcblx0cHVibGljIHJlYWRPbmx5PzogYm9vbGVhbjtcclxuXHJcblx0Y29uc3RydWN0b3IocHVibGljIHZhbHVlOiBHUFVDb2xvckRpY3QgfCBHUFVDb2xvciB8IG51bWJlciwgb3B0aW9ucz86IEF0dGFjaG1lbnRPcHRpb25zKSB7XHJcblx0XHRPYmplY3QuYXNzaWduKHRoaXMsIG9wdGlvbnMpO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQXR0YWNobWVudDtcclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVmaW5lZCh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cbiIsIi8qXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9iYW5rc2VhbiB3cmFwcGVkIE1ha290byBNYXRzdW1vdG8gYW5kIFRha3VqaSBOaXNoaW11cmEncyBjb2RlIGluIGEgbmFtZXNwYWNlXG4gIHNvIGl0J3MgYmV0dGVyIGVuY2Fwc3VsYXRlZC4gTm93IHlvdSBjYW4gaGF2ZSBtdWx0aXBsZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcnNcbiAgYW5kIHRoZXkgd29uJ3Qgc3RvbXAgYWxsIG92ZXIgZWFjaG90aGVyJ3Mgc3RhdGUuXG5cbiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoaXMgYXMgYSBzdWJzdGl0dXRlIGZvciBNYXRoLnJhbmRvbSgpLCB1c2UgdGhlIHJhbmRvbSgpXG4gIG1ldGhvZCBsaWtlIHNvOlxuXG4gIHZhciBtID0gbmV3IE1lcnNlbm5lVHdpc3RlcigpO1xuICB2YXIgcmFuZG9tTnVtYmVyID0gbS5yYW5kb20oKTtcblxuICBZb3UgY2FuIGFsc28gY2FsbCB0aGUgb3RoZXIgZ2VucmFuZF97Zm9vfSgpIG1ldGhvZHMgb24gdGhlIGluc3RhbmNlLlxuXG4gIElmIHlvdSB3YW50IHRvIHVzZSBhIHNwZWNpZmljIHNlZWQgaW4gb3JkZXIgdG8gZ2V0IGEgcmVwZWF0YWJsZSByYW5kb21cbiAgc2VxdWVuY2UsIHBhc3MgYW4gaW50ZWdlciBpbnRvIHRoZSBjb25zdHJ1Y3RvcjpcblxuICB2YXIgbSA9IG5ldyBNZXJzZW5uZVR3aXN0ZXIoMTIzKTtcblxuICBhbmQgdGhhdCB3aWxsIGFsd2F5cyBwcm9kdWNlIHRoZSBzYW1lIHJhbmRvbSBzZXF1ZW5jZS5cblxuICBTZWFuIE1jQ3VsbG91Z2ggKGJhbmtzZWFuQGdtYWlsLmNvbSlcbiovXG5cbi8qXG4gICBBIEMtcHJvZ3JhbSBmb3IgTVQxOTkzNywgd2l0aCBpbml0aWFsaXphdGlvbiBpbXByb3ZlZCAyMDAyLzEvMjYuXG4gICBDb2RlZCBieSBUYWt1amkgTmlzaGltdXJhIGFuZCBNYWtvdG8gTWF0c3Vtb3RvLlxuXG4gICBCZWZvcmUgdXNpbmcsIGluaXRpYWxpemUgdGhlIHN0YXRlIGJ5IHVzaW5nIGluaXRfc2VlZChzZWVkKVxuICAgb3IgaW5pdF9ieV9hcnJheShpbml0X2tleSwga2V5X2xlbmd0aCkuXG5cbiAgIENvcHlyaWdodCAoQykgMTk5NyAtIDIwMDIsIE1ha290byBNYXRzdW1vdG8gYW5kIFRha3VqaSBOaXNoaW11cmEsXG4gICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG4gICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uc1xuICAgYXJlIG1ldDpcblxuICAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAgICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAgIDMuIFRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGVcbiAgICAgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuXG4gICAgICAgIHBlcm1pc3Npb24uXG5cbiAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcbiAgIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1RcbiAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxuICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SXG4gICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCxcbiAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTyxcbiAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUlxuICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRlxuICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcbiAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cblxuICAgQW55IGZlZWRiYWNrIGlzIHZlcnkgd2VsY29tZS5cbiAgIGh0dHA6Ly93d3cubWF0aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAvfm0tbWF0L01UL2VtdC5odG1sXG4gICBlbWFpbDogbS1tYXQgQCBtYXRoLnNjaS5oaXJvc2hpbWEtdS5hYy5qcCAocmVtb3ZlIHNwYWNlKVxuKi9cblxudmFyIE1lcnNlbm5lVHdpc3RlciA9IGZ1bmN0aW9uKHNlZWQpIHtcblx0aWYgKHNlZWQgPT0gdW5kZWZpbmVkKSB7XG5cdFx0c2VlZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXHR9XG5cblx0LyogUGVyaW9kIHBhcmFtZXRlcnMgKi9cblx0dGhpcy5OID0gNjI0O1xuXHR0aGlzLk0gPSAzOTc7XG5cdHRoaXMuTUFUUklYX0EgPSAweDk5MDhiMGRmOyAgIC8qIGNvbnN0YW50IHZlY3RvciBhICovXG5cdHRoaXMuVVBQRVJfTUFTSyA9IDB4ODAwMDAwMDA7IC8qIG1vc3Qgc2lnbmlmaWNhbnQgdy1yIGJpdHMgKi9cblx0dGhpcy5MT1dFUl9NQVNLID0gMHg3ZmZmZmZmZjsgLyogbGVhc3Qgc2lnbmlmaWNhbnQgciBiaXRzICovXG5cblx0dGhpcy5tdCA9IG5ldyBBcnJheSh0aGlzLk4pOyAvKiB0aGUgYXJyYXkgZm9yIHRoZSBzdGF0ZSB2ZWN0b3IgKi9cblx0dGhpcy5tdGk9dGhpcy5OKzE7IC8qIG10aT09TisxIG1lYW5zIG10W05dIGlzIG5vdCBpbml0aWFsaXplZCAqL1xuXG5cdGlmIChzZWVkLmNvbnN0cnVjdG9yID09IEFycmF5KSB7XG5cdFx0dGhpcy5pbml0X2J5X2FycmF5KHNlZWQsIHNlZWQubGVuZ3RoKTtcblx0fVxuXHRlbHNlIHtcblx0XHR0aGlzLmluaXRfc2VlZChzZWVkKTtcblx0fVxufVxuXG4vKiBpbml0aWFsaXplcyBtdFtOXSB3aXRoIGEgc2VlZCAqL1xuLyogb3JpZ2luIG5hbWUgaW5pdF9nZW5yYW5kICovXG5NZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLmluaXRfc2VlZCA9IGZ1bmN0aW9uKHMpIHtcblx0dGhpcy5tdFswXSA9IHMgPj4+IDA7XG5cdGZvciAodGhpcy5tdGk9MTsgdGhpcy5tdGk8dGhpcy5OOyB0aGlzLm10aSsrKSB7XG5cdFx0dmFyIHMgPSB0aGlzLm10W3RoaXMubXRpLTFdIF4gKHRoaXMubXRbdGhpcy5tdGktMV0gPj4+IDMwKTtcblx0XHR0aGlzLm10W3RoaXMubXRpXSA9ICgoKCgocyAmIDB4ZmZmZjAwMDApID4+PiAxNikgKiAxODEyNDMzMjUzKSA8PCAxNikgKyAocyAmIDB4MDAwMGZmZmYpICogMTgxMjQzMzI1Mylcblx0XHQrIHRoaXMubXRpO1xuXHRcdC8qIFNlZSBLbnV0aCBUQU9DUCBWb2wyLiAzcmQgRWQuIFAuMTA2IGZvciBtdWx0aXBsaWVyLiAqL1xuXHRcdC8qIEluIHRoZSBwcmV2aW91cyB2ZXJzaW9ucywgTVNCcyBvZiB0aGUgc2VlZCBhZmZlY3QgICAqL1xuXHRcdC8qIG9ubHkgTVNCcyBvZiB0aGUgYXJyYXkgbXRbXS4gICAgICAgICAgICAgICAgICAgICAgICAqL1xuXHRcdC8qIDIwMDIvMDEvMDkgbW9kaWZpZWQgYnkgTWFrb3RvIE1hdHN1bW90byAgICAgICAgICAgICAqL1xuXHRcdHRoaXMubXRbdGhpcy5tdGldID4+Pj0gMDtcblx0XHQvKiBmb3IgPjMyIGJpdCBtYWNoaW5lcyAqL1xuXHR9XG59XG5cbi8qIGluaXRpYWxpemUgYnkgYW4gYXJyYXkgd2l0aCBhcnJheS1sZW5ndGggKi9cbi8qIGluaXRfa2V5IGlzIHRoZSBhcnJheSBmb3IgaW5pdGlhbGl6aW5nIGtleXMgKi9cbi8qIGtleV9sZW5ndGggaXMgaXRzIGxlbmd0aCAqL1xuLyogc2xpZ2h0IGNoYW5nZSBmb3IgQysrLCAyMDA0LzIvMjYgKi9cbk1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUuaW5pdF9ieV9hcnJheSA9IGZ1bmN0aW9uKGluaXRfa2V5LCBrZXlfbGVuZ3RoKSB7XG5cdHZhciBpLCBqLCBrO1xuXHR0aGlzLmluaXRfc2VlZCgxOTY1MDIxOCk7XG5cdGk9MTsgaj0wO1xuXHRrID0gKHRoaXMuTj5rZXlfbGVuZ3RoID8gdGhpcy5OIDoga2V5X2xlbmd0aCk7XG5cdGZvciAoOyBrOyBrLS0pIHtcblx0XHR2YXIgcyA9IHRoaXMubXRbaS0xXSBeICh0aGlzLm10W2ktMV0gPj4+IDMwKVxuXHRcdHRoaXMubXRbaV0gPSAodGhpcy5tdFtpXSBeICgoKCgocyAmIDB4ZmZmZjAwMDApID4+PiAxNikgKiAxNjY0NTI1KSA8PCAxNikgKyAoKHMgJiAweDAwMDBmZmZmKSAqIDE2NjQ1MjUpKSlcblx0XHQrIGluaXRfa2V5W2pdICsgajsgLyogbm9uIGxpbmVhciAqL1xuXHRcdHRoaXMubXRbaV0gPj4+PSAwOyAvKiBmb3IgV09SRFNJWkUgPiAzMiBtYWNoaW5lcyAqL1xuXHRcdGkrKzsgaisrO1xuXHRcdGlmIChpPj10aGlzLk4pIHsgdGhpcy5tdFswXSA9IHRoaXMubXRbdGhpcy5OLTFdOyBpPTE7IH1cblx0XHRpZiAoaj49a2V5X2xlbmd0aCkgaj0wO1xuXHR9XG5cdGZvciAoaz10aGlzLk4tMTsgazsgay0tKSB7XG5cdFx0dmFyIHMgPSB0aGlzLm10W2ktMV0gXiAodGhpcy5tdFtpLTFdID4+PiAzMCk7XG5cdFx0dGhpcy5tdFtpXSA9ICh0aGlzLm10W2ldIF4gKCgoKChzICYgMHhmZmZmMDAwMCkgPj4+IDE2KSAqIDE1NjYwODM5NDEpIDw8IDE2KSArIChzICYgMHgwMDAwZmZmZikgKiAxNTY2MDgzOTQxKSlcblx0XHQtIGk7IC8qIG5vbiBsaW5lYXIgKi9cblx0XHR0aGlzLm10W2ldID4+Pj0gMDsgLyogZm9yIFdPUkRTSVpFID4gMzIgbWFjaGluZXMgKi9cblx0XHRpKys7XG5cdFx0aWYgKGk+PXRoaXMuTikgeyB0aGlzLm10WzBdID0gdGhpcy5tdFt0aGlzLk4tMV07IGk9MTsgfVxuXHR9XG5cblx0dGhpcy5tdFswXSA9IDB4ODAwMDAwMDA7IC8qIE1TQiBpcyAxOyBhc3N1cmluZyBub24temVybyBpbml0aWFsIGFycmF5ICovXG59XG5cbi8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMHhmZmZmZmZmZl0taW50ZXJ2YWwgKi9cbi8qIG9yaWdpbiBuYW1lIGdlbnJhbmRfaW50MzIgKi9cbk1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUucmFuZG9tX2ludCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgeTtcblx0dmFyIG1hZzAxID0gbmV3IEFycmF5KDB4MCwgdGhpcy5NQVRSSVhfQSk7XG5cdC8qIG1hZzAxW3hdID0geCAqIE1BVFJJWF9BICBmb3IgeD0wLDEgKi9cblxuXHRpZiAodGhpcy5tdGkgPj0gdGhpcy5OKSB7IC8qIGdlbmVyYXRlIE4gd29yZHMgYXQgb25lIHRpbWUgKi9cblx0XHR2YXIga2s7XG5cblx0XHRpZiAodGhpcy5tdGkgPT0gdGhpcy5OKzEpICAvKiBpZiBpbml0X3NlZWQoKSBoYXMgbm90IGJlZW4gY2FsbGVkLCAqL1xuXHRcdFx0dGhpcy5pbml0X3NlZWQoNTQ4OSk7ICAvKiBhIGRlZmF1bHQgaW5pdGlhbCBzZWVkIGlzIHVzZWQgKi9cblxuXHRcdGZvciAoa2s9MDtrazx0aGlzLk4tdGhpcy5NO2trKyspIHtcblx0XHRcdHkgPSAodGhpcy5tdFtra10mdGhpcy5VUFBFUl9NQVNLKXwodGhpcy5tdFtraysxXSZ0aGlzLkxPV0VSX01BU0spO1xuXHRcdFx0dGhpcy5tdFtra10gPSB0aGlzLm10W2trK3RoaXMuTV0gXiAoeSA+Pj4gMSkgXiBtYWcwMVt5ICYgMHgxXTtcblx0XHR9XG5cdFx0Zm9yICg7a2s8dGhpcy5OLTE7a2srKykge1xuXHRcdFx0eSA9ICh0aGlzLm10W2trXSZ0aGlzLlVQUEVSX01BU0spfCh0aGlzLm10W2trKzFdJnRoaXMuTE9XRVJfTUFTSyk7XG5cdFx0XHR0aGlzLm10W2trXSA9IHRoaXMubXRba2srKHRoaXMuTS10aGlzLk4pXSBeICh5ID4+PiAxKSBeIG1hZzAxW3kgJiAweDFdO1xuXHRcdH1cblx0XHR5ID0gKHRoaXMubXRbdGhpcy5OLTFdJnRoaXMuVVBQRVJfTUFTSyl8KHRoaXMubXRbMF0mdGhpcy5MT1dFUl9NQVNLKTtcblx0XHR0aGlzLm10W3RoaXMuTi0xXSA9IHRoaXMubXRbdGhpcy5NLTFdIF4gKHkgPj4+IDEpIF4gbWFnMDFbeSAmIDB4MV07XG5cblx0XHR0aGlzLm10aSA9IDA7XG5cdH1cblxuXHR5ID0gdGhpcy5tdFt0aGlzLm10aSsrXTtcblxuXHQvKiBUZW1wZXJpbmcgKi9cblx0eSBePSAoeSA+Pj4gMTEpO1xuXHR5IF49ICh5IDw8IDcpICYgMHg5ZDJjNTY4MDtcblx0eSBePSAoeSA8PCAxNSkgJiAweGVmYzYwMDAwO1xuXHR5IF49ICh5ID4+PiAxOCk7XG5cblx0cmV0dXJuIHkgPj4+IDA7XG59XG5cbi8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMHg3ZmZmZmZmZl0taW50ZXJ2YWwgKi9cbi8qIG9yaWdpbiBuYW1lIGdlbnJhbmRfaW50MzEgKi9cbk1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUucmFuZG9tX2ludDMxID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiAodGhpcy5yYW5kb21faW50KCk+Pj4xKTtcbn1cblxuLyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxXS1yZWFsLWludGVydmFsICovXG4vKiBvcmlnaW4gbmFtZSBnZW5yYW5kX3JlYWwxICovXG5NZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLnJhbmRvbV9pbmNsID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnJhbmRvbV9pbnQoKSooMS4wLzQyOTQ5NjcyOTUuMCk7XG5cdC8qIGRpdmlkZWQgYnkgMl4zMi0xICovXG59XG5cbi8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMSktcmVhbC1pbnRlcnZhbCAqL1xuTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5yYW5kb20gPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMucmFuZG9tX2ludCgpKigxLjAvNDI5NDk2NzI5Ni4wKTtcblx0LyogZGl2aWRlZCBieSAyXjMyICovXG59XG5cbi8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gKDAsMSktcmVhbC1pbnRlcnZhbCAqL1xuLyogb3JpZ2luIG5hbWUgZ2VucmFuZF9yZWFsMyAqL1xuTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5yYW5kb21fZXhjbCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gKHRoaXMucmFuZG9tX2ludCgpICsgMC41KSooMS4wLzQyOTQ5NjcyOTYuMCk7XG5cdC8qIGRpdmlkZWQgYnkgMl4zMiAqL1xufVxuXG4vKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDEpIHdpdGggNTMtYml0IHJlc29sdXRpb24qL1xuLyogb3JpZ2luIG5hbWUgZ2VucmFuZF9yZXM1MyAqL1xuTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5yYW5kb21fbG9uZyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgYT10aGlzLnJhbmRvbV9pbnQoKT4+PjUsIGI9dGhpcy5yYW5kb21faW50KCk+Pj42O1xuXHRyZXR1cm4oYSo2NzEwODg2NC4wK2IpKigxLjAvOTAwNzE5OTI1NDc0MDk5Mi4wKTtcbn1cblxuLyogVGhlc2UgcmVhbCB2ZXJzaW9ucyBhcmUgZHVlIHRvIElzYWt1IFdhZGEsIDIwMDIvMDEvMDkgYWRkZWQgKi9cblxubW9kdWxlLmV4cG9ydHMgPSBNZXJzZW5uZVR3aXN0ZXI7XG4iLCJpbXBvcnQgTWVyc2VubmVUd2lzdGVyIGZyb20gXCJtZXJzZW5uZS10d2lzdGVyXCI7XHJcbmltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xyXG5pbXBvcnQgZGVmaW5lZCBmcm9tIFwiLi4vdXRpbHMvZGVmaW5lZFwiO1xyXG5cclxuY2xhc3MgR01hdGgge1xyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjEgPSAwLjE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjIgPSAwLjAxO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEVQU0lMT04zID0gMC4wMDE7XHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9ONCA9IDAuMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9ONSA9IDAuMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjYgPSAwLjAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9ONyA9IDAuMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OOCA9IDAuMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjkgPSAwLjAwMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OMTAgPSAwLjAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjExID0gMC4wMDAwMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OMTIgPSAwLjAwMDAwMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OMTMgPSAwLjAwMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjE0ID0gMC4wMDAwMDAwMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OMTUgPSAwLjAwMDAwMDAwMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OMTYgPSAwLjAwMDAwMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjE3ID0gMC4wMDAwMDAwMDAwMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OMTggPSAwLjAwMDAwMDAwMDAwMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OMTkgPSAwLjAwMDAwMDAwMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjIwID0gMC4wMDAwMDAwMDAwMDAwMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OMjEgPSAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBHUkFWSVRBVElPTkFMUEFSQU1FVEVSID0gMy45ODYwMDQ0MThlMTQ7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgU0lYVFlfRk9VUl9LSUxPQllURVMgPSA2NCAqIDEwMjQ7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRk9VUl9HSUdBQllURVMgPSA0ICogMTAyNCAqIDEwMjQgKiAxMDI0O1xyXG5cclxuXHRzdGF0aWMgc2lnbiA9IGRlZmF1bHRWYWx1ZShNYXRoLnNpZ24sIGZ1bmN0aW9uIHNpZ24odmFsdWUpIHtcclxuXHRcdHZhbHVlID0gK3ZhbHVlOyAvLyBjb2VyY2UgdG8gbnVtYmVyXHJcblx0XHRpZiAodmFsdWUgPT09IDAgfHwgdmFsdWUgIT09IHZhbHVlKSB7XHJcblx0XHRcdC8vIHplcm8gb3IgTmFOXHJcblx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB2YWx1ZSA+IDAgPyAxIDogLTE7XHJcblx0fSk7XHJcblxyXG5cdHN0YXRpYyBzaWduTm90WmVybyh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHZhbHVlIDwgMC4wID8gLTEuMCA6IDEuMDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyB0b1NOb3JtKHZhbHVlOiBudW1iZXIsIHJhbmdlTWF4aW11bTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdHJhbmdlTWF4aW11bSA9IGRlZmF1bHRWYWx1ZShyYW5nZU1heGltdW0sIDI1NSk7XHJcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCgoR01hdGguY2xhbXAodmFsdWUsIC0xLjAsIDEuMCkgKiAwLjUgKyAwLjUpICogcmFuZ2VNYXhpbXVtKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tU05vcm0odmFsdWU6IG51bWJlciwgcmFuZ2VNYXhpbXVtOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0cmFuZ2VNYXhpbXVtID0gZGVmYXVsdFZhbHVlKHJhbmdlTWF4aW11bSwgMjU1KTtcclxuXHRcdHJldHVybiAoR01hdGguY2xhbXAodmFsdWUsIDAuMCwgcmFuZ2VNYXhpbXVtKSAvIHJhbmdlTWF4aW11bSkgKiAyLjAgLSAxLjA7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbm9ybWFsaXplKHZhbHVlOiBudW1iZXIsIHJhbmdlTWluaW11bTogbnVtYmVyLCByYW5nZU1heGltdW06IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyYW5nZU1heGltdW0gPSBNYXRoLm1heChyYW5nZU1heGltdW0gLSByYW5nZU1pbmltdW0sIDAuMCk7XHJcblx0XHRyZXR1cm4gcmFuZ2VNYXhpbXVtID09PSAwLjAgPyAwLjAgOiBHTWF0aC5jbGFtcCgodmFsdWUgLSByYW5nZU1pbmltdW0pIC8gcmFuZ2VNYXhpbXVtLCAwLjAsIDEuMCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc2luaCA9IGRlZmF1bHRWYWx1ZShNYXRoLnNpbmgsIGZ1bmN0aW9uIHNpbmgodmFsdWUpIHtcclxuXHRcdHJldHVybiAoTWF0aC5leHAodmFsdWUpIC0gTWF0aC5leHAoLXZhbHVlKSkgLyAyLjA7XHJcblx0fSk7XHJcblxyXG5cdHN0YXRpYyBjb3NoID0gZGVmYXVsdFZhbHVlKE1hdGguY29zaCwgZnVuY3Rpb24gY29zaCh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIChNYXRoLmV4cCh2YWx1ZSkgKyBNYXRoLmV4cCgtdmFsdWUpKSAvIDIuMDtcclxuXHR9KTtcclxuXHJcblx0c3RhdGljIGxlcnAocDogbnVtYmVyLCBxOiBudW1iZXIsIHRpbWU6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gKDEuMCAtIHRpbWUpICogcCArIHRpbWUgKiBxO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIFBJID0gTWF0aC5QSTtcclxuXHJcblx0c3RhdGljIE9ORV9PVkVSX1BJID0gMS4wIC8gTWF0aC5QSTtcclxuXHJcblx0c3RhdGljIFBJX09WRVJfVFdPID0gTWF0aC5QSSAvIDIuMDtcclxuXHJcblx0c3RhdGljIFBJX09WRVJfVEhSRUUgPSBNYXRoLlBJIC8gMy4wO1xyXG5cclxuXHRzdGF0aWMgUElfT1ZFUl9GT1VSID0gTWF0aC5QSSAvIDQuMDtcclxuXHJcblx0c3RhdGljIFBJX09WRVJfU0lYID0gTWF0aC5QSSAvIDYuMDtcclxuXHJcblx0c3RhdGljIFRIUkVFX1BJX09WRVJfVFdPID0gKDMuMCAqIE1hdGguUEkpIC8gMi4wO1xyXG5cclxuXHRzdGF0aWMgVFdPX1BJID0gMi4wICogTWF0aC5QSTtcclxuXHJcblx0c3RhdGljIE9ORV9PVkVSX1RXT19QSSA9IDEuMCAvICgyLjAgKiBNYXRoLlBJKTtcclxuXHJcblx0c3RhdGljIFJBRElBTlNfUEVSX0RFR1JFRSA9IE1hdGguUEkgLyAxODAuMDtcclxuXHJcblx0c3RhdGljIERFR1JFRVNfUEVSX1JBRElBTiA9IDE4MC4wIC8gTWF0aC5QSTtcclxuXHJcblx0c3RhdGljIFJBRElBTlNfUEVSX0FSQ1NFQ09ORCA9IEdNYXRoLlJBRElBTlNfUEVSX0RFR1JFRSAvIDM2MDAuMDtcclxuXHJcblx0c3RhdGljIHRvUmFkaWFucyhkZWdyZWVzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGRlZ3JlZXMpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImRlZ3JlZXMgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGRlZ3JlZXMgKiBHTWF0aC5SQURJQU5TX1BFUl9ERUdSRUU7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgdG9EZWdyZWVzKHJhZGlhbnM6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRpZiAoIWRlZmluZWQocmFkaWFucykpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicmFkaWFucyBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmFkaWFucyAqIEdNYXRoLkRFR1JFRVNfUEVSX1JBRElBTjtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBuZWdhdGl2ZVBpVG9QaShhbmdsZTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdGlmICghZGVmaW5lZChhbmdsZSkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYW5nbGUgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGFuZ2xlID49IC1HTWF0aC5QSSAmJiBhbmdsZSA8PSBHTWF0aC5QSSkge1xyXG5cdFx0XHQvLyBFYXJseSBleGl0IGlmIHRoZSBpbnB1dCBpcyBhbHJlYWR5IGluc2lkZSB0aGUgcmFuZ2UuIFRoaXMgYXZvaWRzXHJcblx0XHRcdC8vIHVubmVjZXNzYXJ5IG1hdGggd2hpY2ggY291bGQgaW50cm9kdWNlIGZsb2F0aW5nIHBvaW50IGVycm9yLlxyXG5cdFx0XHRyZXR1cm4gYW5nbGU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gR01hdGguemVyb1RvVHdvUGkoYW5nbGUgKyBHTWF0aC5QSSkgLSBHTWF0aC5QSTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyB6ZXJvVG9Ud29QaShhbmdsZTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdGlmICghZGVmaW5lZChhbmdsZSkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYW5nbGUgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGFuZ2xlID49IDAgJiYgYW5nbGUgPD0gR01hdGguVFdPX1BJKSB7XHJcblx0XHRcdC8vIEVhcmx5IGV4aXQgaWYgdGhlIGlucHV0IGlzIGFscmVhZHkgaW5zaWRlIHRoZSByYW5nZS4gVGhpcyBhdm9pZHNcclxuXHRcdFx0Ly8gdW5uZWNlc3NhcnkgbWF0aCB3aGljaCBjb3VsZCBpbnRyb2R1Y2UgZmxvYXRpbmcgcG9pbnQgZXJyb3IuXHJcblx0XHRcdHJldHVybiBhbmdsZTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IG1vZCA9IEdNYXRoLm1vZChhbmdsZSwgR01hdGguVFdPX1BJKTtcclxuXHRcdGlmIChNYXRoLmFicyhtb2QpIDwgR01hdGguRVBTSUxPTjE0ICYmIE1hdGguYWJzKGFuZ2xlKSA+IEdNYXRoLkVQU0lMT04xNCkge1xyXG5cdFx0XHRyZXR1cm4gR01hdGguVFdPX1BJO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG1vZDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtb2QobTogbnVtYmVyLCBuOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKG0pKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm0gaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKG4pKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm4gaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKG4gPT09IDAuMCkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkaXZpc29yIGNhbm5vdCBiZSAwLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmIChHTWF0aC5zaWduKG0pID09PSBHTWF0aC5zaWduKG4pICYmIE1hdGguYWJzKG0pIDwgTWF0aC5hYnMobikpIHtcclxuXHRcdFx0Ly8gRWFybHkgZXhpdCBpZiB0aGUgaW5wdXQgZG9lcyBub3QgbmVlZCB0byBiZSBtb2RkZWQuIFRoaXMgYXZvaWRzXHJcblx0XHRcdC8vIHVubmVjZXNzYXJ5IG1hdGggd2hpY2ggY291bGQgaW50cm9kdWNlIGZsb2F0aW5nIHBvaW50IGVycm9yLlxyXG5cdFx0XHRyZXR1cm4gbTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gKChtICUgbikgKyBuKSAlIG47XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZXF1YWxzRXBzaWxvbihcclxuXHRcdGxlZnQ6IG51bWJlcixcclxuXHRcdHJpZ2h0OiBudW1iZXIsXHJcblx0XHRyZWxhdGl2ZUVwc2lsb246IG51bWJlcixcclxuXHRcdGFic29sdXRlRXBzaWxvbjogbnVtYmVyID0gcmVsYXRpdmVFcHNpbG9uXHJcblx0KTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIWRlZmluZWQobGVmdCkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibGVmdCBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIWRlZmluZWQocmlnaHQpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInJpZ2h0IGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZWxhdGl2ZUVwc2lsb24gPSBkZWZhdWx0VmFsdWUocmVsYXRpdmVFcHNpbG9uLCAwLjApO1xyXG5cdFx0YWJzb2x1dGVFcHNpbG9uID0gZGVmYXVsdFZhbHVlKGFic29sdXRlRXBzaWxvbiwgcmVsYXRpdmVFcHNpbG9uKTtcclxuXHRcdGNvbnN0IGFic0RpZmYgPSBNYXRoLmFicyhsZWZ0IC0gcmlnaHQpO1xyXG5cdFx0cmV0dXJuIGFic0RpZmYgPD0gYWJzb2x1dGVFcHNpbG9uIHx8IGFic0RpZmYgPD0gcmVsYXRpdmVFcHNpbG9uICogTWF0aC5tYXgoTWF0aC5hYnMobGVmdCksIE1hdGguYWJzKHJpZ2h0KSk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbGVzc1RoYW4obGVmdDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBhYnNvbHV0ZUVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIWRlZmluZWQobGVmdCkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZmlyc3QgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJpZ2h0KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzZWNvbmQgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKGFic29sdXRlRXBzaWxvbikpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYWJzb2x1dGVFcHNpbG9uIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBsZWZ0IC0gcmlnaHQgPCAtYWJzb2x1dGVFcHNpbG9uO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGxlc3NUaGFuT3JFcXVhbHMobGVmdDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBhYnNvbHV0ZUVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIWRlZmluZWQobGVmdCkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZmlyc3QgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJpZ2h0KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzZWNvbmQgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKGFic29sdXRlRXBzaWxvbikpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYWJzb2x1dGVFcHNpbG9uIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBsZWZ0IC0gcmlnaHQgPCBhYnNvbHV0ZUVwc2lsb247XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ3JlYXRlclRoYW4obGVmdDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBhYnNvbHV0ZUVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIWRlZmluZWQobGVmdCkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZmlyc3QgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJpZ2h0KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzZWNvbmQgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKGFic29sdXRlRXBzaWxvbikpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYWJzb2x1dGVFcHNpbG9uIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBsZWZ0IC0gcmlnaHQgPiBhYnNvbHV0ZUVwc2lsb247XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ3JlYXRlclRoYW5PckVxdWFscyhsZWZ0OiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIGFic29sdXRlRXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdGlmICghZGVmaW5lZChsZWZ0KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJmaXJzdCBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIWRlZmluZWQocmlnaHQpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInNlY29uZCBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIWRlZmluZWQoYWJzb2x1dGVFcHNpbG9uKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJhYnNvbHV0ZUVwc2lsb24gaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGxlZnQgLSByaWdodCA+IC1hYnNvbHV0ZUVwc2lsb247XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgaXNQb3dlck9mVHdvKG46IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0Ly8gPj5pbmNsdWRlU3RhcnQoJ2RlYnVnJywgcHJhZ21hcy5kZWJ1Zyk7XHJcblx0XHRpZiAodHlwZW9mIG4gIT09IFwibnVtYmVyXCIgfHwgbiA8IDAgfHwgbiA+IDQyOTQ5NjcyOTUpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoMl4zMiktMSBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHQvLyA+PmluY2x1ZGVFbmQoJ2RlYnVnJyk7XHJcblxyXG5cdFx0cmV0dXJuIG4gIT09IDAgJiYgKG4gJiAobiAtIDEpKSA9PT0gMDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBuZXh0UG93ZXJPZlR3byhuOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKHR5cGVvZiBuICE9PSBcIm51bWJlclwiIHx8IG4gPCAwIHx8IG4gPiAyMTQ3NDgzNjQ4KSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMl4zMSBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHQvLyBGcm9tIGh0dHA6Ly9ncmFwaGljcy5zdGFuZm9yZC5lZHUvfnNlYW5kZXIvYml0aGFja3MuaHRtbCNSb3VuZFVwUG93ZXJPZjJcclxuXHRcdC0tbjtcclxuXHRcdG4gfD0gbiA+PiAxO1xyXG5cdFx0biB8PSBuID4+IDI7XHJcblx0XHRuIHw9IG4gPj4gNDtcclxuXHRcdG4gfD0gbiA+PiA4O1xyXG5cdFx0biB8PSBuID4+IDE2O1xyXG5cdFx0KytuO1xyXG5cclxuXHRcdHJldHVybiBuO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHByZXZpb3VzUG93ZXJPZlR3byhuOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKHR5cGVvZiBuICE9PSBcIm51bWJlclwiIHx8IG4gPCAwIHx8IG4gPiA0Mjk0OTY3Mjk1KSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKDJeMzIpLTEgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdG4gfD0gbiA+PiAxO1xyXG5cdFx0biB8PSBuID4+IDI7XHJcblx0XHRuIHw9IG4gPj4gNDtcclxuXHRcdG4gfD0gbiA+PiA4O1xyXG5cdFx0biB8PSBuID4+IDE2O1xyXG5cdFx0biB8PSBuID4+IDMyO1xyXG5cclxuXHRcdC8vIFRoZSBwcmV2aW91cyBiaXR3aXNlIG9wZXJhdGlvbnMgaW1wbGljaXRseSBjb252ZXJ0IHRvIHNpZ25lZCAzMi1iaXQuIFVzZSBgPj4+YCB0byBjb252ZXJ0IHRvIHVuc2lnbmVkXHJcblx0XHRuID0gKG4gPj4+IDApIC0gKG4gPj4+IDEpO1xyXG5cclxuXHRcdHJldHVybiBuO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNsYW1wKHZhbHVlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdmFsdWUgPCBtaW4gPyBtaW4gOiB2YWx1ZSA+IG1heCA/IG1heCA6IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG5leHRSYW5kb21OdW1iZXIgPSBmdW5jdGlvbiAoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiByYW5kb21OdW1iZXJHZW5lcmF0b3IucmFuZG9tKCk7XHJcblx0fTtcclxuXHJcblx0c3RhdGljIHJhbmRvbUJldHdlZW4gPSBmdW5jdGlvbiAobWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBHTWF0aC5uZXh0UmFuZG9tTnVtYmVyKCkgKiAobWF4IC0gbWluKSArIG1pbjtcclxuXHR9O1xyXG5cclxuXHRzdGF0aWMgYWNvc0NsYW1wZWQgPSBmdW5jdGlvbiAodmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRpZiAoIWRlZmluZWQodmFsdWUpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInZhbHVlIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gTWF0aC5hY29zKEdNYXRoLmNsYW1wKHZhbHVlLCAtMS4wLCAxLjApKTtcclxuXHR9O1xyXG5cclxuXHRzdGF0aWMgYXNpbkNsYW1wZWQgPSBmdW5jdGlvbiAodmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRpZiAoIWRlZmluZWQodmFsdWUpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInZhbHVlIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gTWF0aC5hc2luKEdNYXRoLmNsYW1wKHZhbHVlLCAtMS4wLCAxLjApKTtcclxuXHR9O1xyXG5cclxuXHRzdGF0aWMgY2hvcmRMZW5ndGggPSBmdW5jdGlvbiAoYW5nbGU6IG51bWJlciwgcmFkaXVzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGFuZ2xlKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJhbmdsZSBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIWRlZmluZWQocmFkaXVzKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJyYWRpdXMgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAyLjAgKiByYWRpdXMgKiBNYXRoLnNpbihhbmdsZSAqIDAuNSk7XHJcblx0fTtcclxuXHJcblx0c3RhdGljIGxvZ0Jhc2UgPSBmdW5jdGlvbiAobnVtYmVyOiBudW1iZXIsIGJhc2U6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRpZiAoIWRlZmluZWQobnVtYmVyKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJudW1iZXIgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKGJhc2UpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImJhc2UgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBNYXRoLmxvZyhudW1iZXIpIC8gTWF0aC5sb2coYmFzZSk7XHJcblx0fTtcclxuXHJcblx0c3RhdGljIGNicnQgPSBkZWZhdWx0VmFsdWUoTWF0aC5jYnJ0LCBmdW5jdGlvbiBjYnJ0KG51bWJlcikge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gTWF0aC5wb3coTWF0aC5hYnMobnVtYmVyKSwgMS4wIC8gMy4wKTtcclxuXHRcdHJldHVybiBudW1iZXIgPCAwLjAgPyAtcmVzdWx0IDogcmVzdWx0O1xyXG5cdH0pO1xyXG5cdHN0YXRpYyBsb2cyID0gZGVmYXVsdFZhbHVlKE1hdGgubG9nMiwgZnVuY3Rpb24gbG9nMihudW1iZXIpIHtcclxuXHRcdHJldHVybiBNYXRoLmxvZyhudW1iZXIpICogTWF0aC5MT0cyRTtcclxuXHR9KTtcclxuXHJcblx0LyoqXHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHRzdGF0aWMgZm9nKGRpc3RhbmNlVG9DYW1lcmE6IG51bWJlciwgZGVuc2l0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdGNvbnN0IHNjYWxhciA9IGRpc3RhbmNlVG9DYW1lcmEgKiBkZW5zaXR5O1xyXG5cdFx0cmV0dXJuIDEuMCAtIE1hdGguZXhwKC0oc2NhbGFyICogc2NhbGFyKSk7XHJcblx0fVxyXG59XHJcbmNvbnN0IHJhbmRvbU51bWJlckdlbmVyYXRvciA9IG5ldyBNZXJzZW5uZVR3aXN0ZXIoKTtcclxuY29uc3QgZmFjdG9yaWFscyA9IFsxXTtcclxuZXhwb3J0IGRlZmF1bHQgR01hdGg7XHJcbiIsImltcG9ydCB7IEF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XHJcbmltcG9ydCBkZWZpbmVkIGZyb20gXCIuLi91dGlscy9kZWZpbmVkXCI7XHJcbmltcG9ydCBHTWF0aCBmcm9tIFwiLi9NYXRoXCI7XHJcbmltcG9ydCBNYXRyaXgzIGZyb20gXCIuL01hdHJpeDNcIjtcclxuLyoqXHJcbiAqIEEgMkQgQ2FydGVzaWFuIHBvaW50LlxyXG4gKiBAYWxpYXMgVmVjdG9yMlxyXG4gKiBAY29uc3RydWN0b3JcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IFt4PTAuMF0gVGhlIFggY29tcG9uZW50LlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3k9MC4wXSBUaGUgWSBjb21wb25lbnQuXHJcbiAqXHJcbiAqL1xyXG5jbGFzcyBWZWN0b3IyIHtcclxuXHRwdWJsaWMgc3RhdGljIFpFUk8gPSBPYmplY3QuZnJlZXplKG5ldyBWZWN0b3IyKDAuMCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgT05FID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yMigxLjAsIDEuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIFVOSVRfWCA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjIoMS4wLCAwLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBVTklUX1kgPSBPYmplY3QuZnJlZXplKG5ldyBWZWN0b3IyKDAuMCwgMS4wKSk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyB4OiBudW1iZXIgPSAwLjAsIHB1YmxpYyB5OiBudW1iZXIgPSAwLjApIHtcclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdH1cclxuXHRzZXQoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBWZWN0b3IyIHtcclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdHRvQXJyYXkoKSB7XHJcblx0XHRyZXR1cm4gW3RoaXMueCwgdGhpcy55XTtcclxuXHR9XHJcblxyXG5cdGNsb25lKHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0cmV0dXJuIFZlY3RvcjIuY2xvbmUodGhpcywgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdGVxdWFscyhyaWdodDogVmVjdG9yMik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIFZlY3RvcjIuZXF1YWxzKHRoaXMsIHJpZ2h0KTtcclxuXHR9XHJcblx0ZXF1YWxzRXBzaWxvbihyaWdodDogVmVjdG9yMiwgcmVsYXRpdmVFcHNpbG9uID0gMCwgYWJzb2x1dGVFcHNpbG9uID0gMCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIFZlY3RvcjIuZXF1YWxzRXBzaWxvbih0aGlzLCByaWdodCwgcmVsYXRpdmVFcHNpbG9uLCBhYnNvbHV0ZUVwc2lsb24pO1xyXG5cdH1cclxuXHJcblx0dG9TdHJpbmcoKSB7XHJcblx0XHRyZXR1cm4gYCgke3RoaXMueH0sICR7dGhpcy55fSlgO1xyXG5cdH1cclxuXHRmcm9tQnVmZmVyQXR0cmlidXRlKGF0dHJpYnV0ZTogQXR0cmlidXRlLCBpbmRleDogbnVtYmVyKTogVmVjdG9yMiB7XHJcblx0XHR0aGlzLnggPSBhdHRyaWJ1dGUuZ2V0WChpbmRleCk7XHJcblx0XHR0aGlzLnkgPSBhdHRyaWJ1dGUuZ2V0WShpbmRleCk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0YXBwbHlNYXRyaXgzKG1hdHJpeDM6IE1hdHJpeDMpOiBWZWN0b3IyIHtcclxuXHRcdGNvbnN0IHggPSB0aGlzLngsXHJcblx0XHRcdHkgPSB0aGlzLnk7XHJcblx0XHR0aGlzLnggPSBtYXRyaXgzWzBdICogeCArIG1hdHJpeDNbM10gKiB5ICsgbWF0cml4M1s2XTtcclxuXHRcdHRoaXMueSA9IG1hdHJpeDNbMV0gKiB4ICsgbWF0cml4M1s0XSAqIHkgKyBtYXRyaXgzWzddO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbUVsZW1lbnRzKHg6IG51bWJlciwgeTogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yMih4LCB5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNsb25lKGNhcnRlc2lhbjogVmVjdG9yMiwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRpZiAoIWRlZmluZWQoY2FydGVzaWFuKSkge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBWZWN0b3IyKGNhcnRlc2lhbi54LCBjYXJ0ZXNpYW4ueSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0LnggPSBjYXJ0ZXNpYW4ueDtcclxuXHRcdHJlc3VsdC55ID0gY2FydGVzaWFuLnk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1heGltdW1Db21wb25lbnQoY2FydGVzaWFuOiBWZWN0b3IyKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBNYXRoLm1heChjYXJ0ZXNpYW4ueCwgY2FydGVzaWFuLnkpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1pbmltdW1Db21wb25lbnQoY2FydGVzaWFuOiBWZWN0b3IyKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBNYXRoLm1pbihjYXJ0ZXNpYW4ueCwgY2FydGVzaWFuLnkpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1pbmltdW1CeUNvbXBvbmVudChmaXJzdDogVmVjdG9yMiwgc2Vjb25kOiBWZWN0b3IyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdHJlc3VsdC54ID0gTWF0aC5taW4oZmlyc3QueCwgc2Vjb25kLngpO1xyXG5cdFx0cmVzdWx0LnkgPSBNYXRoLm1pbihmaXJzdC55LCBzZWNvbmQueSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtYXhpbXVtQnlDb21wb25lbnQoZmlyc3Q6IFZlY3RvcjIsIHNlY29uZDogVmVjdG9yMiwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRyZXN1bHQueCA9IE1hdGgubWF4KGZpcnN0LngsIHNlY29uZC54KTtcclxuXHRcdHJlc3VsdC55ID0gTWF0aC5tYXgoZmlyc3QueSwgc2Vjb25kLnkpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjbGFtcCh2YWx1ZTogVmVjdG9yMiwgbWluOiBWZWN0b3IyLCBtYXg6IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0Y29uc3QgeCA9IEdNYXRoLmNsYW1wKHZhbHVlLngsIG1pbi54LCBtYXgueCk7XHJcblx0XHRjb25zdCB5ID0gR01hdGguY2xhbXAodmFsdWUueSwgbWluLnksIG1heC55KTtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtYWduaXR1ZGVTcXVhcmVkKGNhcnRlc2lhbjogVmVjdG9yMik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gY2FydGVzaWFuLnggKiBjYXJ0ZXNpYW4ueCArIGNhcnRlc2lhbi55ICogY2FydGVzaWFuLnk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWFnbml0dWRlKGNhcnRlc2lhbjogVmVjdG9yMik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KFZlY3RvcjIubWFnbml0dWRlU3F1YXJlZChjYXJ0ZXNpYW4pKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXN0YW5jZShsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMik6IG51bWJlciB7XHJcblx0XHRWZWN0b3IyLnN1YnRyYWN0KGxlZnQsIHJpZ2h0LCBkaXN0YW5jZVNjcmF0Y2gpO1xyXG5cdFx0cmV0dXJuIFZlY3RvcjIubWFnbml0dWRlKGRpc3RhbmNlU2NyYXRjaCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZGlzdGFuY2VTcXVhcmVkKGxlZnQ6IFZlY3RvcjIsIHJpZ2h0OiBWZWN0b3IyKTogbnVtYmVyIHtcclxuXHRcdFZlY3RvcjIuc3VidHJhY3QobGVmdCwgcmlnaHQsIGRpc3RhbmNlU2NyYXRjaCk7XHJcblx0XHRyZXR1cm4gVmVjdG9yMi5tYWduaXR1ZGVTcXVhcmVkKGRpc3RhbmNlU2NyYXRjaCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbm9ybWFsaXplKGNhcnRlc2lhbjogVmVjdG9yMiwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRjb25zdCBtYWduaXR1ZGUgPSBWZWN0b3IyLm1hZ25pdHVkZShjYXJ0ZXNpYW4pO1xyXG5cclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLnggLyBtYWduaXR1ZGU7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55IC8gbWFnbml0dWRlO1xyXG5cclxuXHRcdC8vID4+aW5jbHVkZVN0YXJ0KCdkZWJ1ZycsIHByYWdtYXMuZGVidWcpO1xyXG5cdFx0aWYgKGlzTmFOKHJlc3VsdC54KSB8fCBpc05hTihyZXN1bHQueSkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm9ybWFsaXplZCByZXN1bHQgaXMgbm90IGEgbnVtYmVyXCIpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gPj5pbmNsdWRlRW5kKCdkZWJ1ZycpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZG90KGxlZnQ6IFZlY3RvcjIsIHJpZ2h0OiBWZWN0b3IyKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBsZWZ0LnggKiByaWdodC54ICsgbGVmdC55ICogcmlnaHQueTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjcm9zcyhsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gbGVmdC54ICogcmlnaHQueSAtIGxlZnQueSAqIHJpZ2h0Lng7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbXVsdGlwbHlDb21wb25lbnRzKGxlZnQ6IFZlY3RvcjIsIHJpZ2h0OiBWZWN0b3IyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdHJlc3VsdC54ID0gbGVmdC54ICogcmlnaHQueDtcclxuXHRcdHJlc3VsdC55ID0gbGVmdC55ICogcmlnaHQueTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZGl2aWRlQ29tcG9uZW50cyhsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMiwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCAvIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSAvIHJpZ2h0Lnk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFkZChsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMiwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCArIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSArIHJpZ2h0Lnk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHN1YnRyYWN0KGxlZnQ6IFZlY3RvcjIsIHJpZ2h0OiBWZWN0b3IyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdHJlc3VsdC54ID0gbGVmdC54IC0gcmlnaHQueDtcclxuXHRcdHJlc3VsdC55ID0gbGVmdC55IC0gcmlnaHQueTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbXVsdGlwbHlCeVNjYWxhcihjYXJ0ZXNpYW46IFZlY3RvcjIsIHNjYWxhcjogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLnggKiBzY2FsYXI7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55ICogc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXZpZGVCeVNjYWxhcihjYXJ0ZXNpYW46IFZlY3RvcjIsIHNjYWxhcjogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLnggLyBzY2FsYXI7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55IC8gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBuZWdhdGUoY2FydGVzaWFuOiBWZWN0b3IyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdHJlc3VsdC54ID0gLWNhcnRlc2lhbi54O1xyXG5cdFx0cmVzdWx0LnkgPSAtY2FydGVzaWFuLnk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFicyhjYXJ0ZXNpYW46IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0cmVzdWx0LnggPSBNYXRoLmFicyhjYXJ0ZXNpYW4ueCk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGguYWJzKGNhcnRlc2lhbi55KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbGVycChzdGFydDogVmVjdG9yMiwgZW5kOiBWZWN0b3IyLCB0OiBudW1iZXIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0VmVjdG9yMi5tdWx0aXBseUJ5U2NhbGFyKGVuZCwgdCwgbGVycFNjcmF0Y2gpO1xyXG5cdFx0cmVzdWx0ID0gVmVjdG9yMi5tdWx0aXBseUJ5U2NhbGFyKHN0YXJ0LCAxLjAgLSB0LCByZXN1bHQpO1xyXG5cdFx0cmV0dXJuIFZlY3RvcjIuYWRkKGxlcnBTY3JhdGNoLCByZXN1bHQsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYW5nbGVCZXR3ZWVuKGxlZnQ6IFZlY3RvcjIsIHJpZ2h0OiBWZWN0b3IyKTogbnVtYmVyIHtcclxuXHRcdFZlY3RvcjIubm9ybWFsaXplKGxlZnQsIGFuZ2xlQmV0d2VlblNjcmF0Y2gpO1xyXG5cdFx0VmVjdG9yMi5ub3JtYWxpemUocmlnaHQsIGFuZ2xlQmV0d2VlblNjcmF0Y2gyKTtcclxuXHRcdHJldHVybiBHTWF0aC5hY29zQ2xhbXBlZChWZWN0b3IyLmRvdChhbmdsZUJldHdlZW5TY3JhdGNoLCBhbmdsZUJldHdlZW5TY3JhdGNoMikpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1vc3RPcnRob2dvbmFsQXhpcyhjYXJ0ZXNpYW46IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0Y29uc3QgZiA9IFZlY3RvcjIubm9ybWFsaXplKGNhcnRlc2lhbiwgbW9zdE9ydGhvZ29uYWxBeGlzU2NyYXRjaCk7XHJcblx0XHRWZWN0b3IyLmFicyhmLCBmKTtcclxuXHJcblx0XHRpZiAoZi54IDw9IGYueSkge1xyXG5cdFx0XHRyZXN1bHQgPSBWZWN0b3IyLmNsb25lKFZlY3RvcjIuVU5JVF9YLCByZXN1bHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmVzdWx0ID0gVmVjdG9yMi5jbG9uZShWZWN0b3IyLlVOSVRfWSwgcmVzdWx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIGxlZnQgPT09IHJpZ2h0IHx8IChkZWZpbmVkKGxlZnQpICYmIGRlZmluZWQocmlnaHQpICYmIGxlZnQueCA9PT0gcmlnaHQueCAmJiBsZWZ0LnkgPT09IHJpZ2h0LnkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHRzdGF0aWMgZXF1YWxzQXJyYXkoY2FydGVzaWFuOiBWZWN0b3IyLCBhcnJheTogbnVtYmVyW10sIG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gY2FydGVzaWFuLnggPT09IGFycmF5W29mZnNldF0gJiYgY2FydGVzaWFuLnkgPT09IGFycmF5W29mZnNldCArIDFdO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFsc0Vwc2lsb24obGVmdDogVmVjdG9yMiwgcmlnaHQ6IFZlY3RvcjIsIHJlbGF0aXZlRXBzaWxvbiA9IDAsIGFic29sdXRlRXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGxlZnQgPT09IHJpZ2h0IHx8XHJcblx0XHRcdChkZWZpbmVkKGxlZnQpICYmXHJcblx0XHRcdFx0ZGVmaW5lZChyaWdodCkgJiZcclxuXHRcdFx0XHRHTWF0aC5lcXVhbHNFcHNpbG9uKGxlZnQueCwgcmlnaHQueCwgcmVsYXRpdmVFcHNpbG9uLCBhYnNvbHV0ZUVwc2lsb24pICYmXHJcblx0XHRcdFx0R01hdGguZXF1YWxzRXBzaWxvbihsZWZ0LnksIHJpZ2h0LnksIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKSlcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbmNvbnN0IGRpc3RhbmNlU2NyYXRjaCA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IGxlcnBTY3JhdGNoID0gbmV3IFZlY3RvcjIoKTtcclxuY29uc3QgYW5nbGVCZXR3ZWVuU2NyYXRjaCA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IGFuZ2xlQmV0d2VlblNjcmF0Y2gyID0gbmV3IFZlY3RvcjIoKTtcclxuY29uc3QgbW9zdE9ydGhvZ29uYWxBeGlzU2NyYXRjaCA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBWZWN0b3IyO1xyXG4iLCJpbXBvcnQgeyBBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vcmVuZGVyL0F0dHJpYnV0ZVwiO1xyXG5pbXBvcnQgZGVmaW5lZCBmcm9tIFwiLi4vdXRpbHMvZGVmaW5lZFwiO1xyXG5pbXBvcnQgR01hdGggZnJvbSBcIi4vTWF0aFwiO1xyXG5pbXBvcnQgTWF0cml4MyBmcm9tIFwiLi9NYXRyaXgzXCI7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gXCIuL01hdHJpeDRcIjtcclxuaW1wb3J0IHsgUXVhdGVybmlvbiB9IGZyb20gXCIuL1F1YXRlcm5pb25cIjtcclxuaW1wb3J0IHsgU3BoZXJpY2FsIH0gZnJvbSBcIi4vU3BoZXJpY2FsXCI7XHJcbmltcG9ydCBWZWN0b3I0IGZyb20gXCIuL1ZlY3RvcjRcIjtcclxuY2xhc3MgVmVjdG9yMyB7XHJcblx0cHVibGljIHN0YXRpYyBaRVJPID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yMygwLjAsIDAuMCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgT05FID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yMygxLjAsIDEuMCwgMS4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgVU5JVF9YID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yMygxLjAsIDAuMCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgVU5JVF9ZID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yMygwLjAsIDEuMCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgVU5JVF9aID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yMygwLjAsIDAuMCwgMS4wKSk7XHJcblx0eDogbnVtYmVyO1xyXG5cdHk6IG51bWJlcjtcclxuXHR6OiBudW1iZXI7XHJcblxyXG5cdGNvbnN0cnVjdG9yKHggPSAwLCB5ID0gMCwgeiA9IDApIHtcclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0dGhpcy56ID0gejtcclxuXHR9XHJcblx0c2V0KHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIpOiBWZWN0b3IzIHtcclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0dGhpcy56ID0gejtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHR0b0FycmF5KCk6IG51bWJlcltdIHtcclxuXHRcdHJldHVybiBbdGhpcy54LCB0aGlzLnksIHRoaXMuel07XHJcblx0fVxyXG5cclxuXHRjb3B5KHY6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHRcdHRoaXMueiA9IHYuejtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRsZXJwKGVuZDogVmVjdG9yMywgdDogbnVtYmVyKTogVmVjdG9yMyB7XHJcblx0XHRWZWN0b3IzLmxlcnAodGhpcywgZW5kLCB0LCB0aGlzKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRhZGQodjogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0VmVjdG9yMy5hZGQodGhpcywgdiwgdGhpcyk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0YWRkU2NhbGVkVmVjdG9yKHY6IFZlY3RvcjMsIHM6IG51bWJlcik6IFZlY3RvcjMge1xyXG5cdFx0dGhpcy54ICs9IHYueCAqIHM7XHJcblx0XHR0aGlzLnkgKz0gdi55ICogcztcclxuXHRcdHRoaXMueiArPSB2LnogKiBzO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdHN1YnRyYWN0KHY6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdFZlY3RvcjMuc3VidHJhY3QodGhpcywgdiwgdGhpcyk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0YXBwbHlRdWF0ZXJuaW9uKHE6IFF1YXRlcm5pb24pOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IHggPSB0aGlzLngsXHJcblx0XHRcdHkgPSB0aGlzLnksXHJcblx0XHRcdHogPSB0aGlzLno7XHJcblx0XHRjb25zdCBxeCA9IHEueCxcclxuXHRcdFx0cXkgPSBxLnksXHJcblx0XHRcdHF6ID0gcS56LFxyXG5cdFx0XHRxdyA9IHEudztcclxuXHJcblx0XHQvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY3RvclxyXG5cclxuXHRcdGNvbnN0IGl4ID0gcXcgKiB4ICsgcXkgKiB6IC0gcXogKiB5O1xyXG5cdFx0Y29uc3QgaXkgPSBxdyAqIHkgKyBxeiAqIHggLSBxeCAqIHo7XHJcblx0XHRjb25zdCBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeDtcclxuXHRcdGNvbnN0IGl3ID0gLXF4ICogeCAtIHF5ICogeSAtIHF6ICogejtcclxuXHJcblx0XHQvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XHJcblxyXG5cdFx0dGhpcy54ID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcclxuXHRcdHRoaXMueSA9IGl5ICogcXcgKyBpdyAqIC1xeSArIGl6ICogLXF4IC0gaXggKiAtcXo7XHJcblx0XHR0aGlzLnogPSBpeiAqIHF3ICsgaXcgKiAtcXogKyBpeCAqIC1xeSAtIGl5ICogLXF4O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRzZXRGcm9tTWF0cml4Q29sdW1uKG06IE1hdHJpeDMgfCBNYXRyaXg0LCBpbmRleDogbnVtYmVyKTogVmVjdG9yMyB7XHJcblx0XHRyZXR1cm4gdGhpcy5mcm9tQXJyYXkobSwgaW5kZXggKiA0KTtcclxuXHR9XHJcblx0ZnJvbUFycmF5KGFycmF5OiBNYXRyaXgzIHwgTWF0cml4NCwgb2Zmc2V0ID0gMCk6IFZlY3RvcjMge1xyXG5cdFx0dGhpcy54ID0gYXJyYXlbb2Zmc2V0XTtcclxuXHRcdHRoaXMueSA9IGFycmF5W29mZnNldCArIDFdO1xyXG5cdFx0dGhpcy56ID0gYXJyYXlbb2Zmc2V0ICsgMl07XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRtdWx0aXBseUJ5U2NhbGFyKHNjYWxlOiBudW1iZXIpOiBWZWN0b3IzIHtcclxuXHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcih0aGlzLCBzY2FsZSwgdGhpcyk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGNsb25lKCk6IFZlY3RvcjMge1xyXG5cdFx0cmV0dXJuIFZlY3RvcjMuY2xvbmUodGhpcywgbmV3IFZlY3RvcjMoKSk7XHJcblx0fVxyXG5cdGxlbmd0aCgpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIE1hdGguc3FydCh0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKyB0aGlzLnogKiB0aGlzLnopO1xyXG5cdH1cclxuXHRhcHBseU1hdHJpeDQobWF0cml4OiBNYXRyaXg0KTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCB4ID0gdGhpcy54LFxyXG5cdFx0XHR5ID0gdGhpcy55LFxyXG5cdFx0XHR6ID0gdGhpcy56O1xyXG5cdFx0Y29uc3QgZSA9IG1hdHJpeDtcclxuXHRcdGNvbnN0IHcgPSAxIC8gKGVbM10gKiB4ICsgZVs3XSAqIHkgKyBlWzExXSAqIHogKyBlWzE1XSk7XHJcblx0XHR0aGlzLnggPSAoZVswXSAqIHggKyBlWzRdICogeSArIGVbOF0gKiB6ICsgZVsxMl0pICogdztcclxuXHRcdHRoaXMueSA9IChlWzFdICogeCArIGVbNV0gKiB5ICsgZVs5XSAqIHogKyBlWzEzXSkgKiB3O1xyXG5cdFx0dGhpcy56ID0gKGVbMl0gKiB4ICsgZVs2XSAqIHkgKyBlWzEwXSAqIHogKyBlWzE0XSkgKiB3O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdGFwcGx5TWF0cml4MyhtYXRyaXg6IE1hdHJpeDMpOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IHggPSB0aGlzLngsXHJcblx0XHRcdHkgPSB0aGlzLnksXHJcblx0XHRcdHogPSB0aGlzLno7XHJcblx0XHR0aGlzLnggPSB4ICogbWF0cml4WzBdICsgeSAqIG1hdHJpeFszXSArIHogKiBtYXRyaXhbNl07XHJcblx0XHR0aGlzLnkgPSB4ICogbWF0cml4WzFdICsgeSAqIG1hdHJpeFs0XSArIHogKiBtYXRyaXhbN107XHJcblx0XHR0aGlzLnogPSB4ICogbWF0cml4WzJdICsgeSAqIG1hdHJpeFs1XSArIHogKiBtYXRyaXhbOF07XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0dHJhbnNmb3JtRGlyZWN0aW9uKG1hdHJpeDogTWF0cml4MyB8IE1hdHJpeDQpOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IHggPSB0aGlzLngsXHJcblx0XHRcdHkgPSB0aGlzLnksXHJcblx0XHRcdHogPSB0aGlzLno7XHJcblx0XHRjb25zdCBlID0gbWF0cml4O1xyXG5cdFx0dGhpcy54ID0gZVswXSAqIHggKyBlWzRdICogeSArIGVbOF0gKiB6O1xyXG5cdFx0dGhpcy55ID0gZVsxXSAqIHggKyBlWzVdICogeSArIGVbOV0gKiB6O1xyXG5cdFx0dGhpcy56ID0gZVsyXSAqIHggKyBlWzZdICogeSArIGVbMTBdICogejtcclxuXHRcdHJldHVybiB0aGlzLm5vcm1hbGl6ZSgpO1xyXG5cdH1cclxuXHJcblx0c2V0RnJvbU1hdHJpeFBvc2l0aW9uKG1hdHJpeDogTWF0cml4NCkge1xyXG5cdFx0Y29uc3QgZSA9IG1hdHJpeDtcclxuXHJcblx0XHR0aGlzLnggPSBlWzEyXTtcclxuXHRcdHRoaXMueSA9IGVbMTNdO1xyXG5cdFx0dGhpcy56ID0gZVsxNF07XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRub3JtYWxpemUoKTogVmVjdG9yMyB7XHJcblx0XHRWZWN0b3IzLm5vcm1hbGl6ZSh0aGlzLCB0aGlzKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0ZXF1YWxzKHJpZ2h0OiBWZWN0b3IzKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gVmVjdG9yMy5lcXVhbHModGhpcywgcmlnaHQpO1xyXG5cdH1cclxuXHJcblx0ZXF1YWxzRXBzaWxvbihyaWdodDogVmVjdG9yMywgcmVsYXRpdmVFcHNpbG9uID0gMCwgYWJzb2x1dGVFcHNpbG9uID0gMCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIFZlY3RvcjMuZXF1YWxzRXBzaWxvbih0aGlzLCByaWdodCwgcmVsYXRpdmVFcHNpbG9uLCBhYnNvbHV0ZUVwc2lsb24pO1xyXG5cdH1cclxuXHJcblx0dG9TdHJpbmcoKSB7XHJcblx0XHRyZXR1cm4gYCgke3RoaXMueH0sICR7dGhpcy55fSwgJHt0aGlzLnp9KWA7XHJcblx0fVxyXG5cdGZyb21CdWZmZXJBdHRyaWJ1dGUoYXR0cmlidXRlOiBBdHRyaWJ1dGUsIGluZGV4OiBudW1iZXIpOiBWZWN0b3IzIHtcclxuXHRcdHRoaXMueCA9IGF0dHJpYnV0ZS5nZXRYKGluZGV4KTtcclxuXHRcdHRoaXMueSA9IGF0dHJpYnV0ZS5nZXRZKGluZGV4KTtcclxuXHRcdHRoaXMueiA9IGF0dHJpYnV0ZS5nZXRaKGluZGV4KTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRzdGF0aWMgZnJvbVZlY3RvcjQodmVjNDogVmVjdG9yNCwgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRyZXN1bHQueCA9IHZlYzQueDtcclxuXHRcdHJlc3VsdC55ID0gdmVjNC55O1xyXG5cdFx0cmVzdWx0LnogPSB2ZWM0Lno7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21TcGhlcmljYWwoc3BoZXJpY2FsOiBTcGhlcmljYWwsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmVzdWx0ID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHsgcGhpLCByYWRpdXMsIHRoZXRhIH0gPSBzcGhlcmljYWw7XHJcblx0XHRjb25zdCBzaW5QaGlSYWRpdXMgPSBNYXRoLnNpbihwaGkpICogcmFkaXVzO1xyXG5cdFx0cmVzdWx0LnggPSBzaW5QaGlSYWRpdXMgKiBNYXRoLnNpbih0aGV0YSk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGguY29zKHBoaSkgKiByYWRpdXM7XHJcblx0XHRyZXN1bHQueiA9IHNpblBoaVJhZGl1cyAqIE1hdGguY29zKHRoZXRhKTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbUVsZW1lbnRzKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBWZWN0b3IzKHgsIHksIHopO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdC54ID0geDtcclxuXHRcdHJlc3VsdC55ID0geTtcclxuXHRcdHJlc3VsdC56ID0gejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY2xvbmUoY2FydGVzaWFuOiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpKTogVmVjdG9yMyB7XHJcblx0XHRpZiAoIWRlZmluZWQoY2FydGVzaWFuKSkge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBWZWN0b3IzKGNhcnRlc2lhbi54LCBjYXJ0ZXNpYW4ueSwgY2FydGVzaWFuLnopO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLng7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55O1xyXG5cdFx0cmVzdWx0LnogPSBjYXJ0ZXNpYW4uejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWF4aW11bUNvbXBvbmVudChjYXJ0ZXNpYW46IFZlY3RvcjMpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIE1hdGgubWF4KGNhcnRlc2lhbi54LCBjYXJ0ZXNpYW4ueSwgY2FydGVzaWFuLnopO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1pbmltdW1Db21wb25lbnQoY2FydGVzaWFuOiBWZWN0b3IzKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBNYXRoLm1pbihjYXJ0ZXNpYW4ueCwgY2FydGVzaWFuLnksIGNhcnRlc2lhbi56KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtaW5pbXVtQnlDb21wb25lbnQoZmlyc3Q6IFZlY3RvcjMsIHNlY29uZDogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRyZXN1bHQueCA9IE1hdGgubWluKGZpcnN0LngsIHNlY29uZC54KTtcclxuXHRcdHJlc3VsdC55ID0gTWF0aC5taW4oZmlyc3QueSwgc2Vjb25kLnkpO1xyXG5cdFx0cmVzdWx0LnogPSBNYXRoLm1pbihmaXJzdC56LCBzZWNvbmQueik7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtYXhpbXVtQnlDb21wb25lbnQoZmlyc3Q6IFZlY3RvcjMsIHNlY29uZDogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRyZXN1bHQueCA9IE1hdGgubWF4KGZpcnN0LngsIHNlY29uZC54KTtcclxuXHRcdHJlc3VsdC55ID0gTWF0aC5tYXgoZmlyc3QueSwgc2Vjb25kLnkpO1xyXG5cdFx0cmVzdWx0LnogPSBNYXRoLm1heChmaXJzdC56LCBzZWNvbmQueik7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNsYW1wKHZhbHVlOiBWZWN0b3IzLCBtaW46IFZlY3RvcjMsIG1heDogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCB4ID0gR01hdGguY2xhbXAodmFsdWUueCwgbWluLngsIG1heC54KTtcclxuXHRcdGNvbnN0IHkgPSBHTWF0aC5jbGFtcCh2YWx1ZS55LCBtaW4ueSwgbWF4LnkpO1xyXG5cdFx0Y29uc3QgeiA9IEdNYXRoLmNsYW1wKHZhbHVlLnosIG1pbi56LCBtYXgueik7XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmVzdWx0LnogPSB6O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWFnbml0dWRlU3F1YXJlZChjYXJ0ZXNpYW46IFZlY3RvcjMpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIGNhcnRlc2lhbi54ICogY2FydGVzaWFuLnggKyBjYXJ0ZXNpYW4ueSAqIGNhcnRlc2lhbi55ICsgY2FydGVzaWFuLnogKiBjYXJ0ZXNpYW4uejtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtYWduaXR1ZGUoY2FydGVzaWFuOiBWZWN0b3IzKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBNYXRoLnNxcnQoVmVjdG9yMy5tYWduaXR1ZGVTcXVhcmVkKGNhcnRlc2lhbikpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRpc3RhbmNlKGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzKTogbnVtYmVyIHtcclxuXHRcdFZlY3RvcjMuc3VidHJhY3QobGVmdCwgcmlnaHQsIGRpc3RhbmNlU2NyYXRjaCk7XHJcblx0XHRyZXR1cm4gVmVjdG9yMy5tYWduaXR1ZGUoZGlzdGFuY2VTY3JhdGNoKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXN0YW5jZVNxdWFyZWQobGVmdDogVmVjdG9yMywgcmlnaHQ6IFZlY3RvcjMpOiBudW1iZXIge1xyXG5cdFx0VmVjdG9yMy5zdWJ0cmFjdChsZWZ0LCByaWdodCwgZGlzdGFuY2VTY3JhdGNoKTtcclxuXHRcdHJldHVybiBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoZGlzdGFuY2VTY3JhdGNoKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBub3JtYWxpemUoY2FydGVzaWFuOiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IG1hZ25pdHVkZSA9IFZlY3RvcjMubWFnbml0dWRlKGNhcnRlc2lhbik7XHJcblxyXG5cdFx0cmVzdWx0LnggPSBjYXJ0ZXNpYW4ueCAvIG1hZ25pdHVkZTtcclxuXHRcdHJlc3VsdC55ID0gY2FydGVzaWFuLnkgLyBtYWduaXR1ZGU7XHJcblx0XHRyZXN1bHQueiA9IGNhcnRlc2lhbi56IC8gbWFnbml0dWRlO1xyXG5cclxuXHRcdGlmIChpc05hTihyZXN1bHQueCkgfHwgaXNOYU4ocmVzdWx0LnkpIHx8IGlzTmFOKHJlc3VsdC56KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub3JtYWxpemVkIHJlc3VsdCBpcyBub3QgYSBudW1iZXJcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkb3QobGVmdDogVmVjdG9yMywgcmlnaHQ6IFZlY3RvcjMpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIGxlZnQueCAqIHJpZ2h0LnggKyBsZWZ0LnkgKiByaWdodC55ICsgbGVmdC56ICogcmlnaHQuejtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUNvbXBvbmVudHMobGVmdDogVmVjdG9yMywgcmlnaHQ6IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSBsZWZ0LnggKiByaWdodC54O1xyXG5cdFx0cmVzdWx0LnkgPSBsZWZ0LnkgKiByaWdodC55O1xyXG5cdFx0cmVzdWx0LnogPSBsZWZ0LnogKiByaWdodC56O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXZpZGVDb21wb25lbnRzKGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpIHtcclxuXHRcdHJlc3VsdC54ID0gbGVmdC54IC8gcmlnaHQueDtcclxuXHRcdHJlc3VsdC55ID0gbGVmdC55IC8gcmlnaHQueTtcclxuXHRcdHJlc3VsdC56ID0gbGVmdC56IC8gcmlnaHQuejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYWRkKGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHJlc3VsdC54ID0gbGVmdC54ICsgcmlnaHQueDtcclxuXHRcdHJlc3VsdC55ID0gbGVmdC55ICsgcmlnaHQueTtcclxuXHRcdHJlc3VsdC56ID0gbGVmdC56ICsgcmlnaHQuejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc3VidHJhY3QobGVmdDogVmVjdG9yMywgcmlnaHQ6IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSBsZWZ0LnggLSByaWdodC54O1xyXG5cdFx0cmVzdWx0LnkgPSBsZWZ0LnkgLSByaWdodC55O1xyXG5cdFx0cmVzdWx0LnogPSBsZWZ0LnogLSByaWdodC56O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5U2NhbGFyKGNhcnRlc2lhbjogVmVjdG9yMywgc2NhbGFyOiBudW1iZXIsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSBjYXJ0ZXNpYW4ueCAqIHNjYWxhcjtcclxuXHRcdHJlc3VsdC55ID0gY2FydGVzaWFuLnkgKiBzY2FsYXI7XHJcblx0XHRyZXN1bHQueiA9IGNhcnRlc2lhbi56ICogc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXZpZGVCeVNjYWxhcihjYXJ0ZXNpYW46IFZlY3RvcjMsIHNjYWxhcjogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLnggLyBzY2FsYXI7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55IC8gc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnogPSBjYXJ0ZXNpYW4ueiAvIHNjYWxhcjtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbmVnYXRlKGNhcnRlc2lhbjogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRyZXN1bHQueCA9IC1jYXJ0ZXNpYW4ueDtcclxuXHRcdHJlc3VsdC55ID0gLWNhcnRlc2lhbi55O1xyXG5cdFx0cmVzdWx0LnogPSAtY2FydGVzaWFuLno7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFicyhjYXJ0ZXNpYW46IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSBNYXRoLmFicyhjYXJ0ZXNpYW4ueCk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGguYWJzKGNhcnRlc2lhbi55KTtcclxuXHRcdHJlc3VsdC56ID0gTWF0aC5hYnMoY2FydGVzaWFuLnopO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBsZXJwKHN0YXJ0OiBWZWN0b3IzLCBlbmQ6IFZlY3RvcjMsIHQ6IG51bWJlciwgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIoZW5kLCB0LCBsZXJwU2NyYXRjaCk7XHJcblx0XHRyZXN1bHQgPSBWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIoc3RhcnQsIDEuMCAtIHQsIHJlc3VsdCk7XHJcblx0XHRyZXR1cm4gVmVjdG9yMy5hZGQobGVycFNjcmF0Y2gsIHJlc3VsdCwgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhbmdsZUJldHdlZW4obGVmdDogVmVjdG9yMywgcmlnaHQ6IFZlY3RvcjMpOiBudW1iZXIge1xyXG5cdFx0VmVjdG9yMy5ub3JtYWxpemUobGVmdCwgYW5nbGVCZXR3ZWVuU2NyYXRjaCk7XHJcblx0XHRWZWN0b3IzLm5vcm1hbGl6ZShyaWdodCwgYW5nbGVCZXR3ZWVuU2NyYXRjaDIpO1xyXG5cdFx0Y29uc3QgY29zaW5lID0gVmVjdG9yMy5kb3QoYW5nbGVCZXR3ZWVuU2NyYXRjaCwgYW5nbGVCZXR3ZWVuU2NyYXRjaDIpO1xyXG5cdFx0Y29uc3Qgc2luZSA9IFZlY3RvcjMubWFnbml0dWRlKFZlY3RvcjMuY3Jvc3MoYW5nbGVCZXR3ZWVuU2NyYXRjaCwgYW5nbGVCZXR3ZWVuU2NyYXRjaDIsIGFuZ2xlQmV0d2VlblNjcmF0Y2gpKTtcclxuXHRcdHJldHVybiBNYXRoLmF0YW4yKHNpbmUsIGNvc2luZSk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbW9zdE9ydGhvZ29uYWxBeGlzKGNhcnRlc2lhbjogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCBmID0gVmVjdG9yMy5ub3JtYWxpemUoY2FydGVzaWFuLCBtb3N0T3J0aG9nb25hbEF4aXNTY3JhdGNoKTtcclxuXHRcdFZlY3RvcjMuYWJzKGYsIGYpO1xyXG5cclxuXHRcdGlmIChmLnggPD0gZi55KSB7XHJcblx0XHRcdGlmIChmLnggPD0gZi56KSB7XHJcblx0XHRcdFx0cmVzdWx0ID0gVmVjdG9yMy5jbG9uZShWZWN0b3IzLlVOSVRfWCwgcmVzdWx0KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXN1bHQgPSBWZWN0b3IzLmNsb25lKFZlY3RvcjMuVU5JVF9aLCByZXN1bHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKGYueSA8PSBmLnopIHtcclxuXHRcdFx0cmVzdWx0ID0gVmVjdG9yMy5jbG9uZShWZWN0b3IzLlVOSVRfWSwgcmVzdWx0KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJlc3VsdCA9IFZlY3RvcjMuY2xvbmUoVmVjdG9yMy5VTklUX1osIHJlc3VsdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBwcm9qZWN0VmVjdG9yKGE6IFZlY3RvcjMsIGI6IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0Y29uc3Qgc2NhbGFyID0gVmVjdG9yMy5kb3QoYSwgYikgLyBWZWN0b3IzLmRvdChiLCBiKTtcclxuXHRcdHJldHVybiBWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIoYiwgc2NhbGFyLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBWZWN0b3IzLCByaWdodDogVmVjdG9yMyk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiYgZGVmaW5lZChyaWdodCkgJiYgbGVmdC54ID09PSByaWdodC54ICYmIGxlZnQueSA9PT0gcmlnaHQueSAmJiBsZWZ0LnogPT09IHJpZ2h0LnopXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHRzdGF0aWMgZXF1YWxzQXJyYXkoY2FydGVzaWFuOiBWZWN0b3IzLCBhcnJheTogbnVtYmVyW10sIG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gY2FydGVzaWFuLnggPT09IGFycmF5W29mZnNldF0gJiYgY2FydGVzaWFuLnkgPT09IGFycmF5W29mZnNldCArIDFdICYmIGNhcnRlc2lhbi56ID09PSBhcnJheVtvZmZzZXQgKyAyXTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHNFcHNpbG9uKGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzLCByZWxhdGl2ZUVwc2lsb24gPSAwLCBhYnNvbHV0ZUVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRsZWZ0ID09PSByaWdodCB8fFxyXG5cdFx0XHQoZGVmaW5lZChsZWZ0KSAmJlxyXG5cdFx0XHRcdGRlZmluZWQocmlnaHQpICYmXHJcblx0XHRcdFx0R01hdGguZXF1YWxzRXBzaWxvbihsZWZ0LngsIHJpZ2h0LngsIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKSAmJlxyXG5cdFx0XHRcdEdNYXRoLmVxdWFsc0Vwc2lsb24obGVmdC55LCByaWdodC55LCByZWxhdGl2ZUVwc2lsb24sIGFic29sdXRlRXBzaWxvbikgJiZcclxuXHRcdFx0XHRHTWF0aC5lcXVhbHNFcHNpbG9uKGxlZnQueiwgcmlnaHQueiwgcmVsYXRpdmVFcHNpbG9uLCBhYnNvbHV0ZUVwc2lsb24pKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjcm9zcyhsZWZ0OiBWZWN0b3IzLCByaWdodDogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCBsZWZ0WCA9IGxlZnQueDtcclxuXHRcdGNvbnN0IGxlZnRZID0gbGVmdC55O1xyXG5cdFx0Y29uc3QgbGVmdFogPSBsZWZ0Lno7XHJcblx0XHRjb25zdCByaWdodFggPSByaWdodC54O1xyXG5cdFx0Y29uc3QgcmlnaHRZID0gcmlnaHQueTtcclxuXHRcdGNvbnN0IHJpZ2h0WiA9IHJpZ2h0Lno7XHJcblxyXG5cdFx0Y29uc3QgeCA9IGxlZnRZICogcmlnaHRaIC0gbGVmdFogKiByaWdodFk7XHJcblx0XHRjb25zdCB5ID0gbGVmdFogKiByaWdodFggLSBsZWZ0WCAqIHJpZ2h0WjtcclxuXHRcdGNvbnN0IHogPSBsZWZ0WCAqIHJpZ2h0WSAtIGxlZnRZICogcmlnaHRYO1xyXG5cclxuXHRcdHJlc3VsdC54ID0geDtcclxuXHRcdHJlc3VsdC55ID0geTtcclxuXHRcdHJlc3VsdC56ID0gejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWlkcG9pbnQgPSBmdW5jdGlvbiAobGVmdDogVmVjdG9yMywgcmlnaHQ6IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSAobGVmdC54ICsgcmlnaHQueCkgKiAwLjU7XHJcblx0XHRyZXN1bHQueSA9IChsZWZ0LnkgKyByaWdodC55KSAqIDAuNTtcclxuXHRcdHJlc3VsdC56ID0gKGxlZnQueiArIHJpZ2h0LnopICogMC41O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fTtcclxufVxyXG5jb25zdCBkaXN0YW5jZVNjcmF0Y2ggPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBsZXJwU2NyYXRjaCA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IGFuZ2xlQmV0d2VlblNjcmF0Y2ggPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBhbmdsZUJldHdlZW5TY3JhdGNoMiA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IG1vc3RPcnRob2dvbmFsQXhpc1NjcmF0Y2ggPSBuZXcgVmVjdG9yMygpO1xyXG5leHBvcnQgZGVmYXVsdCBWZWN0b3IzO1xyXG4iLCJpbXBvcnQgeyBWZXJ0ZXhGb3JtYXQgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4uL21hdGgvVmVjdG9yMlwiO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xuXG5leHBvcnQgY2xhc3MgQXR0cmlidXRlIHtcblx0cHVibGljIG9mZnNldDogbnVtYmVyO1xuXHRwdWJsaWMgc2hhZGVyTG9jYXRpb246IG51bWJlcjtcblx0cHVibGljIHR5cGU6IHN0cmluZztcblx0cHVibGljIGZvcm1hdDogc3RyaW5nO1xuXHRwdWJsaWMgYXR0cmlidXRlQnl0ZVNpemU6IG51bWJlcjtcblx0cHVibGljIGF0dHJpYnV0ZVR5cGU6IEF0dHJpYnV0ZVR5cGU7XG5cdHB1YmxpYyBzdGF0aWMgdjMgPSBuZXcgVmVjdG9yMygpO1xuXHRwdWJsaWMgc3RhdGljIHYyID0gbmV3IFZlY3RvcjIoKTtcblx0Y29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZywgcHVibGljIHZhbHVlOiBBcnJheTxudW1iZXI+LCBwdWJsaWMgaXRlbVNpemU6IG51bWJlcikge1xuXHRcdHRoaXMubmFtZSA9IG5hbWU7XG5cdFx0dGhpcy5vZmZzZXQgPSAwO1xuXHRcdHRoaXMuc2hhZGVyTG9jYXRpb24gPSAwO1xuXHRcdHRoaXMuYXR0cmlidXRlVHlwZSA9IEF0dHJpYnV0ZVR5cGUuYXR0cmlidXRlO1xuXHR9XG5cdGdldEdQVUF0dHJpYnV0ZSgpOiBBcnJheTxHUFVBdHRyaWJ1dGU+IHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRzaGFkZXJMb2NhdGlvbjogdGhpcy5zaGFkZXJMb2NhdGlvbixcblx0XHRcdFx0Zm9ybWF0OiB0aGlzLmZvcm1hdCxcblx0XHRcdFx0b2Zmc2V0OiB0aGlzLm9mZnNldFxuXHRcdFx0fVxuXHRcdF07XG5cdH1cblx0ZGVzdHJveSgpIHtcblx0XHR0aGlzLnZhbHVlID0gW107XG5cdH1cblx0YXBwbHlNYXRyaXgzKG1hdHJpeDMpIHtcblx0XHRpZiAodGhpcy5pdGVtU2l6ZSA9PT0gMikge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnZhbHVlLmxlbmd0aCAvIHRoaXMuaXRlbVNpemU7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0QXR0cmlidXRlLnYyLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcywgaSk7XG5cdFx0XHRcdEF0dHJpYnV0ZS52Mi5hcHBseU1hdHJpeDMobWF0cml4Myk7XG5cdFx0XHRcdHRoaXMuc2V0WFkoaSwgQXR0cmlidXRlLnYyLngsIEF0dHJpYnV0ZS52Mi55KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRoaXMuaXRlbVNpemUgPT09IDMpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy52YWx1ZS5sZW5ndGggLyB0aGlzLml0ZW1TaXplOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdEF0dHJpYnV0ZS52My5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsIGkpO1xuXHRcdFx0XHRBdHRyaWJ1dGUudjMuYXBwbHlNYXRyaXgzKG1hdHJpeDMpO1xuXHRcdFx0XHR0aGlzLnNldFhZWihpLCBBdHRyaWJ1dGUudjMueCwgQXR0cmlidXRlLnYzLnksIEF0dHJpYnV0ZS52My56KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0YXBwbHlNYXRyaXg0KG1hdHJpeDQpIHtcblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMudmFsdWUubGVuZ3RoIC8gdGhpcy5pdGVtU2l6ZTsgaSA8IGw7IGkrKykge1xuXHRcdFx0QXR0cmlidXRlLnYzLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcywgaSk7XG5cdFx0XHRBdHRyaWJ1dGUudjMuYXBwbHlNYXRyaXg0KG1hdHJpeDQpO1xuXHRcdFx0dGhpcy5zZXRYWVooaSwgQXR0cmlidXRlLnYzLngsIEF0dHJpYnV0ZS52My55LCBBdHRyaWJ1dGUudjMueik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdHNldFgoaW5kZXgsIHgpIHtcblx0XHR0aGlzLnZhbHVlW2luZGV4ICogdGhpcy5pdGVtU2l6ZV0gPSB4O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGdldFgoaW5kZXgpIHtcblx0XHRjb25zdCB4ID0gdGhpcy52YWx1ZVtpbmRleCAqIHRoaXMuaXRlbVNpemVdO1xuXHRcdHJldHVybiB4O1xuXHR9XG5cdHNldFkoaW5kZXgsIHkpIHtcblx0XHR0aGlzLnZhbHVlW2luZGV4ICogdGhpcy5pdGVtU2l6ZSArIDFdID0geTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRnZXRZKGluZGV4KSB7XG5cdFx0Y29uc3QgeSA9IHRoaXMudmFsdWVbaW5kZXggKiB0aGlzLml0ZW1TaXplICsgMV07XG5cdFx0cmV0dXJuIHk7XG5cdH1cblx0c2V0WihpbmRleCwgeikge1xuXHRcdHRoaXMudmFsdWVbaW5kZXggKiB0aGlzLml0ZW1TaXplICsgMl0gPSB6O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGdldFooaW5kZXgpIHtcblx0XHRjb25zdCB6ID0gdGhpcy52YWx1ZVtpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAyXTtcblx0XHRyZXR1cm4gejtcblx0fVxuXHRnZXRXKGluZGV4KSB7XG5cdFx0Y29uc3QgdyA9IHRoaXMudmFsdWVbaW5kZXggKiB0aGlzLml0ZW1TaXplICsgM107XG5cdFx0cmV0dXJuIHc7XG5cdH1cblx0c2V0WFkoaW5kZXgsIHgsIHkpIHtcblx0XHRpbmRleCAqPSB0aGlzLml0ZW1TaXplO1xuXHRcdHRoaXMudmFsdWVbaW5kZXggKyAwXSA9IHg7XG5cdFx0dGhpcy52YWx1ZVtpbmRleCArIDFdID0geTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRzZXRYWVooaW5kZXgsIHgsIHksIHopIHtcblx0XHRpbmRleCAqPSB0aGlzLml0ZW1TaXplO1xuXHRcdHRoaXMudmFsdWVbaW5kZXggKyAwXSA9IHg7XG5cdFx0dGhpcy52YWx1ZVtpbmRleCArIDFdID0geTtcblx0XHR0aGlzLnZhbHVlW2luZGV4ICsgMl0gPSB6O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdHNldFhZWlcoaW5kZXgsIHgsIHksIHosIHcpIHtcblx0XHRpbmRleCAqPSB0aGlzLml0ZW1TaXplO1xuXHRcdHRoaXMudmFsdWVbaW5kZXggKyAwXSA9IHg7XG5cdFx0dGhpcy52YWx1ZVtpbmRleCArIDFdID0geTtcblx0XHR0aGlzLnZhbHVlW2luZGV4ICsgMl0gPSB6O1xuXHRcdHRoaXMudmFsdWVbaW5kZXggKyAzXSA9IHc7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbmV4cG9ydCBjbGFzcyBJbnRlcmxlYXZlZEF0dHJpYnV0ZSB7XG5cdHB1YmxpYyBuYW1lczogc3RyaW5nW107XG5cdHB1YmxpYyB2YWx1ZTogQXJyYXk8bnVtYmVyPjtcblx0cHVibGljIGl0ZW1TaXplczogbnVtYmVyW107XG5cdHB1YmxpYyBmb3JtYXQ6IHN0cmluZztcblx0cHVibGljIGJ5dGVTaXplOiBudW1iZXI7XG5cdHB1YmxpYyBhdHRyaWJ1dGVUeXBlOiBBdHRyaWJ1dGVUeXBlO1xuXHRjb25zdHJ1Y3RvcihuYW1lczogc3RyaW5nW10sIHZhbHVlOiBBcnJheTxudW1iZXI+LCBpdGVtU2l6ZXM6IG51bWJlcltdKSB7XG5cdFx0dGhpcy5uYW1lcyA9IG5hbWVzO1xuXHRcdHRoaXMuaXRlbVNpemVzID0gaXRlbVNpemVzO1xuXHRcdHRoaXMudmFsdWUgPSB2YWx1ZTtcblx0XHR0aGlzLmF0dHJpYnV0ZVR5cGUgPSBBdHRyaWJ1dGVUeXBlLmludGVybGVhdmVkQXR0cmlidXRlO1xuXHR9XG5cdGdldEdQVUF0dHJpYnV0ZSgpOiBBcnJheTxHUFVBdHRyaWJ1dGU+IHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblx0XHR0aGlzLml0ZW1TaXplcy5yZWR1Y2UoKHRvdGFsLCBjdXJyZW50LCBpbmRleCkgPT4ge1xuXHRcdFx0cmVzdWx0LnB1c2goe1xuXHRcdFx0XHRzaGFkZXJMb2NhdGlvbjogaW5kZXgsXG5cdFx0XHRcdGZvcm1hdDogdGhpcy5mb3JtYXQsXG5cdFx0XHRcdG9mZnNldDogdG90YWwgKiB0aGlzLmJ5dGVTaXplXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiAodG90YWwgKz0gY3VycmVudCk7XG5cdFx0fSwgMCk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXHRkZXN0cm95KCkge1xuXHRcdHRoaXMudmFsdWUgPSBudWxsO1xuXHRcdHRoaXMubmFtZXMgPSBudWxsO1xuXHRcdHRoaXMuaXRlbVNpemVzID0gbnVsbDtcblx0fVxufVxuZXhwb3J0IGNsYXNzIEZsb2F0MzJBdHRyaWJ1dGUgZXh0ZW5kcyBBdHRyaWJ1dGUge1xuXHRjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBBcnJheTxudW1iZXI+LCBpdGVtU2l6ZTogbnVtYmVyKSB7XG5cdFx0c3VwZXIobmFtZSwgdmFsdWUsIGl0ZW1TaXplKTtcblx0XHRjb25zdCB7IGZvcm1hdCwgdG90YWxCeXRlU2l6ZSB9ID0gZ2V0QXR0cmlidXRlRm9ybWF0KFZlcnRleEZvcm1hdC5GbG9hdDMyLCBpdGVtU2l6ZSk7XG5cdFx0dGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG5cdFx0dGhpcy5hdHRyaWJ1dGVCeXRlU2l6ZSA9IHRvdGFsQnl0ZVNpemU7XG5cdH1cbn1cbmV4cG9ydCBjbGFzcyBJbnRlcmxlYXZlZEZsb2F0MzJBdHRyaWJ1dGUgZXh0ZW5kcyBJbnRlcmxlYXZlZEF0dHJpYnV0ZSB7XG5cdGNvbnN0cnVjdG9yKG5hbWVzOiBzdHJpbmdbXSwgdmFsdWU6IEFycmF5PG51bWJlcj4sIGl0ZW1TaXplczogbnVtYmVyW10pIHtcblx0XHRzdXBlcihuYW1lcywgdmFsdWUsIGl0ZW1TaXplcyk7XG5cdFx0dGhpcy5mb3JtYXQgPSBWZXJ0ZXhGb3JtYXQuRmxvYXQzMjtcblx0XHR0aGlzLmJ5dGVTaXplID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO1xuXHR9XG59XG5leHBvcnQgZW51bSBBdHRyaWJ1dGVUeXBlIHtcblx0aW50ZXJsZWF2ZWRBdHRyaWJ1dGUgPSAwLFxuXHRhdHRyaWJ1dGUgPSAxXG59XG5leHBvcnQgdHlwZSBHUFVBdHRyaWJ1dGUgPSB7XG5cdHNoYWRlckxvY2F0aW9uOiBudW1iZXI7XG5cdGZvcm1hdDogc3RyaW5nO1xuXHRvZmZzZXQ6IG51bWJlcjtcbn07XG5mdW5jdGlvbiBnZXRBdHRyaWJ1dGVGb3JtYXQodHlwZTogc3RyaW5nLCBpdGVtU2l6ZTogbnVtYmVyKSB7XG5cdGNvbnN0IGtleSA9IGAke3R5cGV9eCR7aXRlbVNpemV9YDtcblx0cmV0dXJuIHtcblx0XHRbVmVydGV4Rm9ybWF0LkZsb2F0MzJdOiB7XG5cdFx0XHRmb3JtYXQ6IFwiZmxvYXQzMlwiLFxuXHRcdFx0dG90YWxCeXRlU2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogaXRlbVNpemUsXG5cdFx0XHRieXRlU2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UXG5cdFx0fSxcblx0XHRbVmVydGV4Rm9ybWF0LkZsb2F0MzJ4Ml06IHtcblx0XHRcdGZvcm1hdDogXCJmbG9hdDMyeDJcIixcblx0XHRcdHRvdGFsQnl0ZVNpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIGl0ZW1TaXplLFxuXHRcdFx0Ynl0ZVNpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVFxuXHRcdH0sXG5cdFx0W1ZlcnRleEZvcm1hdC5GbG9hdDMyeDNdOiB7XG5cdFx0XHRmb3JtYXQ6IFwiZmxvYXQzMngzXCIsXG5cdFx0XHR0b3RhbEJ5dGVTaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiBpdGVtU2l6ZSxcblx0XHRcdGJ5dGVTaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlRcblx0XHR9LFxuXHRcdFtWZXJ0ZXhGb3JtYXQuRmxvYXQzMng0XToge1xuXHRcdFx0Zm9ybWF0OiBcImZsb2F0MzJ4NFwiLFxuXHRcdFx0dG90YWxCeXRlU2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogaXRlbVNpemUsXG5cdFx0XHRieXRlU2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UXG5cdFx0fVxuXHR9W2tleV07XG59XG4iLCJpbXBvcnQgeyBCaW5kR3JvdXBDYWNoZU9wdGlvbnMgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5jb25zdCBiaW5kR3JvdXBDYWNoZSA9IG5ldyBNYXAoKTtcclxuY2xhc3MgQmluZEdyb3VwIHtcclxuXHRkZXZpY2U6IEdQVURldmljZTtcclxuXHRncHVCaW5kR3JvdXA6IEdQVUJpbmRHcm91cDtcclxuXHRsYWJlbDogc3RyaW5nO1xyXG5cdGluZGV4OiBudW1iZXI7XHJcblx0ZGlydHk6IGJvb2xlYW47XHJcblx0b2Zmc2V0PzogbnVtYmVyO1xyXG5cdC8vIGNvbnN0IHVuaWZvcm1CeXRlcyA9IDUgKiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7XHJcblx0Ly8gY29uc3QgYWxpZ25lZFNpemVCeXRlcyA9IE1hdGguY2VpbCh1bmlmb3JtQnl0ZXMgLyAyNTYpICogMjU2O1xyXG5cdC8vIGNvbnN0IGFsaWduZWRTaXplID1hbGlnbmVkU2l6ZUJ5dGVzIC8gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO1xyXG5cdGFsaWduZWRTaXplPzogbnVtYmVyO1xyXG5cdG1heE9mZnNldD86IG51bWJlcjtcclxuXHRkeW5hbWljPzogYm9vbGVhbjtcclxuXHRjb25zdHJ1Y3RvcihvcHRpb25zOiBCaW5kR3JvdXBDYWNoZU9wdGlvbnMpIHtcclxuXHRcdHRoaXMuaW5kZXggPSBvcHRpb25zLmluZGV4IHx8IDA7XHJcblx0XHR0aGlzLm9mZnNldCA9IG9wdGlvbnMub2Zmc2V0ID8/IDA7XHJcblx0XHR0aGlzLmFsaWduZWRTaXplID0gb3B0aW9ucy5hbGlnbmVkU2l6ZSA/PyAwO1xyXG5cdFx0dGhpcy5tYXhPZmZzZXQgPSBvcHRpb25zLm1heE9mZnNldCA/PyAwO1xyXG5cdFx0dGhpcy5keW5hbWljID0gb3B0aW9ucy5keW5hbWljID8/IGZhbHNlO1xyXG5cdFx0dGhpcy5ncHVCaW5kR3JvdXAgPSBvcHRpb25zLmRldmljZS5jcmVhdGVCaW5kR3JvdXAoe1xyXG5cdFx0XHRsYWJlbDogb3B0aW9ucy5sYWJlbCxcclxuXHRcdFx0bGF5b3V0OiBvcHRpb25zLmxheW91dC5ncHVCaW5kR3JvdXBMYXlvdXQsXHJcblx0XHRcdGVudHJpZXM6IG9wdGlvbnMuZW50aXJlcy5tYXAoKGVudGl0eSkgPT4gKHtcclxuXHRcdFx0XHRiaW5kaW5nOiBlbnRpdHkuYmluZGluZyxcclxuXHRcdFx0XHRyZXNvdXJjZTogZW50aXR5LnJlc291cmNlXHJcblx0XHRcdH0pKVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdGJpbmQocGFzc0VuY29kZXI6IEdQVVJlbmRlclBhc3NFbmNvZGVyKSB7XHJcblx0XHQvLyBkeW5hbWljIHVuaWZvcm1zIG11c3QgYmluZCBtdWx0aXBsZSB0aW1lc1xyXG5cdFx0aWYgKHRoaXMuZHluYW1pYykge1xyXG5cdFx0XHRjb25zdCBkeW5hbWljT2Zmc2V0cyA9IFswXTtcclxuXHRcdFx0ZHluYW1pY09mZnNldHNbMF0gPSB0aGlzLm9mZnNldCAqIHRoaXMuYWxpZ25lZFNpemU7XHJcblx0XHRcdHRoaXMub2Zmc2V0ID0gKyt0aGlzLm9mZnNldCA8IHRoaXMubWF4T2Zmc2V0ID8gdGhpcy5vZmZzZXQgOiAwO1xyXG5cdFx0XHRwYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAodGhpcy5pbmRleCwgdGhpcy5ncHVCaW5kR3JvdXAsIGR5bmFtaWNPZmZzZXRzKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCh0aGlzLmluZGV4LCB0aGlzLmdwdUJpbmRHcm91cCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdGRlc3Ryb3koKSB7XHJcblx0XHR0aGlzLmdwdUJpbmRHcm91cCA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuZGV2aWNlID0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHRzdGF0aWMgZ2V0QmluZEdyb3VwRnJvbUNhY2hlKG9wdGlvbnM6IEJpbmRHcm91cENhY2hlT3B0aW9ucyk6IEJpbmRHcm91cCB7XHJcblx0XHRpZiAoYmluZEdyb3VwQ2FjaGUuaGFzKG9wdGlvbnMubGFiZWwpKSB7XHJcblx0XHRcdHJldHVybiBiaW5kR3JvdXBDYWNoZS5nZXQob3B0aW9ucy5sYWJlbCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb25zdCBiaW5kR3JvdXAgPSBuZXcgQmluZEdyb3VwKG9wdGlvbnMpO1xyXG5cdFx0XHRiaW5kR3JvdXBDYWNoZS5zZXQob3B0aW9ucy5sYWJlbCwgYmluZEdyb3VwKTtcclxuXHRcdFx0cmV0dXJuIGJpbmRHcm91cDtcclxuXHRcdH1cclxuXHR9XHJcblx0c3RhdGljIHJlbW92ZUJpbmRHcm91cEZyb21DYWNoZShiaW5kR3JvdXA6IEJpbmRHcm91cCkge1xyXG5cdFx0YmluZEdyb3VwQ2FjaGUuZGVsZXRlKGJpbmRHcm91cCk7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCaW5kR3JvdXA7XHJcbiIsImltcG9ydCB7IEJpbmRHcm91cEVudGl0eU9wdGlvbnMgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmluZEdyb3VwRW50aXR5IHtcblx0YmluZGluZzogbnVtYmVyO1xuXHRyZXNvdXJjZTogR1BVQmluZGluZ1Jlc291cmNlO1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zOiBCaW5kR3JvdXBFbnRpdHlPcHRpb25zKSB7XG5cdFx0dGhpcy5iaW5kaW5nID0gb3B0aW9ucy5iaW5kaW5nO1xuXHRcdHRoaXMucmVzb3VyY2UgPSBvcHRpb25zLnJlc291cmNlO1xuXHR9XG5cdHB1YmxpYyBnZXRHUFVHcm91cEVudGl0eSgpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0YmluZGluZzogdGhpcy5iaW5kaW5nLFxuXHRcdFx0cmVzb3VyY2U6IHRoaXMucmVzb3VyY2Vcblx0XHR9O1xuXHR9XG59XG4iLCJpbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IEdNYXRoIGZyb20gXCIuL01hdGhcIjtcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4vTWF0cml4NFwiO1xyXG5pbXBvcnQgeyBRdWF0ZXJuaW9uIH0gZnJvbSBcIi4vUXVhdGVybmlvblwiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi9WZWN0b3IzXCI7XHJcbi8qKlxyXG4gKiBBIDN4MyBtYXRyaXgsIGluZGV4YWJsZSBhcyBhIGNvbHVtbi1tYWpvciBvcmRlciBhcnJheS5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93MD0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAwLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3cwPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDAuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMlJvdzA9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAyLCByb3cgMC5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93MT0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAxLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3cxPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDEuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMlJvdzE9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAyLCByb3cgMS5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93Mj0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAyLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3cyPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDIuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMlJvdzI9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAyLCByb3cgMi5cclxuICovXHJcbmNsYXNzIE1hdHJpeDMge1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0Y29sdW1uMFJvdzAgPSAwLFxyXG5cdFx0Y29sdW1uMVJvdzAgPSAwLFxyXG5cdFx0Y29sdW1uMlJvdzAgPSAwLFxyXG5cdFx0Y29sdW1uMFJvdzEgPSAwLFxyXG5cdFx0Y29sdW1uMVJvdzEgPSAwLFxyXG5cdFx0Y29sdW1uMlJvdzEgPSAwLFxyXG5cdFx0Y29sdW1uMFJvdzIgPSAwLFxyXG5cdFx0Y29sdW1uMVJvdzIgPSAwLFxyXG5cdFx0Y29sdW1uMlJvdzIgPSAwXHJcblx0KSB7XHJcblx0XHR0aGlzWzBdID0gY29sdW1uMFJvdzA7XHJcblx0XHR0aGlzWzFdID0gY29sdW1uMFJvdzE7XHJcblx0XHR0aGlzWzJdID0gY29sdW1uMFJvdzI7XHJcblx0XHR0aGlzWzNdID0gY29sdW1uMVJvdzA7XHJcblx0XHR0aGlzWzRdID0gY29sdW1uMVJvdzE7XHJcblx0XHR0aGlzWzVdID0gY29sdW1uMVJvdzI7XHJcblx0XHR0aGlzWzZdID0gY29sdW1uMlJvdzA7XHJcblx0XHR0aGlzWzddID0gY29sdW1uMlJvdzE7XHJcblx0XHR0aGlzWzhdID0gY29sdW1uMlJvdzI7XHJcblx0fVxyXG5cdHNldEZyb21NYXRyaXg0KG1hdHJpeDogTWF0cml4NCk6IE1hdHJpeDMge1xyXG5cdFx0dGhpc1swXSA9IG1hdHJpeFswXTtcclxuXHRcdHRoaXNbMV0gPSBtYXRyaXhbMV07XHJcblx0XHR0aGlzWzJdID0gbWF0cml4WzJdO1xyXG5cdFx0dGhpc1szXSA9IG1hdHJpeFs0XTtcclxuXHRcdHRoaXNbNF0gPSBtYXRyaXhbNV07XHJcblx0XHR0aGlzWzVdID0gbWF0cml4WzJdO1xyXG5cdFx0dGhpc1s2XSA9IG1hdHJpeFs4XTtcclxuXHRcdHRoaXNbN10gPSBtYXRyaXhbOV07XHJcblx0XHR0aGlzWzhdID0gbWF0cml4WzEwXTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRnZXROb3JtYWxNYXRyaXgobWF0cml4NDogTWF0cml4NCk6IE1hdHJpeDMge1xyXG5cdFx0dGhpcy5zZXRGcm9tTWF0cml4NChtYXRyaXg0KTtcclxuXHRcdE1hdHJpeDMuaW52ZXJzZSh0aGlzLCB0aGlzKTtcclxuXHRcdE1hdHJpeDMudHJhbnNwb3NlKHRoaXMsIHRoaXMpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY2xvbmUobWF0cml4OiBNYXRyaXgzIHwgbnVtYmVyW10sIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0aWYgKCFkZWZpbmVkKG1hdHJpeCkpIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgTWF0cml4MyhcclxuXHRcdFx0XHRtYXRyaXhbMF0sXHJcblx0XHRcdFx0bWF0cml4WzNdLFxyXG5cdFx0XHRcdG1hdHJpeFs2XSxcclxuXHRcdFx0XHRtYXRyaXhbMV0sXHJcblx0XHRcdFx0bWF0cml4WzRdLFxyXG5cdFx0XHRcdG1hdHJpeFs3XSxcclxuXHRcdFx0XHRtYXRyaXhbMl0sXHJcblx0XHRcdFx0bWF0cml4WzVdLFxyXG5cdFx0XHRcdG1hdHJpeFs4XVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdO1xyXG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzRdO1xyXG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdO1xyXG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdO1xyXG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddO1xyXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tQ29sdW1uTWFqb3JBcnJheSh2YWx1ZXM6IEFycmF5PG51bWJlcj4sIHJlc3VsdD86IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJlc3VsdCA9IG5ldyBNYXRyaXgzKCk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gTWF0cml4My5jbG9uZSh2YWx1ZXMsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVJvd01ham9yQXJyYXkodmFsdWVzOiBBcnJheTxudW1iZXI+LCByZXN1bHQ/OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDMoXHJcblx0XHRcdFx0dmFsdWVzWzBdLFxyXG5cdFx0XHRcdHZhbHVlc1sxXSxcclxuXHRcdFx0XHR2YWx1ZXNbMl0sXHJcblx0XHRcdFx0dmFsdWVzWzNdLFxyXG5cdFx0XHRcdHZhbHVlc1s0XSxcclxuXHRcdFx0XHR2YWx1ZXNbNV0sXHJcblx0XHRcdFx0dmFsdWVzWzZdLFxyXG5cdFx0XHRcdHZhbHVlc1s3XSxcclxuXHRcdFx0XHR2YWx1ZXNbOF1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IHZhbHVlc1swXTtcclxuXHRcdHJlc3VsdFsxXSA9IHZhbHVlc1szXTtcclxuXHRcdHJlc3VsdFsyXSA9IHZhbHVlc1s2XTtcclxuXHRcdHJlc3VsdFszXSA9IHZhbHVlc1sxXTtcclxuXHRcdHJlc3VsdFs0XSA9IHZhbHVlc1s0XTtcclxuXHRcdHJlc3VsdFs1XSA9IHZhbHVlc1s3XTtcclxuXHRcdHJlc3VsdFs2XSA9IHZhbHVlc1syXTtcclxuXHRcdHJlc3VsdFs3XSA9IHZhbHVlc1s1XTtcclxuXHRcdHJlc3VsdFs4XSA9IHZhbHVlc1s4XTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVF1YXRlcm5pb24ocXVhdGVybmlvbjogUXVhdGVybmlvbiwgcmVzdWx0PzogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0Y29uc3QgeDIgPSBxdWF0ZXJuaW9uLnggKiBxdWF0ZXJuaW9uLng7XHJcblx0XHRjb25zdCB4eSA9IHF1YXRlcm5pb24ueCAqIHF1YXRlcm5pb24ueTtcclxuXHRcdGNvbnN0IHh6ID0gcXVhdGVybmlvbi54ICogcXVhdGVybmlvbi56O1xyXG5cdFx0Y29uc3QgeHcgPSBxdWF0ZXJuaW9uLnggKiBxdWF0ZXJuaW9uLnc7XHJcblx0XHRjb25zdCB5MiA9IHF1YXRlcm5pb24ueSAqIHF1YXRlcm5pb24ueTtcclxuXHRcdGNvbnN0IHl6ID0gcXVhdGVybmlvbi55ICogcXVhdGVybmlvbi56O1xyXG5cdFx0Y29uc3QgeXcgPSBxdWF0ZXJuaW9uLnkgKiBxdWF0ZXJuaW9uLnc7XHJcblx0XHRjb25zdCB6MiA9IHF1YXRlcm5pb24ueiAqIHF1YXRlcm5pb24uejtcclxuXHRcdGNvbnN0IHp3ID0gcXVhdGVybmlvbi56ICogcXVhdGVybmlvbi53O1xyXG5cdFx0Y29uc3QgdzIgPSBxdWF0ZXJuaW9uLncgKiBxdWF0ZXJuaW9uLnc7XHJcblxyXG5cdFx0Y29uc3QgbTAwID0geDIgLSB5MiAtIHoyICsgdzI7XHJcblx0XHRjb25zdCBtMDEgPSAyLjAgKiAoeHkgLSB6dyk7XHJcblx0XHRjb25zdCBtMDIgPSAyLjAgKiAoeHogKyB5dyk7XHJcblxyXG5cdFx0Y29uc3QgbTEwID0gMi4wICogKHh5ICsgencpO1xyXG5cdFx0Y29uc3QgbTExID0gLXgyICsgeTIgLSB6MiArIHcyO1xyXG5cdFx0Y29uc3QgbTEyID0gMi4wICogKHl6IC0geHcpO1xyXG5cclxuXHRcdGNvbnN0IG0yMCA9IDIuMCAqICh4eiAtIHl3KTtcclxuXHRcdGNvbnN0IG0yMSA9IDIuMCAqICh5eiArIHh3KTtcclxuXHRcdGNvbnN0IG0yMiA9IC14MiAtIHkyICsgejIgKyB3MjtcclxuXHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDMobTAwLCBtMDEsIG0wMiwgbTEwLCBtMTEsIG0xMiwgbTIwLCBtMjEsIG0yMik7XHJcblx0XHR9XHJcblx0XHRyZXN1bHRbMF0gPSBtMDA7XHJcblx0XHRyZXN1bHRbMV0gPSBtMTA7XHJcblx0XHRyZXN1bHRbMl0gPSBtMjA7XHJcblx0XHRyZXN1bHRbM10gPSBtMDE7XHJcblx0XHRyZXN1bHRbNF0gPSBtMTE7XHJcblx0XHRyZXN1bHRbNV0gPSBtMjE7XHJcblx0XHRyZXN1bHRbNl0gPSBtMDI7XHJcblx0XHRyZXN1bHRbN10gPSBtMTI7XHJcblx0XHRyZXN1bHRbOF0gPSBtMjI7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21TY2FsZShzY2FsZTogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDMoc2NhbGUueCwgMC4wLCAwLjAsIDAuMCwgc2NhbGUueSwgMC4wLCAwLjAsIDAuMCwgc2NhbGUueik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gc2NhbGUueDtcclxuXHRcdHJlc3VsdFsxXSA9IDAuMDtcclxuXHRcdHJlc3VsdFsyXSA9IDAuMDtcclxuXHRcdHJlc3VsdFszXSA9IDAuMDtcclxuXHRcdHJlc3VsdFs0XSA9IHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbNV0gPSAwLjA7XHJcblx0XHRyZXN1bHRbNl0gPSAwLjA7XHJcblx0XHRyZXN1bHRbN10gPSAwLjA7XHJcblx0XHRyZXN1bHRbOF0gPSBzY2FsZS56O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tUm90YXRpb25YKGFuZ2xlOiBudW1iZXIsIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0Y29uc3QgY29zQW5nbGUgPSBNYXRoLmNvcyhhbmdsZSk7XHJcblx0XHRjb25zdCBzaW5BbmdsZSA9IE1hdGguc2luKGFuZ2xlKTtcclxuXHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDMoMS4wLCAwLjAsIDAuMCwgMC4wLCBjb3NBbmdsZSwgLXNpbkFuZ2xlLCAwLjAsIHNpbkFuZ2xlLCBjb3NBbmdsZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gMS4wO1xyXG5cdFx0cmVzdWx0WzFdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzJdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzNdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzRdID0gY29zQW5nbGU7XHJcblx0XHRyZXN1bHRbNV0gPSBzaW5BbmdsZTtcclxuXHRcdHJlc3VsdFs2XSA9IDAuMDtcclxuXHRcdHJlc3VsdFs3XSA9IC1zaW5BbmdsZTtcclxuXHRcdHJlc3VsdFs4XSA9IGNvc0FuZ2xlO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVJvdGF0aW9uWShhbmdsZTogbnVtYmVyLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGNvbnN0IGNvc0FuZ2xlID0gTWF0aC5jb3MoYW5nbGUpO1xyXG5cdFx0Y29uc3Qgc2luQW5nbGUgPSBNYXRoLnNpbihhbmdsZSk7XHJcblxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBNYXRyaXgzKGNvc0FuZ2xlLCAwLjAsIHNpbkFuZ2xlLCAwLjAsIDEuMCwgMC4wLCAtc2luQW5nbGUsIDAuMCwgY29zQW5nbGUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdFswXSA9IGNvc0FuZ2xlO1xyXG5cdFx0cmVzdWx0WzFdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzJdID0gLXNpbkFuZ2xlO1xyXG5cdFx0cmVzdWx0WzNdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzRdID0gMS4wO1xyXG5cdFx0cmVzdWx0WzVdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzZdID0gc2luQW5nbGU7XHJcblx0XHRyZXN1bHRbN10gPSAwLjA7XHJcblx0XHRyZXN1bHRbOF0gPSBjb3NBbmdsZTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Sb3RhdGlvblpzdGF0aWMoYW5nbGU6IG51bWJlciwgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRjb25zdCBjb3NBbmdsZSA9IE1hdGguY29zKGFuZ2xlKTtcclxuXHRcdGNvbnN0IHNpbkFuZ2xlID0gTWF0aC5zaW4oYW5nbGUpO1xyXG5cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgTWF0cml4Myhjb3NBbmdsZSwgLXNpbkFuZ2xlLCAwLjAsIHNpbkFuZ2xlLCBjb3NBbmdsZSwgMC4wLCAwLjAsIDAuMCwgMS4wKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHRbMF0gPSBjb3NBbmdsZTtcclxuXHRcdHJlc3VsdFsxXSA9IHNpbkFuZ2xlO1xyXG5cdFx0cmVzdWx0WzJdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzNdID0gLXNpbkFuZ2xlO1xyXG5cdFx0cmVzdWx0WzRdID0gY29zQW5nbGU7XHJcblx0XHRyZXN1bHRbNV0gPSAwLjA7XHJcblx0XHRyZXN1bHRbNl0gPSAwLjA7XHJcblx0XHRyZXN1bHRbN10gPSAwLjA7XHJcblx0XHRyZXN1bHRbOF0gPSAxLjA7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblx0dG9BcnJheSgpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xyXG5cdFx0TWF0cml4My50b0FycmF5KHRoaXMsIHJlc3VsdCk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHRvQXJyYXkobWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IG51bWJlcltdKTogbnVtYmVyW10ge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIFttYXRyaXhbMF0sIG1hdHJpeFsxXSwgbWF0cml4WzJdLCBtYXRyaXhbM10sIG1hdHJpeFs0XSwgbWF0cml4WzVdLCBtYXRyaXhbNl0sIG1hdHJpeFs3XSwgbWF0cml4WzhdXTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXTtcclxuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXTtcclxuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXTtcclxuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeFs0XTtcclxuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XTtcclxuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XTtcclxuXHRcdHJlc3VsdFs3XSA9IG1hdHJpeFs3XTtcclxuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeFs4XTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0RWxlbWVudEluZGV4KGNvbHVtbjogbnVtYmVyLCByb3c6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gY29sdW1uICogMyArIHJvdztcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRDb2x1bW4obWF0cml4OiBNYXRyaXgzLCBpbmRleDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCAqIDM7XHJcblx0XHRjb25zdCB4ID0gbWF0cml4W3N0YXJ0SW5kZXhdO1xyXG5cdFx0Y29uc3QgeSA9IG1hdHJpeFtzdGFydEluZGV4ICsgMV07XHJcblx0XHRjb25zdCB6ID0gbWF0cml4W3N0YXJ0SW5kZXggKyAyXTtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHNldENvbHVtbihtYXRyaXg6IE1hdHJpeDMsIGluZGV4OiBudW1iZXIsIGNhcnRlc2lhbjogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRyZXN1bHQgPSBNYXRyaXgzLmNsb25lKG1hdHJpeCwgcmVzdWx0KTtcclxuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCAqIDM7XHJcblx0XHRyZXN1bHRbc3RhcnRJbmRleF0gPSBjYXJ0ZXNpYW4ueDtcclxuXHRcdHJlc3VsdFtzdGFydEluZGV4ICsgMV0gPSBjYXJ0ZXNpYW4ueTtcclxuXHRcdHJlc3VsdFtzdGFydEluZGV4ICsgMl0gPSBjYXJ0ZXNpYW4uejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0Um93KG1hdHJpeDogTWF0cml4MywgaW5kZXg6IG51bWJlciwgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCB4ID0gbWF0cml4W2luZGV4XTtcclxuXHRcdGNvbnN0IHkgPSBtYXRyaXhbaW5kZXggKyAzXTtcclxuXHRcdGNvbnN0IHogPSBtYXRyaXhbaW5kZXggKyA2XTtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHNldFJvdyhtYXRyaXg6IE1hdHJpeDMsIGluZGV4OiBudW1iZXIsIGNhcnRlc2lhbjogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRyZXN1bHQgPSBNYXRyaXgzLmNsb25lKG1hdHJpeCwgcmVzdWx0KTtcclxuXHRcdHJlc3VsdFtpbmRleF0gPSBjYXJ0ZXNpYW4ueDtcclxuXHRcdHJlc3VsdFtpbmRleCArIDNdID0gY2FydGVzaWFuLnk7XHJcblx0XHRyZXN1bHRbaW5kZXggKyA2XSA9IGNhcnRlc2lhbi56O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzZXRTY2FsZShtYXRyaXg6IE1hdHJpeDMsIHNjYWxlOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nU2NhbGUgPSBNYXRyaXgzLmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoMSk7XHJcblx0XHRjb25zdCBzY2FsZVJhdGlvWCA9IHNjYWxlLnggLyBleGlzdGluZ1NjYWxlLng7XHJcblx0XHRjb25zdCBzY2FsZVJhdGlvWSA9IHNjYWxlLnkgLyBleGlzdGluZ1NjYWxlLnk7XHJcblx0XHRjb25zdCBzY2FsZVJhdGlvWiA9IHNjYWxlLnogLyBleGlzdGluZ1NjYWxlLno7XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdICogc2NhbGVSYXRpb1g7XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsZVJhdGlvWDtcclxuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXSAqIHNjYWxlUmF0aW9YO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdICogc2NhbGVSYXRpb1k7XHJcblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF0gKiBzY2FsZVJhdGlvWTtcclxuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XSAqIHNjYWxlUmF0aW9ZO1xyXG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdICogc2NhbGVSYXRpb1o7XHJcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN10gKiBzY2FsZVJhdGlvWjtcclxuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeFs4XSAqIHNjYWxlUmF0aW9aO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0U2NhbGUobWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHJlc3VsdC54ID0gVmVjdG9yMy5tYWduaXR1ZGUoVmVjdG9yMy5mcm9tRWxlbWVudHMobWF0cml4WzBdLCBtYXRyaXhbMV0sIG1hdHJpeFsyXSwgc2NyYXRjaENvbHVtbikpO1xyXG5cdFx0cmVzdWx0LnkgPSBWZWN0b3IzLm1hZ25pdHVkZShWZWN0b3IzLmZyb21FbGVtZW50cyhtYXRyaXhbM10sIG1hdHJpeFs0XSwgbWF0cml4WzVdLCBzY3JhdGNoQ29sdW1uKSk7XHJcblx0XHRyZXN1bHQueiA9IFZlY3RvcjMubWFnbml0dWRlKFZlY3RvcjMuZnJvbUVsZW1lbnRzKG1hdHJpeFs2XSwgbWF0cml4WzddLCBtYXRyaXhbOF0sIHNjcmF0Y2hDb2x1bW4pKTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0TWF4aW11bVNjYWxlKG1hdHJpeDogTWF0cml4Myk6IG51bWJlciB7XHJcblx0XHRNYXRyaXgzLmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoMyk7XHJcblx0XHRyZXR1cm4gVmVjdG9yMy5tYXhpbXVtQ29tcG9uZW50KHNjYWxlU2NyYXRjaDMpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHNldFJvdGF0aW9uKG1hdHJpeDogTWF0cml4Mywgcm90YXRpb246IE1hdHJpeDMsIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0Y29uc3Qgc2NhbGUgPSBNYXRyaXgzLmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoNCk7XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gcm90YXRpb25bMF0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzFdID0gcm90YXRpb25bMV0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzJdID0gcm90YXRpb25bMl0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzNdID0gcm90YXRpb25bM10gKiBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzRdID0gcm90YXRpb25bNF0gKiBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzVdID0gcm90YXRpb25bNV0gKiBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzZdID0gcm90YXRpb25bNl0gKiBzY2FsZS56O1xyXG5cdFx0cmVzdWx0WzddID0gcm90YXRpb25bN10gKiBzY2FsZS56O1xyXG5cdFx0cmVzdWx0WzhdID0gcm90YXRpb25bOF0gKiBzY2FsZS56O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0Um90YXRpb24obWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGNvbnN0IHNjYWxlID0gTWF0cml4My5nZXRTY2FsZShtYXRyaXgsIHNjYWxlU2NyYXRjaDUpO1xyXG5cclxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXSAvIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gLyBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdIC8gc2NhbGUueDtcclxuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXSAvIHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF0gLyBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdIC8gc2NhbGUueTtcclxuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XSAvIHNjYWxlLno7XHJcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN10gLyBzY2FsZS56O1xyXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdIC8gc2NhbGUuejtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5KGxlZnQ6IE1hdHJpeDMsIHJpZ2h0OiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGNvbnN0IGNvbHVtbjBSb3cwID0gbGVmdFswXSAqIHJpZ2h0WzBdICsgbGVmdFszXSAqIHJpZ2h0WzFdICsgbGVmdFs2XSAqIHJpZ2h0WzJdO1xyXG5cdFx0Y29uc3QgY29sdW1uMFJvdzEgPSBsZWZ0WzFdICogcmlnaHRbMF0gKyBsZWZ0WzRdICogcmlnaHRbMV0gKyBsZWZ0WzddICogcmlnaHRbMl07XHJcblx0XHRjb25zdCBjb2x1bW4wUm93MiA9IGxlZnRbMl0gKiByaWdodFswXSArIGxlZnRbNV0gKiByaWdodFsxXSArIGxlZnRbOF0gKiByaWdodFsyXTtcclxuXHJcblx0XHRjb25zdCBjb2x1bW4xUm93MCA9IGxlZnRbMF0gKiByaWdodFszXSArIGxlZnRbM10gKiByaWdodFs0XSArIGxlZnRbNl0gKiByaWdodFs1XTtcclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cxID0gbGVmdFsxXSAqIHJpZ2h0WzNdICsgbGVmdFs0XSAqIHJpZ2h0WzRdICsgbGVmdFs3XSAqIHJpZ2h0WzVdO1xyXG5cdFx0Y29uc3QgY29sdW1uMVJvdzIgPSBsZWZ0WzJdICogcmlnaHRbM10gKyBsZWZ0WzVdICogcmlnaHRbNF0gKyBsZWZ0WzhdICogcmlnaHRbNV07XHJcblxyXG5cdFx0Y29uc3QgY29sdW1uMlJvdzAgPSBsZWZ0WzBdICogcmlnaHRbNl0gKyBsZWZ0WzNdICogcmlnaHRbN10gKyBsZWZ0WzZdICogcmlnaHRbOF07XHJcblx0XHRjb25zdCBjb2x1bW4yUm93MSA9IGxlZnRbMV0gKiByaWdodFs2XSArIGxlZnRbNF0gKiByaWdodFs3XSArIGxlZnRbN10gKiByaWdodFs4XTtcclxuXHRcdGNvbnN0IGNvbHVtbjJSb3cyID0gbGVmdFsyXSAqIHJpZ2h0WzZdICsgbGVmdFs1XSAqIHJpZ2h0WzddICsgbGVmdFs4XSAqIHJpZ2h0WzhdO1xyXG5cclxuXHRcdHJlc3VsdFswXSA9IGNvbHVtbjBSb3cwO1xyXG5cdFx0cmVzdWx0WzFdID0gY29sdW1uMFJvdzE7XHJcblx0XHRyZXN1bHRbMl0gPSBjb2x1bW4wUm93MjtcclxuXHRcdHJlc3VsdFszXSA9IGNvbHVtbjFSb3cwO1xyXG5cdFx0cmVzdWx0WzRdID0gY29sdW1uMVJvdzE7XHJcblx0XHRyZXN1bHRbNV0gPSBjb2x1bW4xUm93MjtcclxuXHRcdHJlc3VsdFs2XSA9IGNvbHVtbjJSb3cwO1xyXG5cdFx0cmVzdWx0WzddID0gY29sdW1uMlJvdzE7XHJcblx0XHRyZXN1bHRbOF0gPSBjb2x1bW4yUm93MjtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYWRkKGxlZnQ6IE1hdHJpeDMsIHJpZ2h0OiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdHJlc3VsdFswXSA9IGxlZnRbMF0gKyByaWdodFswXTtcclxuXHRcdHJlc3VsdFsxXSA9IGxlZnRbMV0gKyByaWdodFsxXTtcclxuXHRcdHJlc3VsdFsyXSA9IGxlZnRbMl0gKyByaWdodFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IGxlZnRbM10gKyByaWdodFszXTtcclxuXHRcdHJlc3VsdFs0XSA9IGxlZnRbNF0gKyByaWdodFs0XTtcclxuXHRcdHJlc3VsdFs1XSA9IGxlZnRbNV0gKyByaWdodFs1XTtcclxuXHRcdHJlc3VsdFs2XSA9IGxlZnRbNl0gKyByaWdodFs2XTtcclxuXHRcdHJlc3VsdFs3XSA9IGxlZnRbN10gKyByaWdodFs3XTtcclxuXHRcdHJlc3VsdFs4XSA9IGxlZnRbOF0gKyByaWdodFs4XTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc3VidHJhY3QobGVmdDogTWF0cml4MywgcmlnaHQ6IE1hdHJpeDMsIHJlc3VsdDogTWF0cml4Mykge1xyXG5cdFx0cmVzdWx0WzBdID0gbGVmdFswXSAtIHJpZ2h0WzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gbGVmdFsxXSAtIHJpZ2h0WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gbGVmdFsyXSAtIHJpZ2h0WzJdO1xyXG5cdFx0cmVzdWx0WzNdID0gbGVmdFszXSAtIHJpZ2h0WzNdO1xyXG5cdFx0cmVzdWx0WzRdID0gbGVmdFs0XSAtIHJpZ2h0WzRdO1xyXG5cdFx0cmVzdWx0WzVdID0gbGVmdFs1XSAtIHJpZ2h0WzVdO1xyXG5cdFx0cmVzdWx0WzZdID0gbGVmdFs2XSAtIHJpZ2h0WzZdO1xyXG5cdFx0cmVzdWx0WzddID0gbGVmdFs3XSAtIHJpZ2h0WzddO1xyXG5cdFx0cmVzdWx0WzhdID0gbGVmdFs4XSAtIHJpZ2h0WzhdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5VmVjdG9yKG1hdHJpeDogTWF0cml4MywgY2FydGVzaWFuOiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IHZYID0gY2FydGVzaWFuLng7XHJcblx0XHRjb25zdCB2WSA9IGNhcnRlc2lhbi55O1xyXG5cdFx0Y29uc3QgdlogPSBjYXJ0ZXNpYW4uejtcclxuXHJcblx0XHRjb25zdCB4ID0gbWF0cml4WzBdICogdlggKyBtYXRyaXhbM10gKiB2WSArIG1hdHJpeFs2XSAqIHZaO1xyXG5cdFx0Y29uc3QgeSA9IG1hdHJpeFsxXSAqIHZYICsgbWF0cml4WzRdICogdlkgKyBtYXRyaXhbN10gKiB2WjtcclxuXHRcdGNvbnN0IHogPSBtYXRyaXhbMl0gKiB2WCArIG1hdHJpeFs1XSAqIHZZICsgbWF0cml4WzhdICogdlo7XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmVzdWx0LnogPSB6O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5U2NhbGFyKG1hdHJpeDogTWF0cml4Mywgc2NhbGFyOiBudW1iZXIsIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzRdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdICogc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5U2NhbGUobWF0cml4OiBNYXRyaXgzLCBzY2FsZTogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdICogc2NhbGUueDtcclxuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM10gKiBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzRdICogc2NhbGUueTtcclxuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XSAqIHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXhbNl0gKiBzY2FsZS56O1xyXG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddICogc2NhbGUuejtcclxuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeFs4XSAqIHNjYWxlLno7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBuZWdhdGUobWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdHJlc3VsdFswXSA9IC1tYXRyaXhbMF07XHJcblx0XHRyZXN1bHRbMV0gPSAtbWF0cml4WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gLW1hdHJpeFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IC1tYXRyaXhbM107XHJcblx0XHRyZXN1bHRbNF0gPSAtbWF0cml4WzRdO1xyXG5cdFx0cmVzdWx0WzVdID0gLW1hdHJpeFs1XTtcclxuXHRcdHJlc3VsdFs2XSA9IC1tYXRyaXhbNl07XHJcblx0XHRyZXN1bHRbN10gPSAtbWF0cml4WzddO1xyXG5cdFx0cmVzdWx0WzhdID0gLW1hdHJpeFs4XTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgdHJhbnNwb3NlKG1hdHJpeDogTWF0cml4MywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRjb25zdCBjb2x1bW4wUm93MCA9IG1hdHJpeFswXTtcclxuXHRcdGNvbnN0IGNvbHVtbjBSb3cxID0gbWF0cml4WzNdO1xyXG5cdFx0Y29uc3QgY29sdW1uMFJvdzIgPSBtYXRyaXhbNl07XHJcblx0XHRjb25zdCBjb2x1bW4xUm93MCA9IG1hdHJpeFsxXTtcclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cxID0gbWF0cml4WzRdO1xyXG5cdFx0Y29uc3QgY29sdW1uMVJvdzIgPSBtYXRyaXhbN107XHJcblx0XHRjb25zdCBjb2x1bW4yUm93MCA9IG1hdHJpeFsyXTtcclxuXHRcdGNvbnN0IGNvbHVtbjJSb3cxID0gbWF0cml4WzVdO1xyXG5cdFx0Y29uc3QgY29sdW1uMlJvdzIgPSBtYXRyaXhbOF07XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gY29sdW1uMFJvdzA7XHJcblx0XHRyZXN1bHRbMV0gPSBjb2x1bW4wUm93MTtcclxuXHRcdHJlc3VsdFsyXSA9IGNvbHVtbjBSb3cyO1xyXG5cdFx0cmVzdWx0WzNdID0gY29sdW1uMVJvdzA7XHJcblx0XHRyZXN1bHRbNF0gPSBjb2x1bW4xUm93MTtcclxuXHRcdHJlc3VsdFs1XSA9IGNvbHVtbjFSb3cyO1xyXG5cdFx0cmVzdWx0WzZdID0gY29sdW1uMlJvdzA7XHJcblx0XHRyZXN1bHRbN10gPSBjb2x1bW4yUm93MTtcclxuXHRcdHJlc3VsdFs4XSA9IGNvbHVtbjJSb3cyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhYnMobWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdHJlc3VsdFswXSA9IE1hdGguYWJzKG1hdHJpeFswXSk7XHJcblx0XHRyZXN1bHRbMV0gPSBNYXRoLmFicyhtYXRyaXhbMV0pO1xyXG5cdFx0cmVzdWx0WzJdID0gTWF0aC5hYnMobWF0cml4WzJdKTtcclxuXHRcdHJlc3VsdFszXSA9IE1hdGguYWJzKG1hdHJpeFszXSk7XHJcblx0XHRyZXN1bHRbNF0gPSBNYXRoLmFicyhtYXRyaXhbNF0pO1xyXG5cdFx0cmVzdWx0WzVdID0gTWF0aC5hYnMobWF0cml4WzVdKTtcclxuXHRcdHJlc3VsdFs2XSA9IE1hdGguYWJzKG1hdHJpeFs2XSk7XHJcblx0XHRyZXN1bHRbN10gPSBNYXRoLmFicyhtYXRyaXhbN10pO1xyXG5cdFx0cmVzdWx0WzhdID0gTWF0aC5hYnMobWF0cml4WzhdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRldGVybWluYW50KG1hdHJpeDogTWF0cml4Myk6IG51bWJlciB7XHJcblx0XHRjb25zdCBtMTEgPSBtYXRyaXhbMF07XHJcblx0XHRjb25zdCBtMjEgPSBtYXRyaXhbM107XHJcblx0XHRjb25zdCBtMzEgPSBtYXRyaXhbNl07XHJcblx0XHRjb25zdCBtMTIgPSBtYXRyaXhbMV07XHJcblx0XHRjb25zdCBtMjIgPSBtYXRyaXhbNF07XHJcblx0XHRjb25zdCBtMzIgPSBtYXRyaXhbN107XHJcblx0XHRjb25zdCBtMTMgPSBtYXRyaXhbMl07XHJcblx0XHRjb25zdCBtMjMgPSBtYXRyaXhbNV07XHJcblx0XHRjb25zdCBtMzMgPSBtYXRyaXhbOF07XHJcblxyXG5cdFx0cmV0dXJuIG0xMSAqIChtMjIgKiBtMzMgLSBtMjMgKiBtMzIpICsgbTEyICogKG0yMyAqIG0zMSAtIG0yMSAqIG0zMykgKyBtMTMgKiAobTIxICogbTMyIC0gbTIyICogbTMxKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBpbnZlcnNlKG1hdHJpeDogTWF0cml4MywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRjb25zdCBtMTEgPSBtYXRyaXhbMF07XHJcblx0XHRjb25zdCBtMjEgPSBtYXRyaXhbMV07XHJcblx0XHRjb25zdCBtMzEgPSBtYXRyaXhbMl07XHJcblx0XHRjb25zdCBtMTIgPSBtYXRyaXhbM107XHJcblx0XHRjb25zdCBtMjIgPSBtYXRyaXhbNF07XHJcblx0XHRjb25zdCBtMzIgPSBtYXRyaXhbNV07XHJcblx0XHRjb25zdCBtMTMgPSBtYXRyaXhbNl07XHJcblx0XHRjb25zdCBtMjMgPSBtYXRyaXhbN107XHJcblx0XHRjb25zdCBtMzMgPSBtYXRyaXhbOF07XHJcblxyXG5cdFx0Y29uc3QgZGV0ZXJtaW5hbnQgPSBNYXRyaXgzLmRldGVybWluYW50KG1hdHJpeCk7XHJcblxyXG5cdFx0Ly8gPj5pbmNsdWRlU3RhcnQoJ2RlYnVnJywgcHJhZ21hcy5kZWJ1Zyk7XHJcblx0XHRpZiAoTWF0aC5hYnMoZGV0ZXJtaW5hbnQpIDw9IEdNYXRoLkVQU0lMT04xNSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtYXRyaXggaXMgbm90IGludmVydGlibGVcIik7XHJcblx0XHR9XHJcblx0XHQvLyA+PmluY2x1ZGVFbmQoJ2RlYnVnJyk7XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gbTIyICogbTMzIC0gbTIzICogbTMyO1xyXG5cdFx0cmVzdWx0WzFdID0gbTIzICogbTMxIC0gbTIxICogbTMzO1xyXG5cdFx0cmVzdWx0WzJdID0gbTIxICogbTMyIC0gbTIyICogbTMxO1xyXG5cdFx0cmVzdWx0WzNdID0gbTEzICogbTMyIC0gbTEyICogbTMzO1xyXG5cdFx0cmVzdWx0WzRdID0gbTExICogbTMzIC0gbTEzICogbTMxO1xyXG5cdFx0cmVzdWx0WzVdID0gbTEyICogbTMxIC0gbTExICogbTMyO1xyXG5cdFx0cmVzdWx0WzZdID0gbTEyICogbTIzIC0gbTEzICogbTIyO1xyXG5cdFx0cmVzdWx0WzddID0gbTEzICogbTIxIC0gbTExICogbTIzO1xyXG5cdFx0cmVzdWx0WzhdID0gbTExICogbTIyIC0gbTEyICogbTIxO1xyXG5cclxuXHRcdGNvbnN0IHNjYWxlID0gMS4wIC8gZGV0ZXJtaW5hbnQ7XHJcblx0XHRyZXR1cm4gTWF0cml4My5tdWx0aXBseUJ5U2NhbGFyKHJlc3VsdCwgc2NhbGUsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgaW52ZXJzZVRyYW5zcG9zZShtYXRyaXg6IE1hdHJpeDMsIHJlc3VsdDogTWF0cml4Mykge1xyXG5cdFx0cmV0dXJuIE1hdHJpeDMuaW52ZXJzZShNYXRyaXgzLnRyYW5zcG9zZShtYXRyaXgsIHNjcmF0Y2hUcmFuc3Bvc2VNYXRyaXgpLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBNYXRyaXgzLCByaWdodDogTWF0cml4Myk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdGxlZnRbMF0gPT09IHJpZ2h0WzBdICYmXHJcblx0XHRcdFx0bGVmdFsxXSA9PT0gcmlnaHRbMV0gJiZcclxuXHRcdFx0XHRsZWZ0WzJdID09PSByaWdodFsyXSAmJlxyXG5cdFx0XHRcdGxlZnRbM10gPT09IHJpZ2h0WzNdICYmXHJcblx0XHRcdFx0bGVmdFs0XSA9PT0gcmlnaHRbNF0gJiZcclxuXHRcdFx0XHRsZWZ0WzVdID09PSByaWdodFs1XSAmJlxyXG5cdFx0XHRcdGxlZnRbNl0gPT09IHJpZ2h0WzZdICYmXHJcblx0XHRcdFx0bGVmdFs3XSA9PT0gcmlnaHRbN10gJiZcclxuXHRcdFx0XHRsZWZ0WzhdID09PSByaWdodFs4XSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZXF1YWxzRXBzaWxvbihsZWZ0OiBNYXRyaXgzLCByaWdodDogTWF0cml4MywgZXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdGVwc2lsb24gPSBkZWZhdWx0VmFsdWUoZXBzaWxvbiwgMCk7XHJcblxyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMF0gLSByaWdodFswXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMV0gLSByaWdodFsxXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMl0gLSByaWdodFsyXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbM10gLSByaWdodFszXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbNF0gLSByaWdodFs0XSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbNV0gLSByaWdodFs1XSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbNl0gLSByaWdodFs2XSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbN10gLSByaWdodFs3XSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbOF0gLSByaWdodFs4XSkgPD0gZXBzaWxvbilcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgSURFTlRJVFkgPSBPYmplY3QuZnJlZXplKG5ldyBNYXRyaXgzKDEuMCwgMC4wLCAwLjAsIDAuMCwgMS4wLCAwLjAsIDAuMCwgMC4wLCAxLjApKTtcclxuXHJcblx0c3RhdGljIFpFUk8gPSBPYmplY3QuZnJlZXplKG5ldyBNYXRyaXgzKDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApKTtcclxuXHJcblx0Y2xvbmUocmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRyZXR1cm4gTWF0cml4My5jbG9uZSh0aGlzLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0ZXF1YWxzKHJpZ2h0OiBNYXRyaXgzKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gTWF0cml4My5lcXVhbHModGhpcywgcmlnaHQpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHRlcXVhbHNBcnJheShtYXRyaXg6IE1hdHJpeDMgfCBudW1iZXJbXSwgYXJyYXk6IG51bWJlcltdLCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bWF0cml4WzBdID09PSBhcnJheVtvZmZzZXRdICYmXHJcblx0XHRcdG1hdHJpeFsxXSA9PT0gYXJyYXlbb2Zmc2V0ICsgMV0gJiZcclxuXHRcdFx0bWF0cml4WzJdID09PSBhcnJheVtvZmZzZXQgKyAyXSAmJlxyXG5cdFx0XHRtYXRyaXhbM10gPT09IGFycmF5W29mZnNldCArIDNdICYmXHJcblx0XHRcdG1hdHJpeFs0XSA9PT0gYXJyYXlbb2Zmc2V0ICsgNF0gJiZcclxuXHRcdFx0bWF0cml4WzVdID09PSBhcnJheVtvZmZzZXQgKyA1XSAmJlxyXG5cdFx0XHRtYXRyaXhbNl0gPT09IGFycmF5W29mZnNldCArIDZdICYmXHJcblx0XHRcdG1hdHJpeFs3XSA9PT0gYXJyYXlbb2Zmc2V0ICsgN10gJiZcclxuXHRcdFx0bWF0cml4WzhdID09PSBhcnJheVtvZmZzZXQgKyA4XVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbXBhcmVzIHRoaXMgbWF0cml4IHRvIHRoZSBwcm92aWRlZCBtYXRyaXggY29tcG9uZW50d2lzZSBhbmQgcmV0dXJuc1xyXG5cdCAqIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZXkgYXJlIHdpdGhpbiB0aGUgcHJvdmlkZWQgZXBzaWxvbixcclxuXHQgKiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtNYXRyaXgzfSBbcmlnaHRdIFRoZSByaWdodCBoYW5kIHNpZGUgbWF0cml4LlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbZXBzaWxvbj0wXSBUaGUgZXBzaWxvbiB0byB1c2UgZm9yIGVxdWFsaXR5IHRlc3RpbmcuXHJcblx0ICogQHJldHVybnMge0Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZXkgYXJlIHdpdGhpbiB0aGUgcHJvdmlkZWQgZXBzaWxvbiwgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS5cclxuXHQgKi9cclxuXHRlcXVhbHNFcHNpbG9uKHJpZ2h0LCBlcHNpbG9uKSB7XHJcblx0XHRyZXR1cm4gTWF0cml4My5lcXVhbHNFcHNpbG9uKHRoaXMsIHJpZ2h0LCBlcHNpbG9uKTtcclxuXHR9XHJcblxyXG5cdHRvU3RyaW5nKCkge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0YCgke3RoaXNbMF19LCAke3RoaXNbM119LCAke3RoaXNbNl19KVxcbmAgK1xyXG5cdFx0XHRgKCR7dGhpc1sxXX0sICR7dGhpc1s0XX0sICR7dGhpc1s3XX0pXFxuYCArXHJcblx0XHRcdGAoJHt0aGlzWzJdfSwgJHt0aGlzWzVdfSwgJHt0aGlzWzhdfSlgXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG5cclxuY29uc3Qgc2NhbGVTY3JhdGNoMSA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHNjYWxlU2NyYXRjaDIgPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBzY3JhdGNoQ29sdW1uID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3Qgc2NhbGVTY3JhdGNoMyA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHNjYWxlU2NyYXRjaDQgPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBzY2FsZVNjcmF0Y2g1ID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbmZ1bmN0aW9uIGNvbXB1dGVGcm9iZW5pdXNOb3JtKG1hdHJpeCkge1xyXG5cdGxldCBub3JtID0gMC4wO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgOTsgKytpKSB7XHJcblx0XHRjb25zdCB0ZW1wID0gbWF0cml4W2ldO1xyXG5cdFx0bm9ybSArPSB0ZW1wICogdGVtcDtcclxuXHR9XHJcblxyXG5cdHJldHVybiBNYXRoLnNxcnQobm9ybSk7XHJcbn1cclxuXHJcbmNvbnN0IHJvd1ZhbCA9IFsxLCAwLCAwXTtcclxuY29uc3QgY29sVmFsID0gWzIsIDIsIDFdO1xyXG5cclxuZnVuY3Rpb24gb2ZmRGlhZ29uYWxGcm9iZW5pdXNOb3JtKG1hdHJpeCkge1xyXG5cdC8vIENvbXB1dGVzIHRoZSBcIm9mZi1kaWFnb25hbFwiIEZyb2Jlbml1cyBub3JtLlxyXG5cdC8vIEFzc3VtZXMgbWF0cml4IGlzIHN5bW1ldHJpYy5cclxuXHJcblx0bGV0IG5vcm0gPSAwLjA7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCAzOyArK2kpIHtcclxuXHRcdGNvbnN0IHRlbXAgPSBtYXRyaXhbTWF0cml4My5nZXRFbGVtZW50SW5kZXgoY29sVmFsW2ldLCByb3dWYWxbaV0pXTtcclxuXHRcdG5vcm0gKz0gMi4wICogdGVtcCAqIHRlbXA7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gTWF0aC5zcXJ0KG5vcm0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzaHVyRGVjb21wb3NpdGlvbihtYXRyaXgsIHJlc3VsdCkge1xyXG5cdC8vIFRoaXMgcm91dGluZSB3YXMgY3JlYXRlZCBiYXNlZCB1cG9uIE1hdHJpeCBDb21wdXRhdGlvbnMsIDNyZCBlZC4sIGJ5IEdvbHViIGFuZCBWYW4gTG9hbixcclxuXHQvLyBzZWN0aW9uIDguNC4yIFRoZSAyYnkyIFN5bW1ldHJpYyBTY2h1ciBEZWNvbXBvc2l0aW9uLlxyXG5cdC8vXHJcblx0Ly8gVGhlIHJvdXRpbmUgdGFrZXMgYSBtYXRyaXgsIHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUgc3ltbWV0cmljLCBhbmRcclxuXHQvLyBmaW5kcyB0aGUgbGFyZ2VzdCBvZmYtZGlhZ29uYWwgdGVybSwgYW5kIHRoZW4gY3JlYXRlc1xyXG5cdC8vIGEgbWF0cml4IChyZXN1bHQpIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGhlbHAgcmVkdWNlIGl0XHJcblxyXG5cdGNvbnN0IHRvbGVyYW5jZSA9IEdNYXRoLkVQU0lMT04xNTtcclxuXHJcblx0bGV0IG1heERpYWdvbmFsID0gMC4wO1xyXG5cdGxldCByb3RBeGlzID0gMTtcclxuXHJcblx0Ly8gZmluZCBwaXZvdCAocm90QXhpcykgYmFzZWQgb24gbWF4IGRpYWdvbmFsIG9mIG1hdHJpeFxyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgMzsgKytpKSB7XHJcblx0XHRjb25zdCB0ZW1wID0gTWF0aC5hYnMobWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KGNvbFZhbFtpXSwgcm93VmFsW2ldKV0pO1xyXG5cdFx0aWYgKHRlbXAgPiBtYXhEaWFnb25hbCkge1xyXG5cdFx0XHRyb3RBeGlzID0gaTtcclxuXHRcdFx0bWF4RGlhZ29uYWwgPSB0ZW1wO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bGV0IGMgPSAxLjA7XHJcblx0bGV0IHMgPSAwLjA7XHJcblxyXG5cdGNvbnN0IHAgPSByb3dWYWxbcm90QXhpc107XHJcblx0Y29uc3QgcSA9IGNvbFZhbFtyb3RBeGlzXTtcclxuXHJcblx0aWYgKE1hdGguYWJzKG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChxLCBwKV0pID4gdG9sZXJhbmNlKSB7XHJcblx0XHRjb25zdCBxcSA9IG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChxLCBxKV07XHJcblx0XHRjb25zdCBwcCA9IG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChwLCBwKV07XHJcblx0XHRjb25zdCBxcCA9IG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChxLCBwKV07XHJcblxyXG5cdFx0Y29uc3QgdGF1ID0gKHFxIC0gcHApIC8gMi4wIC8gcXA7XHJcblx0XHRsZXQgdDtcclxuXHJcblx0XHRpZiAodGF1IDwgMC4wKSB7XHJcblx0XHRcdHQgPSAtMS4wIC8gKC10YXUgKyBNYXRoLnNxcnQoMS4wICsgdGF1ICogdGF1KSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0ID0gMS4wIC8gKHRhdSArIE1hdGguc3FydCgxLjAgKyB0YXUgKiB0YXUpKTtcclxuXHRcdH1cclxuXHJcblx0XHRjID0gMS4wIC8gTWF0aC5zcXJ0KDEuMCArIHQgKiB0KTtcclxuXHRcdHMgPSB0ICogYztcclxuXHR9XHJcblxyXG5cdHJlc3VsdCA9IE1hdHJpeDMuY2xvbmUoTWF0cml4My5JREVOVElUWSwgcmVzdWx0KTtcclxuXHJcblx0cmVzdWx0W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KHAsIHApXSA9IHJlc3VsdFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChxLCBxKV0gPSBjO1xyXG5cdHJlc3VsdFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChxLCBwKV0gPSBzO1xyXG5cdHJlc3VsdFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChwLCBxKV0gPSAtcztcclxuXHJcblx0cmV0dXJuIHJlc3VsdDtcclxufVxyXG5jb25zdCBzY3JhdGNoVHJhbnNwb3NlTWF0cml4ID0gbmV3IE1hdHJpeDMoKTtcclxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MztcclxuIiwiaW1wb3J0IHsgQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IEdNYXRoIGZyb20gXCIuL01hdGhcIjtcclxuXHJcbmNsYXNzIFZlY3RvcjQge1xyXG5cdHB1YmxpYyBzdGF0aWMgWkVSTyA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjQoMC4wLCAwLjAsIDAuMCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgT05FID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yNCgxLjAsIDEuMCwgMS4wLCAxLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBVTklUX1ggPSBPYmplY3QuZnJlZXplKG5ldyBWZWN0b3I0KDEuMCwgMC4wLCAwLjAsIDAuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIFVOSVRfWSA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjQoMC4wLCAxLjAsIDAuMCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgVU5JVF9aID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yNCgwLjAsIDAuMCwgMS4wLCAwLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBVTklUX1cgPSBPYmplY3QuZnJlZXplKG5ldyBWZWN0b3I0KDAuMCwgMC4wLCAwLjAsIDEuMCkpO1xyXG5cdHg6IG51bWJlcjtcclxuXHR5OiBudW1iZXI7XHJcblx0ejogbnVtYmVyO1xyXG5cdHc6IG51bWJlcjtcclxuXHRjb25zdHJ1Y3Rvcih4ID0gMCwgeSA9IDAsIHogPSAwLCB3ID0gMCkge1xyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblx0XHR0aGlzLnogPSB6O1xyXG5cdFx0dGhpcy53ID0gdztcclxuXHR9XHJcblx0c2V0KHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIsIHc6IG51bWJlcik6IHZvaWQge1xyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblx0XHR0aGlzLnogPSB6O1xyXG5cdFx0dGhpcy53ID0gdztcclxuXHR9XHJcblx0dG9BcnJheSgpOiBudW1iZXJbXSB7XHJcblx0XHRyZXR1cm4gW3RoaXMueCwgdGhpcy55LCB0aGlzLnosIHRoaXMud107XHJcblx0fVxyXG5cclxuXHRjbG9uZShyZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdHJldHVybiBWZWN0b3I0LmNsb25lKHRoaXMsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRlcXVhbHMocmlnaHQ6IFZlY3RvcjQpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBWZWN0b3I0LmVxdWFscyh0aGlzLCByaWdodCk7XHJcblx0fVxyXG5cclxuXHRlcXVhbHNFcHNpbG9uKHJpZ2h0OiBWZWN0b3I0LCByZWxhdGl2ZUVwc2lsb24gPSAwLCBhYnNvbHV0ZUVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gVmVjdG9yNC5lcXVhbHNFcHNpbG9uKHRoaXMsIHJpZ2h0LCByZWxhdGl2ZUVwc2lsb24sIGFic29sdXRlRXBzaWxvbik7XHJcblx0fVxyXG5cclxuXHR0b1N0cmluZygpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIGAoJHt0aGlzLnh9LCAke3RoaXMueX0sICR7dGhpcy56fSwgJHt0aGlzLnd9KWA7XHJcblx0fVxyXG5cdGZyb21CdWZmZXJBdHRyaWJ1dGUoYXR0cmlidXRlOiBBdHRyaWJ1dGUsIGluZGV4OiBudW1iZXIpOiBWZWN0b3I0IHtcclxuXHRcdHRoaXMueCA9IGF0dHJpYnV0ZS5nZXRYKGluZGV4KTtcclxuXHRcdHRoaXMueSA9IGF0dHJpYnV0ZS5nZXRZKGluZGV4KTtcclxuXHRcdHRoaXMueiA9IGF0dHJpYnV0ZS5nZXRaKGluZGV4KTtcclxuXHRcdHRoaXMudyA9IGF0dHJpYnV0ZS5nZXRXKGluZGV4KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tRWxlbWVudHMoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciwgdzogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yNCh4LCB5LCB6LCB3KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXN1bHQudyA9IHc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNsb25lKGNhcnRlc2lhbjogVmVjdG9yNCwgcmVzdWx0OiBWZWN0b3I0KTogVmVjdG9yNCB7XHJcblx0XHRpZiAoIWRlZmluZWQoY2FydGVzaWFuKSkge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yNChjYXJ0ZXNpYW4ueCwgY2FydGVzaWFuLnksIGNhcnRlc2lhbi56LCBjYXJ0ZXNpYW4udyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0LnggPSBjYXJ0ZXNpYW4ueDtcclxuXHRcdHJlc3VsdC55ID0gY2FydGVzaWFuLnk7XHJcblx0XHRyZXN1bHQueiA9IGNhcnRlc2lhbi56O1xyXG5cdFx0cmVzdWx0LncgPSBjYXJ0ZXNpYW4udztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWF4aW11bUNvbXBvbmVudChjYXJ0ZXNpYW46IFZlY3RvcjQpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIE1hdGgubWF4KGNhcnRlc2lhbi54LCBjYXJ0ZXNpYW4ueSwgY2FydGVzaWFuLnosIGNhcnRlc2lhbi53KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtaW5pbXVtQ29tcG9uZW50KGNhcnRlc2lhbjogVmVjdG9yNCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gTWF0aC5taW4oY2FydGVzaWFuLngsIGNhcnRlc2lhbi55LCBjYXJ0ZXNpYW4ueiwgY2FydGVzaWFuLncpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1pbmltdW1CeUNvbXBvbmVudChmaXJzdDogVmVjdG9yNCwgc2Vjb25kOiBWZWN0b3I0LCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdHJlc3VsdC54ID0gTWF0aC5taW4oZmlyc3QueCwgc2Vjb25kLngpO1xyXG5cdFx0cmVzdWx0LnkgPSBNYXRoLm1pbihmaXJzdC55LCBzZWNvbmQueSk7XHJcblx0XHRyZXN1bHQueiA9IE1hdGgubWluKGZpcnN0LnosIHNlY29uZC56KTtcclxuXHRcdHJlc3VsdC53ID0gTWF0aC5taW4oZmlyc3Qudywgc2Vjb25kLncpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWF4aW11bUJ5Q29tcG9uZW50KGZpcnN0OiBWZWN0b3I0LCBzZWNvbmQ6IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0cmVzdWx0LnggPSBNYXRoLm1heChmaXJzdC54LCBzZWNvbmQueCk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGgubWF4KGZpcnN0LnksIHNlY29uZC55KTtcclxuXHRcdHJlc3VsdC56ID0gTWF0aC5tYXgoZmlyc3Queiwgc2Vjb25kLnopO1xyXG5cdFx0cmVzdWx0LncgPSBNYXRoLm1heChmaXJzdC53LCBzZWNvbmQudyk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjbGFtcCh2YWx1ZTogVmVjdG9yNCwgbWluOiBWZWN0b3I0LCBtYXg6IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0Y29uc3QgeCA9IEdNYXRoLmNsYW1wKHZhbHVlLngsIG1pbi54LCBtYXgueCk7XHJcblx0XHRjb25zdCB5ID0gR01hdGguY2xhbXAodmFsdWUueSwgbWluLnksIG1heC55KTtcclxuXHRcdGNvbnN0IHogPSBHTWF0aC5jbGFtcCh2YWx1ZS56LCBtaW4ueiwgbWF4LnopO1xyXG5cdFx0Y29uc3QgdyA9IEdNYXRoLmNsYW1wKHZhbHVlLncsIG1pbi53LCBtYXgudyk7XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmVzdWx0LnogPSB6O1xyXG5cdFx0cmVzdWx0LncgPSB3O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWFnbml0dWRlU3F1YXJlZChjYXJ0ZXNpYW46IFZlY3RvcjQpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0Y2FydGVzaWFuLnggKiBjYXJ0ZXNpYW4ueCArXHJcblx0XHRcdGNhcnRlc2lhbi55ICogY2FydGVzaWFuLnkgK1xyXG5cdFx0XHRjYXJ0ZXNpYW4ueiAqIGNhcnRlc2lhbi56ICtcclxuXHRcdFx0Y2FydGVzaWFuLncgKiBjYXJ0ZXNpYW4ud1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtYWduaXR1ZGUoY2FydGVzaWFuOiBWZWN0b3I0KTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBNYXRoLnNxcnQoVmVjdG9yNC5tYWduaXR1ZGVTcXVhcmVkKGNhcnRlc2lhbikpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRpc3RhbmNlKGxlZnQ6IFZlY3RvcjQsIHJpZ2h0OiBWZWN0b3I0KTogbnVtYmVyIHtcclxuXHRcdFZlY3RvcjQuc3VidHJhY3QobGVmdCwgcmlnaHQsIGRpc3RhbmNlU2NyYXRjaCk7XHJcblx0XHRyZXR1cm4gVmVjdG9yNC5tYWduaXR1ZGUoZGlzdGFuY2VTY3JhdGNoKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXN0YW5jZVNxdWFyZWQobGVmdDogVmVjdG9yNCwgcmlnaHQ6IFZlY3RvcjQpOiBudW1iZXIge1xyXG5cdFx0VmVjdG9yNC5zdWJ0cmFjdChsZWZ0LCByaWdodCwgZGlzdGFuY2VTY3JhdGNoKTtcclxuXHRcdHJldHVybiBWZWN0b3I0Lm1hZ25pdHVkZVNxdWFyZWQoZGlzdGFuY2VTY3JhdGNoKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBub3JtYWxpemUoY2FydGVzaWFuOiBWZWN0b3I0LCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdGNvbnN0IG1hZ25pdHVkZSA9IFZlY3RvcjQubWFnbml0dWRlKGNhcnRlc2lhbik7XHJcblxyXG5cdFx0cmVzdWx0LnggPSBjYXJ0ZXNpYW4ueCAvIG1hZ25pdHVkZTtcclxuXHRcdHJlc3VsdC55ID0gY2FydGVzaWFuLnkgLyBtYWduaXR1ZGU7XHJcblx0XHRyZXN1bHQueiA9IGNhcnRlc2lhbi56IC8gbWFnbml0dWRlO1xyXG5cdFx0cmVzdWx0LncgPSBjYXJ0ZXNpYW4udyAvIG1hZ25pdHVkZTtcclxuXHJcblx0XHQvLyA+PmluY2x1ZGVTdGFydCgnZGVidWcnLCBwcmFnbWFzLmRlYnVnKTtcclxuXHRcdGlmIChpc05hTihyZXN1bHQueCkgfHwgaXNOYU4ocmVzdWx0LnkpIHx8IGlzTmFOKHJlc3VsdC56KSB8fCBpc05hTihyZXN1bHQudykpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm9ybWFsaXplZCByZXN1bHQgaXMgbm90IGEgbnVtYmVyXCIpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gPj5pbmNsdWRlRW5kKCdkZWJ1ZycpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZG90KGxlZnQ6IFZlY3RvcjQsIHJpZ2h0OiBWZWN0b3I0KTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBsZWZ0LnggKiByaWdodC54ICsgbGVmdC55ICogcmlnaHQueSArIGxlZnQueiAqIHJpZ2h0LnogKyBsZWZ0LncgKiByaWdodC53O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5Q29tcG9uZW50cyhsZWZ0OiBWZWN0b3I0LCByaWdodDogVmVjdG9yNCwgcmVzdWx0OiBWZWN0b3I0KTogVmVjdG9yNCB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCAqIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSAqIHJpZ2h0Lnk7XHJcblx0XHRyZXN1bHQueiA9IGxlZnQueiAqIHJpZ2h0Lno7XHJcblx0XHRyZXN1bHQudyA9IGxlZnQudyAqIHJpZ2h0Lnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRpdmlkZUNvbXBvbmVudHMobGVmdDogVmVjdG9yNCwgcmlnaHQ6IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0cmVzdWx0LnggPSBsZWZ0LnggLyByaWdodC54O1xyXG5cdFx0cmVzdWx0LnkgPSBsZWZ0LnkgLyByaWdodC55O1xyXG5cdFx0cmVzdWx0LnogPSBsZWZ0LnogLyByaWdodC56O1xyXG5cdFx0cmVzdWx0LncgPSBsZWZ0LncgLyByaWdodC53O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhZGQobGVmdDogVmVjdG9yNCwgcmlnaHQ6IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0cmVzdWx0LnggPSBsZWZ0LnggKyByaWdodC54O1xyXG5cdFx0cmVzdWx0LnkgPSBsZWZ0LnkgKyByaWdodC55O1xyXG5cdFx0cmVzdWx0LnogPSBsZWZ0LnogKyByaWdodC56O1xyXG5cdFx0cmVzdWx0LncgPSBsZWZ0LncgKyByaWdodC53O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzdWJ0cmFjdChsZWZ0OiBWZWN0b3I0LCByaWdodDogVmVjdG9yNCwgcmVzdWx0OiBWZWN0b3I0KTogVmVjdG9yNCB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCAtIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSAtIHJpZ2h0Lnk7XHJcblx0XHRyZXN1bHQueiA9IGxlZnQueiAtIHJpZ2h0Lno7XHJcblx0XHRyZXN1bHQudyA9IGxlZnQudyAtIHJpZ2h0Lnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlTY2FsYXIoY2FydGVzaWFuOiBWZWN0b3I0LCBzY2FsYXI6IG51bWJlciwgcmVzdWx0OiBWZWN0b3I0KTogVmVjdG9yNCB7XHJcblx0XHRyZXN1bHQueCA9IGNhcnRlc2lhbi54ICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnkgPSBjYXJ0ZXNpYW4ueSAqIHNjYWxhcjtcclxuXHRcdHJlc3VsdC56ID0gY2FydGVzaWFuLnogKiBzY2FsYXI7XHJcblx0XHRyZXN1bHQudyA9IGNhcnRlc2lhbi53ICogc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXZpZGVCeVNjYWxhcihjYXJ0ZXNpYW46IFZlY3RvcjQsIHNjYWxhcjogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLnggLyBzY2FsYXI7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55IC8gc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnogPSBjYXJ0ZXNpYW4ueiAvIHNjYWxhcjtcclxuXHRcdHJlc3VsdC53ID0gY2FydGVzaWFuLncgLyBzY2FsYXI7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG5lZ2F0ZShjYXJ0ZXNpYW46IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0cmVzdWx0LnggPSAtY2FydGVzaWFuLng7XHJcblx0XHRyZXN1bHQueSA9IC1jYXJ0ZXNpYW4ueTtcclxuXHRcdHJlc3VsdC56ID0gLWNhcnRlc2lhbi56O1xyXG5cdFx0cmVzdWx0LncgPSAtY2FydGVzaWFuLnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFicyhjYXJ0ZXNpYW46IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0cmVzdWx0LnggPSBNYXRoLmFicyhjYXJ0ZXNpYW4ueCk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGguYWJzKGNhcnRlc2lhbi55KTtcclxuXHRcdHJlc3VsdC56ID0gTWF0aC5hYnMoY2FydGVzaWFuLnopO1xyXG5cdFx0cmVzdWx0LncgPSBNYXRoLmFicyhjYXJ0ZXNpYW4udyk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGxlcnAoc3RhcnQ6IFZlY3RvcjQsIGVuZDogVmVjdG9yNCwgdDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdFZlY3RvcjQubXVsdGlwbHlCeVNjYWxhcihlbmQsIHQsIGxlcnBTY3JhdGNoKTtcclxuXHRcdHJlc3VsdCA9IFZlY3RvcjQubXVsdGlwbHlCeVNjYWxhcihzdGFydCwgMS4wIC0gdCwgcmVzdWx0KTtcclxuXHRcdHJldHVybiBWZWN0b3I0LmFkZChsZXJwU2NyYXRjaCwgcmVzdWx0LCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBWZWN0b3I0LCByaWdodDogVmVjdG9yNCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdGxlZnQueCA9PT0gcmlnaHQueCAmJlxyXG5cdFx0XHRcdGxlZnQueSA9PT0gcmlnaHQueSAmJlxyXG5cdFx0XHRcdGxlZnQueiA9PT0gcmlnaHQueiAmJlxyXG5cdFx0XHRcdGxlZnQudyA9PT0gcmlnaHQudylcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZXF1YWxzQXJyYXkoY2FydGVzaWFuOiBWZWN0b3I0LCBhcnJheTogbnVtYmVyW10sIG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRjYXJ0ZXNpYW4ueCA9PT0gYXJyYXlbb2Zmc2V0XSAmJlxyXG5cdFx0XHRjYXJ0ZXNpYW4ueSA9PT0gYXJyYXlbb2Zmc2V0ICsgMV0gJiZcclxuXHRcdFx0Y2FydGVzaWFuLnogPT09IGFycmF5W29mZnNldCArIDJdICYmXHJcblx0XHRcdGNhcnRlc2lhbi53ID09PSBhcnJheVtvZmZzZXQgKyAzXVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHNFcHNpbG9uKGxlZnQ6IFZlY3RvcjQsIHJpZ2h0OiBWZWN0b3I0LCByZWxhdGl2ZUVwc2lsb24gPSAwLCBhYnNvbHV0ZUVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRsZWZ0ID09PSByaWdodCB8fFxyXG5cdFx0XHQoZGVmaW5lZChsZWZ0KSAmJlxyXG5cdFx0XHRcdGRlZmluZWQocmlnaHQpICYmXHJcblx0XHRcdFx0R01hdGguZXF1YWxzRXBzaWxvbihsZWZ0LngsIHJpZ2h0LngsIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKSAmJlxyXG5cdFx0XHRcdEdNYXRoLmVxdWFsc0Vwc2lsb24obGVmdC55LCByaWdodC55LCByZWxhdGl2ZUVwc2lsb24sIGFic29sdXRlRXBzaWxvbikgJiZcclxuXHRcdFx0XHRHTWF0aC5lcXVhbHNFcHNpbG9uKGxlZnQueiwgcmlnaHQueiwgcmVsYXRpdmVFcHNpbG9uLCBhYnNvbHV0ZUVwc2lsb24pICYmXHJcblx0XHRcdFx0R01hdGguZXF1YWxzRXBzaWxvbihsZWZ0LncsIHJpZ2h0LncsIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKSlcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcblxyXG4vLyBzY3JhdGNoVThBcnJheSBhbmQgc2NyYXRjaEYzMkFycmF5IGFyZSB2aWV3cyBpbnRvIHRoZSBzYW1lIGJ1ZmZlclxyXG5jb25zdCBzY3JhdGNoRjMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDEpO1xyXG5jb25zdCBzY3JhdGNoVThBcnJheSA9IG5ldyBVaW50OEFycmF5KHNjcmF0Y2hGMzJBcnJheS5idWZmZXIpO1xyXG5cclxuY29uc3QgdGVzdFUzMiA9IG5ldyBVaW50MzJBcnJheShbMHgxMTIyMzM0NF0pO1xyXG5jb25zdCB0ZXN0VTggPSBuZXcgVWludDhBcnJheSh0ZXN0VTMyLmJ1ZmZlcik7XHJcbmNvbnN0IGxpdHRsZUVuZGlhbiA9IHRlc3RVOFswXSA9PT0gMHg0NDtcclxuY29uc3QgZGlzdGFuY2VTY3JhdGNoID0gbmV3IFZlY3RvcjQoKTtcclxuY29uc3QgbGVycFNjcmF0Y2ggPSBuZXcgVmVjdG9yNCgpO1xyXG5jb25zdCBtb3N0T3J0aG9nb25hbEF4aXNTY3JhdGNoID0gbmV3IFZlY3RvcjQoKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZlY3RvcjQ7XHJcbiIsImltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcbmltcG9ydCBHTWF0aCBmcm9tIFwiLi9NYXRoXCI7XG5pbXBvcnQgTWF0cml4MyBmcm9tIFwiLi9NYXRyaXgzXCI7XG5pbXBvcnQgeyBRdWF0ZXJuaW9uIH0gZnJvbSBcIi4vUXVhdGVybmlvblwiO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4vVmVjdG9yM1wiO1xuaW1wb3J0IFZlY3RvcjQgZnJvbSBcIi4vVmVjdG9yNFwiO1xuY2xhc3MgTWF0cml4NCB7XG5cdHB1YmxpYyBzdGF0aWMgSURFTlRJVFkgPSBPYmplY3QuZnJlZXplKFxuXHRcdG5ldyBNYXRyaXg0KDEuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAxLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMS4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDEuMClcblx0KTtcblx0cHVibGljIHN0YXRpYyBaRVJPID0gT2JqZWN0LmZyZWV6ZShcblx0XHRuZXcgTWF0cml4NCgwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApXG5cdCk7XG5cdC8qKlxuXHQgKiBBIDR4NCBtYXRyaXgsIGluZGV4YWJsZSBhcyBhIGNvbHVtbi1tYWpvciBvcmRlciBhcnJheS5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93MD0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAwLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3cwPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDAuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMlJvdzA9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAyLCByb3cgMC5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4zUm93MD0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDMsIHJvdyAwLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjBSb3cxPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMCwgcm93IDEuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMVJvdzE9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAxLCByb3cgMS5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4yUm93MT0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDIsIHJvdyAxLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjNSb3cxPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMywgcm93IDEuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMFJvdzI9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAwLCByb3cgMi5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4xUm93Mj0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDEsIHJvdyAyLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjJSb3cyPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMiwgcm93IDIuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uM1JvdzI9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAzLCByb3cgMi5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93Mz0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAzLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3czPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDMuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMlJvdzM9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAyLCByb3cgMy5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4zUm93Mz0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDMsIHJvdyAzLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoXG5cdFx0Y29sdW1uMFJvdzAgPSAwLFxuXHRcdGNvbHVtbjFSb3cwID0gMCxcblx0XHRjb2x1bW4yUm93MCA9IDAsXG5cdFx0Y29sdW1uM1JvdzAgPSAwLFxuXHRcdGNvbHVtbjBSb3cxID0gMCxcblx0XHRjb2x1bW4xUm93MSA9IDAsXG5cdFx0Y29sdW1uMlJvdzEgPSAwLFxuXHRcdGNvbHVtbjNSb3cxID0gMCxcblx0XHRjb2x1bW4wUm93MiA9IDAsXG5cdFx0Y29sdW1uMVJvdzIgPSAwLFxuXHRcdGNvbHVtbjJSb3cyID0gMCxcblx0XHRjb2x1bW4zUm93MiA9IDAsXG5cdFx0Y29sdW1uMFJvdzMgPSAwLFxuXHRcdGNvbHVtbjFSb3czID0gMCxcblx0XHRjb2x1bW4yUm93MyA9IDAsXG5cdFx0Y29sdW1uM1JvdzMgPSAwXG5cdCkge1xuXHRcdHRoaXNbMF0gPSBjb2x1bW4wUm93MDtcblx0XHR0aGlzWzFdID0gY29sdW1uMFJvdzE7XG5cdFx0dGhpc1syXSA9IGNvbHVtbjBSb3cyO1xuXHRcdHRoaXNbM10gPSBjb2x1bW4wUm93Mztcblx0XHR0aGlzWzRdID0gY29sdW1uMVJvdzA7XG5cdFx0dGhpc1s1XSA9IGNvbHVtbjFSb3cxO1xuXHRcdHRoaXNbNl0gPSBjb2x1bW4xUm93Mjtcblx0XHR0aGlzWzddID0gY29sdW1uMVJvdzM7XG5cdFx0dGhpc1s4XSA9IGNvbHVtbjJSb3cwO1xuXHRcdHRoaXNbOV0gPSBjb2x1bW4yUm93MTtcblx0XHR0aGlzWzEwXSA9IGNvbHVtbjJSb3cyO1xuXHRcdHRoaXNbMTFdID0gY29sdW1uMlJvdzM7XG5cdFx0dGhpc1sxMl0gPSBjb2x1bW4zUm93MDtcblx0XHR0aGlzWzEzXSA9IGNvbHVtbjNSb3cxO1xuXHRcdHRoaXNbMTRdID0gY29sdW1uM1JvdzI7XG5cdFx0dGhpc1sxNV0gPSBjb2x1bW4zUm93Mztcblx0fVxuXHQvLyA/Pz8/XG5cdGNsb25lKHJlc3VsdDogTWF0cml4NCA9IG5ldyBNYXRyaXg0KCkpOiBNYXRyaXg0IHtcblx0XHRyZXR1cm4gTWF0cml4NC5jbG9uZSh0aGlzLCByZXN1bHQpO1xuXHR9XG5cdHNldChtYXQ0OiBNYXRyaXg0KSB7XG5cdFx0TWF0cml4NC5jbG9uZShtYXQ0LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRlcXVhbHMocmlnaHQ6IE1hdHJpeDQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gTWF0cml4NC5lcXVhbHModGhpcywgcmlnaHQpO1xuXHR9XG5cdGNvbXBvc2UocG9zaXRpb246IFZlY3RvcjMsIHF1YXRlcm5pb246IFF1YXRlcm5pb24sIHNjYWxlOiBWZWN0b3IzKTogTWF0cml4NCB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzO1xuXG5cdFx0Y29uc3QgeCA9IHF1YXRlcm5pb24ueCxcblx0XHRcdHkgPSBxdWF0ZXJuaW9uLnksXG5cdFx0XHR6ID0gcXVhdGVybmlvbi56LFxuXHRcdFx0dyA9IHF1YXRlcm5pb24udztcblx0XHRjb25zdCB4MiA9IHggKyB4LFxuXHRcdFx0eTIgPSB5ICsgeSxcblx0XHRcdHoyID0geiArIHo7XG5cdFx0Y29uc3QgeHggPSB4ICogeDIsXG5cdFx0XHR4eSA9IHggKiB5Mixcblx0XHRcdHh6ID0geCAqIHoyO1xuXHRcdGNvbnN0IHl5ID0geSAqIHkyLFxuXHRcdFx0eXogPSB5ICogejIsXG5cdFx0XHR6eiA9IHogKiB6Mjtcblx0XHRjb25zdCB3eCA9IHcgKiB4Mixcblx0XHRcdHd5ID0gdyAqIHkyLFxuXHRcdFx0d3ogPSB3ICogejI7XG5cblx0XHRjb25zdCBzeCA9IHNjYWxlLngsXG5cdFx0XHRzeSA9IHNjYWxlLnksXG5cdFx0XHRzeiA9IHNjYWxlLno7XG5cblx0XHR0ZVswXSA9ICgxIC0gKHl5ICsgenopKSAqIHN4O1xuXHRcdHRlWzFdID0gKHh5ICsgd3opICogc3g7XG5cdFx0dGVbMl0gPSAoeHogLSB3eSkgKiBzeDtcblx0XHR0ZVszXSA9IDA7XG5cblx0XHR0ZVs0XSA9ICh4eSAtIHd6KSAqIHN5O1xuXHRcdHRlWzVdID0gKDEgLSAoeHggKyB6eikpICogc3k7XG5cdFx0dGVbNl0gPSAoeXogKyB3eCkgKiBzeTtcblx0XHR0ZVs3XSA9IDA7XG5cblx0XHR0ZVs4XSA9ICh4eiArIHd5KSAqIHN6O1xuXHRcdHRlWzldID0gKHl6IC0gd3gpICogc3o7XG5cdFx0dGVbMTBdID0gKDEgLSAoeHggKyB5eSkpICogc3o7XG5cdFx0dGVbMTFdID0gMDtcblxuXHRcdHRlWzEyXSA9IHBvc2l0aW9uLng7XG5cdFx0dGVbMTNdID0gcG9zaXRpb24ueTtcblx0XHR0ZVsxNF0gPSBwb3NpdGlvbi56O1xuXHRcdHRlWzE1XSA9IDE7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRlcXVhbHNFcHNpbG9uKHJpZ2h0OiBNYXRyaXg0LCBlcHNpbG9uID0gMCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBNYXRyaXg0LmVxdWFsc0Vwc2lsb24odGhpcywgcmlnaHQsIGVwc2lsb24pO1xuXHR9XG5cdGxvb2tBdChleWU6IFZlY3RvcjMsIHRhcmdldDogVmVjdG9yMywgdXA6IFZlY3RvcjMpOiBNYXRyaXg0IHtcblx0XHRjb25zdCBtYXRyaXggPSB0aGlzO1xuXHRcdFZlY3RvcjMuc3VidHJhY3QoZXllLCB0YXJnZXQsIHopO1xuXHRcdGlmICh6Lmxlbmd0aCgpID09PSAwKSB7XG5cdFx0XHQvLyBleWUgYW5kIHRhcmdldCBhcmUgaW4gdGhlIHNhbWUgcG9zaXRpb25cblx0XHRcdHoueiA9IDE7XG5cdFx0fVxuXHRcdHoubm9ybWFsaXplKCk7XG5cdFx0VmVjdG9yMy5jcm9zcyh1cCwgeiwgeCk7XG5cdFx0aWYgKHgubGVuZ3RoKCkgPT09IDApIHtcblx0XHRcdC8vIHVwIGFuZCB6IGFyZSBwYXJhbGxlbFxuXG5cdFx0XHRpZiAoTWF0aC5hYnModXAueikgPT09IDEpIHtcblx0XHRcdFx0ei54ICs9IDAuMDAwMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHoueiArPSAwLjAwMDE7XG5cdFx0XHR9XG5cdFx0XHR6Lm5vcm1hbGl6ZSgpO1xuXHRcdFx0VmVjdG9yMy5jcm9zcyh1cCwgeiwgeCk7XG5cdFx0fVxuXHRcdHgubm9ybWFsaXplKCk7XG5cdFx0VmVjdG9yMy5jcm9zcyh6LCB4LCB5KTtcblx0XHRtYXRyaXhbMF0gPSB4Lng7XG5cdFx0bWF0cml4WzRdID0geS54O1xuXHRcdG1hdHJpeFs4XSA9IHoueDtcblx0XHRtYXRyaXhbMV0gPSB4Lnk7XG5cdFx0bWF0cml4WzVdID0geS55O1xuXHRcdG1hdHJpeFs5XSA9IHoueTtcblx0XHRtYXRyaXhbMl0gPSB4Lno7XG5cdFx0bWF0cml4WzZdID0geS56O1xuXHRcdG1hdHJpeFsxMF0gPSB6Lno7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0YCgke3RoaXNbMF19LCAke3RoaXNbNF19LCAke3RoaXNbOF19LCAke3RoaXNbMTJdfSlcXG5gICtcblx0XHRcdGAoJHt0aGlzWzFdfSwgJHt0aGlzWzVdfSwgJHt0aGlzWzldfSwgJHt0aGlzWzEzXX0pXFxuYCArXG5cdFx0XHRgKCR7dGhpc1syXX0sICR7dGhpc1s2XX0sICR7dGhpc1sxMF19LCAke3RoaXNbMTRdfSlcXG5gICtcblx0XHRcdGAoJHt0aGlzWzNdfSwgJHt0aGlzWzddfSwgJHt0aGlzWzExXX0sICR7dGhpc1sxNV19KWBcblx0XHQpO1xuXHR9XG5cdHN0YXRpYyBjbG9uZShtYXRyaXg6IE1hdHJpeDQgfCBudW1iZXJbXSwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0aWYgKCFkZWZpbmVkKG1hdHJpeCkpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDQoXG5cdFx0XHRcdG1hdHJpeFswXSxcblx0XHRcdFx0bWF0cml4WzRdLFxuXHRcdFx0XHRtYXRyaXhbOF0sXG5cdFx0XHRcdG1hdHJpeFsxMl0sXG5cdFx0XHRcdG1hdHJpeFsxXSxcblx0XHRcdFx0bWF0cml4WzVdLFxuXHRcdFx0XHRtYXRyaXhbOV0sXG5cdFx0XHRcdG1hdHJpeFsxM10sXG5cdFx0XHRcdG1hdHJpeFsyXSxcblx0XHRcdFx0bWF0cml4WzZdLFxuXHRcdFx0XHRtYXRyaXhbMTBdLFxuXHRcdFx0XHRtYXRyaXhbMTRdLFxuXHRcdFx0XHRtYXRyaXhbM10sXG5cdFx0XHRcdG1hdHJpeFs3XSxcblx0XHRcdFx0bWF0cml4WzExXSxcblx0XHRcdFx0bWF0cml4WzE1XVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdO1xuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXTtcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl07XG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdO1xuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeFs0XTtcblx0XHRyZXN1bHRbNV0gPSBtYXRyaXhbNV07XG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdO1xuXHRcdHJlc3VsdFs3XSA9IG1hdHJpeFs3XTtcblx0XHRyZXN1bHRbOF0gPSBtYXRyaXhbOF07XG5cdFx0cmVzdWx0WzldID0gbWF0cml4WzldO1xuXHRcdHJlc3VsdFsxMF0gPSBtYXRyaXhbMTBdO1xuXHRcdHJlc3VsdFsxMV0gPSBtYXRyaXhbMTFdO1xuXHRcdHJlc3VsdFsxMl0gPSBtYXRyaXhbMTJdO1xuXHRcdHJlc3VsdFsxM10gPSBtYXRyaXhbMTNdO1xuXHRcdHJlc3VsdFsxNF0gPSBtYXRyaXhbMTRdO1xuXHRcdHJlc3VsdFsxNV0gPSBtYXRyaXhbMTVdO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgZnJvbUNvbHVtbk1ham9yQXJyYXkodmFsdWVzOiBudW1iZXJbXSwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0cmV0dXJuIE1hdHJpeDQuY2xvbmUodmFsdWVzLCByZXN1bHQpO1xuXHR9XG5cblx0c3RhdGljIGZyb21Sb3dNYWpvckFycmF5KHZhbHVlczogbnVtYmVyW10sIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDQoXG5cdFx0XHRcdHZhbHVlc1swXSxcblx0XHRcdFx0dmFsdWVzWzFdLFxuXHRcdFx0XHR2YWx1ZXNbMl0sXG5cdFx0XHRcdHZhbHVlc1szXSxcblx0XHRcdFx0dmFsdWVzWzRdLFxuXHRcdFx0XHR2YWx1ZXNbNV0sXG5cdFx0XHRcdHZhbHVlc1s2XSxcblx0XHRcdFx0dmFsdWVzWzddLFxuXHRcdFx0XHR2YWx1ZXNbOF0sXG5cdFx0XHRcdHZhbHVlc1s5XSxcblx0XHRcdFx0dmFsdWVzWzEwXSxcblx0XHRcdFx0dmFsdWVzWzExXSxcblx0XHRcdFx0dmFsdWVzWzEyXSxcblx0XHRcdFx0dmFsdWVzWzEzXSxcblx0XHRcdFx0dmFsdWVzWzE0XSxcblx0XHRcdFx0dmFsdWVzWzE1XVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmVzdWx0WzBdID0gdmFsdWVzWzBdO1xuXHRcdHJlc3VsdFsxXSA9IHZhbHVlc1s0XTtcblx0XHRyZXN1bHRbMl0gPSB2YWx1ZXNbOF07XG5cdFx0cmVzdWx0WzNdID0gdmFsdWVzWzEyXTtcblx0XHRyZXN1bHRbNF0gPSB2YWx1ZXNbMV07XG5cdFx0cmVzdWx0WzVdID0gdmFsdWVzWzVdO1xuXHRcdHJlc3VsdFs2XSA9IHZhbHVlc1s5XTtcblx0XHRyZXN1bHRbN10gPSB2YWx1ZXNbMTNdO1xuXHRcdHJlc3VsdFs4XSA9IHZhbHVlc1syXTtcblx0XHRyZXN1bHRbOV0gPSB2YWx1ZXNbNl07XG5cdFx0cmVzdWx0WzEwXSA9IHZhbHVlc1sxMF07XG5cdFx0cmVzdWx0WzExXSA9IHZhbHVlc1sxNF07XG5cdFx0cmVzdWx0WzEyXSA9IHZhbHVlc1szXTtcblx0XHRyZXN1bHRbMTNdID0gdmFsdWVzWzddO1xuXHRcdHJlc3VsdFsxNF0gPSB2YWx1ZXNbMTFdO1xuXHRcdHJlc3VsdFsxNV0gPSB2YWx1ZXNbMTVdO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24ocm90YXRpb246IE1hdHJpeDMsIHRyYW5zbGF0aW9uOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHR0cmFuc2xhdGlvbiA9IGRlZmF1bHRWYWx1ZSh0cmFuc2xhdGlvbiwgVmVjdG9yMy5aRVJPKTtcblxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDQoXG5cdFx0XHRcdHJvdGF0aW9uWzBdLFxuXHRcdFx0XHRyb3RhdGlvblszXSxcblx0XHRcdFx0cm90YXRpb25bNl0sXG5cdFx0XHRcdHRyYW5zbGF0aW9uLngsXG5cdFx0XHRcdHJvdGF0aW9uWzFdLFxuXHRcdFx0XHRyb3RhdGlvbls0XSxcblx0XHRcdFx0cm90YXRpb25bN10sXG5cdFx0XHRcdHRyYW5zbGF0aW9uLnksXG5cdFx0XHRcdHJvdGF0aW9uWzJdLFxuXHRcdFx0XHRyb3RhdGlvbls1XSxcblx0XHRcdFx0cm90YXRpb25bOF0sXG5cdFx0XHRcdHRyYW5zbGF0aW9uLnosXG5cdFx0XHRcdDAuMCxcblx0XHRcdFx0MC4wLFxuXHRcdFx0XHQwLjAsXG5cdFx0XHRcdDEuMFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXN1bHRbMF0gPSByb3RhdGlvblswXTtcblx0XHRyZXN1bHRbMV0gPSByb3RhdGlvblsxXTtcblx0XHRyZXN1bHRbMl0gPSByb3RhdGlvblsyXTtcblx0XHRyZXN1bHRbM10gPSAwLjA7XG5cdFx0cmVzdWx0WzRdID0gcm90YXRpb25bM107XG5cdFx0cmVzdWx0WzVdID0gcm90YXRpb25bNF07XG5cdFx0cmVzdWx0WzZdID0gcm90YXRpb25bNV07XG5cdFx0cmVzdWx0WzddID0gMC4wO1xuXHRcdHJlc3VsdFs4XSA9IHJvdGF0aW9uWzZdO1xuXHRcdHJlc3VsdFs5XSA9IHJvdGF0aW9uWzddO1xuXHRcdHJlc3VsdFsxMF0gPSByb3RhdGlvbls4XTtcblx0XHRyZXN1bHRbMTFdID0gMC4wO1xuXHRcdHJlc3VsdFsxMl0gPSB0cmFuc2xhdGlvbi54O1xuXHRcdHJlc3VsdFsxM10gPSB0cmFuc2xhdGlvbi55O1xuXHRcdHJlc3VsdFsxNF0gPSB0cmFuc2xhdGlvbi56O1xuXHRcdHJlc3VsdFsxNV0gPSAxLjA7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBmcm9tVHJhbnNsYXRpb25RdWF0ZXJuaW9uUm90YXRpb25TY2FsZShcblx0XHR0cmFuc2xhdGlvbjogVmVjdG9yMyxcblx0XHRyb3RhdGlvbjogUXVhdGVybmlvbixcblx0XHRzY2FsZTogVmVjdG9yMyxcblx0XHRyZXN1bHQ6IE1hdHJpeDRcblx0KTogTWF0cml4NCB7XG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcblx0XHRcdHJlc3VsdCA9IG5ldyBNYXRyaXg0KCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2NhbGVYID0gc2NhbGUueDtcblx0XHRjb25zdCBzY2FsZVkgPSBzY2FsZS55O1xuXHRcdGNvbnN0IHNjYWxlWiA9IHNjYWxlLno7XG5cblx0XHRjb25zdCB4MiA9IHJvdGF0aW9uLnggKiByb3RhdGlvbi54O1xuXHRcdGNvbnN0IHh5ID0gcm90YXRpb24ueCAqIHJvdGF0aW9uLnk7XG5cdFx0Y29uc3QgeHogPSByb3RhdGlvbi54ICogcm90YXRpb24uejtcblx0XHRjb25zdCB4dyA9IHJvdGF0aW9uLnggKiByb3RhdGlvbi53O1xuXHRcdGNvbnN0IHkyID0gcm90YXRpb24ueSAqIHJvdGF0aW9uLnk7XG5cdFx0Y29uc3QgeXogPSByb3RhdGlvbi55ICogcm90YXRpb24uejtcblx0XHRjb25zdCB5dyA9IHJvdGF0aW9uLnkgKiByb3RhdGlvbi53O1xuXHRcdGNvbnN0IHoyID0gcm90YXRpb24ueiAqIHJvdGF0aW9uLno7XG5cdFx0Y29uc3QgencgPSByb3RhdGlvbi56ICogcm90YXRpb24udztcblx0XHRjb25zdCB3MiA9IHJvdGF0aW9uLncgKiByb3RhdGlvbi53O1xuXG5cdFx0Y29uc3QgbTAwID0geDIgLSB5MiAtIHoyICsgdzI7XG5cdFx0Y29uc3QgbTAxID0gMi4wICogKHh5IC0gencpO1xuXHRcdGNvbnN0IG0wMiA9IDIuMCAqICh4eiArIHl3KTtcblxuXHRcdGNvbnN0IG0xMCA9IDIuMCAqICh4eSArIHp3KTtcblx0XHRjb25zdCBtMTEgPSAteDIgKyB5MiAtIHoyICsgdzI7XG5cdFx0Y29uc3QgbTEyID0gMi4wICogKHl6IC0geHcpO1xuXG5cdFx0Y29uc3QgbTIwID0gMi4wICogKHh6IC0geXcpO1xuXHRcdGNvbnN0IG0yMSA9IDIuMCAqICh5eiArIHh3KTtcblx0XHRjb25zdCBtMjIgPSAteDIgLSB5MiArIHoyICsgdzI7XG5cblx0XHRyZXN1bHRbMF0gPSBtMDAgKiBzY2FsZVg7XG5cdFx0cmVzdWx0WzFdID0gbTEwICogc2NhbGVYO1xuXHRcdHJlc3VsdFsyXSA9IG0yMCAqIHNjYWxlWDtcblx0XHRyZXN1bHRbM10gPSAwLjA7XG5cdFx0cmVzdWx0WzRdID0gbTAxICogc2NhbGVZO1xuXHRcdHJlc3VsdFs1XSA9IG0xMSAqIHNjYWxlWTtcblx0XHRyZXN1bHRbNl0gPSBtMjEgKiBzY2FsZVk7XG5cdFx0cmVzdWx0WzddID0gMC4wO1xuXHRcdHJlc3VsdFs4XSA9IG0wMiAqIHNjYWxlWjtcblx0XHRyZXN1bHRbOV0gPSBtMTIgKiBzY2FsZVo7XG5cdFx0cmVzdWx0WzEwXSA9IG0yMiAqIHNjYWxlWjtcblx0XHRyZXN1bHRbMTFdID0gMC4wO1xuXHRcdHJlc3VsdFsxMl0gPSB0cmFuc2xhdGlvbi54O1xuXHRcdHJlc3VsdFsxM10gPSB0cmFuc2xhdGlvbi55O1xuXHRcdHJlc3VsdFsxNF0gPSB0cmFuc2xhdGlvbi56O1xuXHRcdHJlc3VsdFsxNV0gPSAxLjA7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIGZyb21UcmFuc2xhdGlvblJvdGF0aW9uU2NhbGUoXG5cdFx0dHJhbnNsYXRpb25Sb3RhdGlvblNjYWxlOiB7XG5cdFx0XHR0cmFuc2xhdGlvbjogVmVjdG9yMztcblx0XHRcdHJvdGF0aW9uOiBRdWF0ZXJuaW9uO1xuXHRcdFx0c2NhbGU6IFZlY3RvcjM7XG5cdFx0fSxcblx0XHRyZXN1bHQ6IE1hdHJpeDRcblx0KTogTWF0cml4NCB7XG5cdFx0cmV0dXJuIE1hdHJpeDQuZnJvbVRyYW5zbGF0aW9uUXVhdGVybmlvblJvdGF0aW9uU2NhbGUoXG5cdFx0XHR0cmFuc2xhdGlvblJvdGF0aW9uU2NhbGUudHJhbnNsYXRpb24sXG5cdFx0XHR0cmFuc2xhdGlvblJvdGF0aW9uU2NhbGUucm90YXRpb24sXG5cdFx0XHR0cmFuc2xhdGlvblJvdGF0aW9uU2NhbGUuc2NhbGUsXG5cdFx0XHRyZXN1bHRcblx0XHQpO1xuXHR9XG5cblx0c3RhdGljIGZyb21UcmFuc2xhdGlvbih0cmFuc2xhdGlvbjogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0cmV0dXJuIE1hdHJpeDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24oTWF0cml4My5JREVOVElUWSwgdHJhbnNsYXRpb24sIHJlc3VsdCk7XG5cdH1cblxuXHRzdGF0aWMgZnJvbVNjYWxlKHNjYWxlOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xuXHRcdFx0cmV0dXJuIG5ldyBNYXRyaXg0KFxuXHRcdFx0XHRzY2FsZS54LFxuXHRcdFx0XHQwLjAsXG5cdFx0XHRcdDAuMCxcblx0XHRcdFx0MC4wLFxuXHRcdFx0XHQwLjAsXG5cdFx0XHRcdHNjYWxlLnksXG5cdFx0XHRcdDAuMCxcblx0XHRcdFx0MC4wLFxuXHRcdFx0XHQwLjAsXG5cdFx0XHRcdDAuMCxcblx0XHRcdFx0c2NhbGUueixcblx0XHRcdFx0MC4wLFxuXHRcdFx0XHQwLjAsXG5cdFx0XHRcdDAuMCxcblx0XHRcdFx0MC4wLFxuXHRcdFx0XHQxLjBcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmVzdWx0WzBdID0gc2NhbGUueDtcblx0XHRyZXN1bHRbMV0gPSAwLjA7XG5cdFx0cmVzdWx0WzJdID0gMC4wO1xuXHRcdHJlc3VsdFszXSA9IDAuMDtcblx0XHRyZXN1bHRbNF0gPSAwLjA7XG5cdFx0cmVzdWx0WzVdID0gc2NhbGUueTtcblx0XHRyZXN1bHRbNl0gPSAwLjA7XG5cdFx0cmVzdWx0WzddID0gMC4wO1xuXHRcdHJlc3VsdFs4XSA9IDAuMDtcblx0XHRyZXN1bHRbOV0gPSAwLjA7XG5cdFx0cmVzdWx0WzEwXSA9IHNjYWxlLno7XG5cdFx0cmVzdWx0WzExXSA9IDAuMDtcblx0XHRyZXN1bHRbMTJdID0gMC4wO1xuXHRcdHJlc3VsdFsxM10gPSAwLjA7XG5cdFx0cmVzdWx0WzE0XSA9IDAuMDtcblx0XHRyZXN1bHRbMTVdID0gMS4wO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgZnJvbVJvdGF0aW9uKHJvdGF0aW9uOiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xuXHRcdFx0cmVzdWx0ID0gbmV3IE1hdHJpeDQoKTtcblx0XHR9XG5cdFx0cmVzdWx0WzBdID0gcm90YXRpb25bMF07XG5cdFx0cmVzdWx0WzFdID0gcm90YXRpb25bMV07XG5cdFx0cmVzdWx0WzJdID0gcm90YXRpb25bMl07XG5cdFx0cmVzdWx0WzNdID0gMC4wO1xuXG5cdFx0cmVzdWx0WzRdID0gcm90YXRpb25bM107XG5cdFx0cmVzdWx0WzVdID0gcm90YXRpb25bNF07XG5cdFx0cmVzdWx0WzZdID0gcm90YXRpb25bNV07XG5cdFx0cmVzdWx0WzddID0gMC4wO1xuXG5cdFx0cmVzdWx0WzhdID0gcm90YXRpb25bNl07XG5cdFx0cmVzdWx0WzldID0gcm90YXRpb25bN107XG5cdFx0cmVzdWx0WzEwXSA9IHJvdGF0aW9uWzhdO1xuXHRcdHJlc3VsdFsxMV0gPSAwLjA7XG5cblx0XHRyZXN1bHRbMTJdID0gMC4wO1xuXHRcdHJlc3VsdFsxM10gPSAwLjA7XG5cdFx0cmVzdWx0WzE0XSA9IDAuMDtcblx0XHRyZXN1bHRbMTVdID0gMS4wO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBtYWtlUGVyc3BlY3RpdmUoXG5cdFx0bGVmdDogbnVtYmVyLFxuXHRcdHJpZ2h0OiBudW1iZXIsXG5cdFx0dG9wOiBudW1iZXIsXG5cdFx0Ym90dG9tOiBudW1iZXIsXG5cdFx0bmVhcjogbnVtYmVyLFxuXHRcdGZhcjogbnVtYmVyXG5cdCk6IE1hdHJpeDQge1xuXHRcdC8vIGZyb20gdGhyZWUuanNcblx0XHRjb25zdCBtYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuXHRcdGNvbnN0IHggPSAoMiAqIG5lYXIpIC8gKHJpZ2h0IC0gbGVmdCk7XG5cdFx0Y29uc3QgeSA9ICgyICogbmVhcikgLyAodG9wIC0gYm90dG9tKTtcblxuXHRcdGNvbnN0IGEgPSAocmlnaHQgKyBsZWZ0KSAvIChyaWdodCAtIGxlZnQpO1xuXHRcdGNvbnN0IGIgPSAodG9wICsgYm90dG9tKSAvICh0b3AgLSBib3R0b20pO1xuXHRcdGNvbnN0IGMgPSAtZmFyIC8gKGZhciAtIG5lYXIpO1xuXHRcdGNvbnN0IGQgPSAoLWZhciAqIG5lYXIpIC8gKGZhciAtIG5lYXIpO1xuXG5cdFx0bWF0cml4WzBdID0geDtcblx0XHRtYXRyaXhbNF0gPSAwO1xuXHRcdG1hdHJpeFs4XSA9IGE7XG5cdFx0bWF0cml4WzEyXSA9IDA7XG5cdFx0bWF0cml4WzFdID0gMDtcblx0XHRtYXRyaXhbNV0gPSB5O1xuXHRcdG1hdHJpeFs5XSA9IGI7XG5cdFx0bWF0cml4WzEzXSA9IDA7XG5cdFx0bWF0cml4WzJdID0gMDtcblx0XHRtYXRyaXhbNl0gPSAwO1xuXHRcdG1hdHJpeFsxMF0gPSBjO1xuXHRcdG1hdHJpeFsxNF0gPSBkO1xuXHRcdG1hdHJpeFszXSA9IDA7XG5cdFx0bWF0cml4WzddID0gMDtcblx0XHRtYXRyaXhbMTFdID0gLTE7XG5cdFx0bWF0cml4WzE1XSA9IDA7XG5cdFx0cmV0dXJuIG1hdHJpeDtcblx0fVxuXHRzdGF0aWMgbWFrZU9ydGhvZ3JhcGhpYyhcblx0XHRsZWZ0OiBudW1iZXIsXG5cdFx0cmlnaHQ6IG51bWJlcixcblx0XHR0b3A6IG51bWJlcixcblx0XHRib3R0b206IG51bWJlcixcblx0XHRuZWFyOiBudW1iZXIsXG5cdFx0ZmFyOiBudW1iZXJcblx0KTogTWF0cml4NCB7XG5cdFx0Y29uc3QgbWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcblx0XHRjb25zdCB3ID0gMS4wIC8gKHJpZ2h0IC0gbGVmdCk7XG5cdFx0Y29uc3QgaCA9IDEuMCAvICh0b3AgLSBib3R0b20pO1xuXHRcdGNvbnN0IHAgPSAxLjAgLyAoZmFyIC0gbmVhcik7XG5cblx0XHRjb25zdCB4ID0gKHJpZ2h0ICsgbGVmdCkgKiB3O1xuXHRcdGNvbnN0IHkgPSAodG9wICsgYm90dG9tKSAqIGg7XG5cdFx0Y29uc3QgeiA9IG5lYXIgKiBwO1xuXG5cdFx0bWF0cml4WzBdID0gMiAqIHc7XG5cdFx0bWF0cml4WzRdID0gMDtcblx0XHRtYXRyaXhbOF0gPSAwO1xuXHRcdG1hdHJpeFsxMl0gPSAteDtcblx0XHRtYXRyaXhbMV0gPSAwO1xuXHRcdG1hdHJpeFs1XSA9IDIgKiBoO1xuXHRcdG1hdHJpeFs5XSA9IDA7XG5cdFx0bWF0cml4WzEzXSA9IC15O1xuXHRcdG1hdHJpeFsyXSA9IDA7XG5cdFx0bWF0cml4WzZdID0gMDtcblx0XHRtYXRyaXhbMTBdID0gLTEgKiBwO1xuXHRcdG1hdHJpeFsxNF0gPSAtejtcblx0XHRtYXRyaXhbM10gPSAwO1xuXHRcdG1hdHJpeFs3XSA9IDA7XG5cdFx0bWF0cml4WzExXSA9IDA7XG5cdFx0bWF0cml4WzE1XSA9IDE7XG5cdFx0cmV0dXJuIG1hdHJpeDtcblx0fVxuXHR0b0FycmF5KCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXHRcdE1hdHJpeDQudG9BcnJheSh0aGlzLCByZXN1bHQpO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblx0LyoqXG5cdCAqIENvbXB1dGVzIGFuIEFycmF5IGZyb20gdGhlIHByb3ZpZGVkIE1hdHJpeDQgaW5zdGFuY2UuXG5cdCAqIFRoZSBhcnJheSB3aWxsIGJlIGluIGNvbHVtbi1tYWpvciBvcmRlci5cblx0ICogQGV4YW1wbGVcblx0ICogLy9jcmVhdGUgYW4gYXJyYXkgZnJvbSBhbiBpbnN0YW5jZSBvZiBNYXRyaXg0XG5cdCAqIC8vIG0gPSBbMTAuMCwgMTQuMCwgMTguMCwgMjIuMF1cblx0ICogLy8gICAgIFsxMS4wLCAxNS4wLCAxOS4wLCAyMy4wXVxuXHQgKiAvLyAgICAgWzEyLjAsIDE2LjAsIDIwLjAsIDI0LjBdXG5cdCAqIC8vICAgICBbMTMuMCwgMTcuMCwgMjEuMCwgMjUuMF1cblx0ICogY29uc3QgYSA9IE1hdHJpeDQudG9BcnJheShtKTtcblx0ICpcblx0ICogLy8gbSByZW1haW5zIHRoZSBzYW1lXG5cdCAqIC8vY3JlYXRlcyBhID0gWzEwLjAsIDExLjAsIDEyLjAsIDEzLjAsIDE0LjAsIDE1LjAsIDE2LjAsIDE3LjAsIDE4LjAsIDE5LjAsIDIwLjAsIDIxLjAsIDIyLjAsIDIzLjAsIDI0LjAsIDI1LjBdXG5cdCAqL1xuXHRzdGF0aWMgdG9BcnJheShtYXRyaXg6IEFycmF5PG51bWJlcj4gfCBNYXRyaXg0LCByZXN1bHQ6IEFycmF5PG51bWJlcj4pOiBBcnJheTxudW1iZXI+IHtcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0bWF0cml4WzBdLFxuXHRcdFx0XHRtYXRyaXhbMV0sXG5cdFx0XHRcdG1hdHJpeFsyXSxcblx0XHRcdFx0bWF0cml4WzNdLFxuXHRcdFx0XHRtYXRyaXhbNF0sXG5cdFx0XHRcdG1hdHJpeFs1XSxcblx0XHRcdFx0bWF0cml4WzZdLFxuXHRcdFx0XHRtYXRyaXhbN10sXG5cdFx0XHRcdG1hdHJpeFs4XSxcblx0XHRcdFx0bWF0cml4WzldLFxuXHRcdFx0XHRtYXRyaXhbMTBdLFxuXHRcdFx0XHRtYXRyaXhbMTFdLFxuXHRcdFx0XHRtYXRyaXhbMTJdLFxuXHRcdFx0XHRtYXRyaXhbMTNdLFxuXHRcdFx0XHRtYXRyaXhbMTRdLFxuXHRcdFx0XHRtYXRyaXhbMTVdXG5cdFx0XHRdO1xuXHRcdH1cblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF07XG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdO1xuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXTtcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzRdO1xuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XTtcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXhbNl07XG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddO1xuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeFs4XTtcblx0XHRyZXN1bHRbOV0gPSBtYXRyaXhbOV07XG5cdFx0cmVzdWx0WzEwXSA9IG1hdHJpeFsxMF07XG5cdFx0cmVzdWx0WzExXSA9IG1hdHJpeFsxMV07XG5cdFx0cmVzdWx0WzEyXSA9IG1hdHJpeFsxMl07XG5cdFx0cmVzdWx0WzEzXSA9IG1hdHJpeFsxM107XG5cdFx0cmVzdWx0WzE0XSA9IG1hdHJpeFsxNF07XG5cdFx0cmVzdWx0WzE1XSA9IG1hdHJpeFsxNV07XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBnZXRFbGVtZW50SW5kZXgoY29sdW1uOiBudW1iZXIsIHJvdzogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gY29sdW1uICogNCArIHJvdztcblx0fVxuXG5cdHN0YXRpYyBnZXRDb2x1bW4obWF0cml4OiBNYXRyaXg0LCBpbmRleDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcblx0XHRjb25zdCBzdGFydEluZGV4ID0gaW5kZXggKiA0O1xuXHRcdGNvbnN0IHggPSBtYXRyaXhbc3RhcnRJbmRleF07XG5cdFx0Y29uc3QgeSA9IG1hdHJpeFtzdGFydEluZGV4ICsgMV07XG5cdFx0Y29uc3QgeiA9IG1hdHJpeFtzdGFydEluZGV4ICsgMl07XG5cdFx0Y29uc3QgdyA9IG1hdHJpeFtzdGFydEluZGV4ICsgM107XG5cblx0XHRyZXN1bHQueCA9IHg7XG5cdFx0cmVzdWx0LnkgPSB5O1xuXHRcdHJlc3VsdC56ID0gejtcblx0XHRyZXN1bHQudyA9IHc7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBzZXRDb2x1bW4obWF0cml4OiBNYXRyaXg0LCBpbmRleDogbnVtYmVyLCBjYXJ0ZXNpYW46IFZlY3RvcjQsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdHJlc3VsdCA9IE1hdHJpeDQuY2xvbmUobWF0cml4LCByZXN1bHQpO1xuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCAqIDQ7XG5cdFx0cmVzdWx0W3N0YXJ0SW5kZXhdID0gY2FydGVzaWFuLng7XG5cdFx0cmVzdWx0W3N0YXJ0SW5kZXggKyAxXSA9IGNhcnRlc2lhbi55O1xuXHRcdHJlc3VsdFtzdGFydEluZGV4ICsgMl0gPSBjYXJ0ZXNpYW4uejtcblx0XHRyZXN1bHRbc3RhcnRJbmRleCArIDNdID0gY2FydGVzaWFuLnc7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBnZXRSb3cobWF0cml4OiBNYXRyaXg0LCBpbmRleDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcblx0XHRjb25zdCB4ID0gbWF0cml4W2luZGV4XTtcblx0XHRjb25zdCB5ID0gbWF0cml4W2luZGV4ICsgNF07XG5cdFx0Y29uc3QgeiA9IG1hdHJpeFtpbmRleCArIDhdO1xuXHRcdGNvbnN0IHcgPSBtYXRyaXhbaW5kZXggKyAxMl07XG5cblx0XHRyZXN1bHQueCA9IHg7XG5cdFx0cmVzdWx0LnkgPSB5O1xuXHRcdHJlc3VsdC56ID0gejtcblx0XHRyZXN1bHQudyA9IHc7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBzZXRSb3cobWF0cml4OiBNYXRyaXg0LCBpbmRleDogbnVtYmVyLCBjYXJ0ZXNpYW46IFZlY3RvcjQsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdHJlc3VsdCA9IE1hdHJpeDQuY2xvbmUobWF0cml4LCByZXN1bHQpO1xuXHRcdHJlc3VsdFtpbmRleF0gPSBjYXJ0ZXNpYW4ueDtcblx0XHRyZXN1bHRbaW5kZXggKyA0XSA9IGNhcnRlc2lhbi55O1xuXHRcdHJlc3VsdFtpbmRleCArIDhdID0gY2FydGVzaWFuLno7XG5cdFx0cmVzdWx0W2luZGV4ICsgMTJdID0gY2FydGVzaWFuLnc7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBzZXRUcmFuc2xhdGlvbihtYXRyaXg6IE1hdHJpeDQsIHRyYW5zbGF0aW9uOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF07XG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdO1xuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXTtcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XG5cblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF07XG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdO1xuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XTtcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN107XG5cblx0XHRyZXN1bHRbOF0gPSBtYXRyaXhbOF07XG5cdFx0cmVzdWx0WzldID0gbWF0cml4WzldO1xuXHRcdHJlc3VsdFsxMF0gPSBtYXRyaXhbMTBdO1xuXHRcdHJlc3VsdFsxMV0gPSBtYXRyaXhbMTFdO1xuXG5cdFx0cmVzdWx0WzEyXSA9IHRyYW5zbGF0aW9uLng7XG5cdFx0cmVzdWx0WzEzXSA9IHRyYW5zbGF0aW9uLnk7XG5cdFx0cmVzdWx0WzE0XSA9IHRyYW5zbGF0aW9uLno7XG5cdFx0cmVzdWx0WzE1XSA9IG1hdHJpeFsxNV07XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIHNldFNjYWxlKG1hdHJpeDogTWF0cml4NCwgc2NhbGU6IFZlY3RvcjMsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdGNvbnN0IGV4aXN0aW5nU2NhbGUgPSBNYXRyaXg0LmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoMSk7XG5cdFx0Y29uc3Qgc2NhbGVSYXRpb1ggPSBzY2FsZS54IC8gZXhpc3RpbmdTY2FsZS54O1xuXHRcdGNvbnN0IHNjYWxlUmF0aW9ZID0gc2NhbGUueSAvIGV4aXN0aW5nU2NhbGUueTtcblx0XHRjb25zdCBzY2FsZVJhdGlvWiA9IHNjYWxlLnogLyBleGlzdGluZ1NjYWxlLno7XG5cblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF0gKiBzY2FsZVJhdGlvWDtcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsZVJhdGlvWDtcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl0gKiBzY2FsZVJhdGlvWDtcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XG5cblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF0gKiBzY2FsZVJhdGlvWTtcblx0XHRyZXN1bHRbNV0gPSBtYXRyaXhbNV0gKiBzY2FsZVJhdGlvWTtcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXhbNl0gKiBzY2FsZVJhdGlvWTtcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN107XG5cblx0XHRyZXN1bHRbOF0gPSBtYXRyaXhbOF0gKiBzY2FsZVJhdGlvWjtcblx0XHRyZXN1bHRbOV0gPSBtYXRyaXhbOV0gKiBzY2FsZVJhdGlvWjtcblx0XHRyZXN1bHRbMTBdID0gbWF0cml4WzEwXSAqIHNjYWxlUmF0aW9aO1xuXHRcdHJlc3VsdFsxMV0gPSBtYXRyaXhbMTFdO1xuXG5cdFx0cmVzdWx0WzEyXSA9IG1hdHJpeFsxMl07XG5cdFx0cmVzdWx0WzEzXSA9IG1hdHJpeFsxM107XG5cdFx0cmVzdWx0WzE0XSA9IG1hdHJpeFsxNF07XG5cdFx0cmVzdWx0WzE1XSA9IG1hdHJpeFsxNV07XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIGdldFNjYWxlKG1hdHJpeDogTWF0cml4NCwgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XG5cdFx0cmVzdWx0LnggPSBWZWN0b3IzLm1hZ25pdHVkZShWZWN0b3IzLmZyb21FbGVtZW50cyhtYXRyaXhbMF0sIG1hdHJpeFsxXSwgbWF0cml4WzJdLCBzY3JhdGNoQ29sdW1uKSk7XG5cdFx0cmVzdWx0LnkgPSBWZWN0b3IzLm1hZ25pdHVkZShWZWN0b3IzLmZyb21FbGVtZW50cyhtYXRyaXhbNF0sIG1hdHJpeFs1XSwgbWF0cml4WzZdLCBzY3JhdGNoQ29sdW1uKSk7XG5cdFx0cmVzdWx0LnogPSBWZWN0b3IzLm1hZ25pdHVkZShWZWN0b3IzLmZyb21FbGVtZW50cyhtYXRyaXhbOF0sIG1hdHJpeFs5XSwgbWF0cml4WzEwXSwgc2NyYXRjaENvbHVtbikpO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgZ2V0TWF4aW11bVNjYWxlKG1hdHJpeDogTWF0cml4NCk6IG51bWJlciB7XG5cdFx0TWF0cml4NC5nZXRTY2FsZShtYXRyaXgsIHNjYWxlU2NyYXRjaDMpO1xuXHRcdHJldHVybiBWZWN0b3IzLm1heGltdW1Db21wb25lbnQoc2NhbGVTY3JhdGNoMyk7XG5cdH1cblxuXHRzdGF0aWMgc2V0Um90YXRpb24obWF0cml4OiBNYXRyaXg0LCByb3RhdGlvbjogTWF0cml4MywgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0Y29uc3Qgc2NhbGUgPSBNYXRyaXg0LmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoNCk7XG5cblx0XHRyZXN1bHRbMF0gPSByb3RhdGlvblswXSAqIHNjYWxlLng7XG5cdFx0cmVzdWx0WzFdID0gcm90YXRpb25bMV0gKiBzY2FsZS54O1xuXHRcdHJlc3VsdFsyXSA9IHJvdGF0aW9uWzJdICogc2NhbGUueDtcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XG5cblx0XHRyZXN1bHRbNF0gPSByb3RhdGlvblszXSAqIHNjYWxlLnk7XG5cdFx0cmVzdWx0WzVdID0gcm90YXRpb25bNF0gKiBzY2FsZS55O1xuXHRcdHJlc3VsdFs2XSA9IHJvdGF0aW9uWzVdICogc2NhbGUueTtcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN107XG5cblx0XHRyZXN1bHRbOF0gPSByb3RhdGlvbls2XSAqIHNjYWxlLno7XG5cdFx0cmVzdWx0WzldID0gcm90YXRpb25bN10gKiBzY2FsZS56O1xuXHRcdHJlc3VsdFsxMF0gPSByb3RhdGlvbls4XSAqIHNjYWxlLno7XG5cdFx0cmVzdWx0WzExXSA9IG1hdHJpeFsxMV07XG5cblx0XHRyZXN1bHRbMTJdID0gbWF0cml4WzEyXTtcblx0XHRyZXN1bHRbMTNdID0gbWF0cml4WzEzXTtcblx0XHRyZXN1bHRbMTRdID0gbWF0cml4WzE0XTtcblx0XHRyZXN1bHRbMTVdID0gbWF0cml4WzE1XTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgZ2V0Um90YXRpb24obWF0cml4OiBNYXRyaXg0LCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcblx0XHRjb25zdCBzY2FsZSA9IE1hdHJpeDQuZ2V0U2NhbGUobWF0cml4LCBzY2FsZVNjcmF0Y2g1KTtcblxuXHRcdGNvbnN0IGlzMSA9IDEgLyBzY2FsZS54O1xuXHRcdGNvbnN0IGlzMiA9IDEgLyBzY2FsZS55O1xuXHRcdGNvbnN0IGlzMyA9IDEgLyBzY2FsZS56O1xuXG5cdFx0Y29uc3Qgc20xMSA9IG1hdHJpeFswXSAqIGlzMTtcblx0XHRjb25zdCBzbTEyID0gbWF0cml4WzFdICogaXMyO1xuXHRcdGNvbnN0IHNtMTMgPSBtYXRyaXhbMl0gKiBpczM7XG5cdFx0Y29uc3Qgc20yMSA9IG1hdHJpeFs0XSAqIGlzMTtcblx0XHRjb25zdCBzbTIyID0gbWF0cml4WzVdICogaXMyO1xuXHRcdGNvbnN0IHNtMjMgPSBtYXRyaXhbNl0gKiBpczM7XG5cdFx0Y29uc3Qgc20zMSA9IG1hdHJpeFs4XSAqIGlzMTtcblx0XHRjb25zdCBzbTMyID0gbWF0cml4WzldICogaXMyO1xuXHRcdGNvbnN0IHNtMzMgPSBtYXRyaXhbMTBdICogaXMzO1xuXG5cdFx0Y29uc3QgdHJhY2UgPSBzbTExICsgc20yMiArIHNtMzM7XG5cdFx0bGV0IFMgPSAwO1xuXG5cdFx0aWYgKHRyYWNlID4gMCkge1xuXHRcdFx0UyA9IE1hdGguc3FydCh0cmFjZSArIDEuMCkgKiAyO1xuXHRcdFx0cmVzdWx0LncgPSAwLjI1ICogUztcblx0XHRcdHJlc3VsdC54ID0gKHNtMjMgLSBzbTMyKSAvIFM7XG5cdFx0XHRyZXN1bHQueSA9IChzbTMxIC0gc20xMykgLyBTO1xuXHRcdFx0cmVzdWx0LnogPSAoc20xMiAtIHNtMjEpIC8gUztcblx0XHR9IGVsc2UgaWYgKHNtMTEgPiBzbTIyICYmIHNtMTEgPiBzbTMzKSB7XG5cdFx0XHRTID0gTWF0aC5zcXJ0KDEuMCArIHNtMTEgLSBzbTIyIC0gc20zMykgKiAyO1xuXHRcdFx0cmVzdWx0LncgPSAoc20yMyAtIHNtMzIpIC8gUztcblx0XHRcdHJlc3VsdC54ID0gMC4yNSAqIFM7XG5cdFx0XHRyZXN1bHQueSA9IChzbTEyICsgc20yMSkgLyBTO1xuXHRcdFx0cmVzdWx0LnogPSAoc20zMSArIHNtMTMpIC8gUztcblx0XHR9IGVsc2UgaWYgKHNtMjIgPiBzbTMzKSB7XG5cdFx0XHRTID0gTWF0aC5zcXJ0KDEuMCArIHNtMjIgLSBzbTExIC0gc20zMykgKiAyO1xuXHRcdFx0cmVzdWx0LncgPSAoc20zMSAtIHNtMTMpIC8gUztcblx0XHRcdHJlc3VsdC54ID0gKHNtMTIgKyBzbTIxKSAvIFM7XG5cdFx0XHRyZXN1bHQueSA9IDAuMjUgKiBTO1xuXHRcdFx0cmVzdWx0LnogPSAoc20yMyArIHNtMzIpIC8gUztcblx0XHR9IGVsc2Uge1xuXHRcdFx0UyA9IE1hdGguc3FydCgxLjAgKyBzbTMzIC0gc20xMSAtIHNtMjIpICogMjtcblx0XHRcdHJlc3VsdC53ID0gKHNtMTIgLSBzbTIxKSAvIFM7XG5cdFx0XHRyZXN1bHQueCA9IChzbTMxICsgc20xMykgLyBTO1xuXHRcdFx0cmVzdWx0LnkgPSAoc20yMyArIHNtMzIpIC8gUztcblx0XHRcdHJlc3VsdC56ID0gMC4yNSAqIFM7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgbXVsdGlwbHkobGVmdDogTWF0cml4NCwgcmlnaHQ6IE1hdHJpeDQsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdGNvbnN0IGxlZnQwID0gbGVmdFswXTtcblx0XHRjb25zdCBsZWZ0MSA9IGxlZnRbMV07XG5cdFx0Y29uc3QgbGVmdDIgPSBsZWZ0WzJdO1xuXHRcdGNvbnN0IGxlZnQzID0gbGVmdFszXTtcblx0XHRjb25zdCBsZWZ0NCA9IGxlZnRbNF07XG5cdFx0Y29uc3QgbGVmdDUgPSBsZWZ0WzVdO1xuXHRcdGNvbnN0IGxlZnQ2ID0gbGVmdFs2XTtcblx0XHRjb25zdCBsZWZ0NyA9IGxlZnRbN107XG5cdFx0Y29uc3QgbGVmdDggPSBsZWZ0WzhdO1xuXHRcdGNvbnN0IGxlZnQ5ID0gbGVmdFs5XTtcblx0XHRjb25zdCBsZWZ0MTAgPSBsZWZ0WzEwXTtcblx0XHRjb25zdCBsZWZ0MTEgPSBsZWZ0WzExXTtcblx0XHRjb25zdCBsZWZ0MTIgPSBsZWZ0WzEyXTtcblx0XHRjb25zdCBsZWZ0MTMgPSBsZWZ0WzEzXTtcblx0XHRjb25zdCBsZWZ0MTQgPSBsZWZ0WzE0XTtcblx0XHRjb25zdCBsZWZ0MTUgPSBsZWZ0WzE1XTtcblxuXHRcdGNvbnN0IHJpZ2h0MCA9IHJpZ2h0WzBdO1xuXHRcdGNvbnN0IHJpZ2h0MSA9IHJpZ2h0WzFdO1xuXHRcdGNvbnN0IHJpZ2h0MiA9IHJpZ2h0WzJdO1xuXHRcdGNvbnN0IHJpZ2h0MyA9IHJpZ2h0WzNdO1xuXHRcdGNvbnN0IHJpZ2h0NCA9IHJpZ2h0WzRdO1xuXHRcdGNvbnN0IHJpZ2h0NSA9IHJpZ2h0WzVdO1xuXHRcdGNvbnN0IHJpZ2h0NiA9IHJpZ2h0WzZdO1xuXHRcdGNvbnN0IHJpZ2h0NyA9IHJpZ2h0WzddO1xuXHRcdGNvbnN0IHJpZ2h0OCA9IHJpZ2h0WzhdO1xuXHRcdGNvbnN0IHJpZ2h0OSA9IHJpZ2h0WzldO1xuXHRcdGNvbnN0IHJpZ2h0MTAgPSByaWdodFsxMF07XG5cdFx0Y29uc3QgcmlnaHQxMSA9IHJpZ2h0WzExXTtcblx0XHRjb25zdCByaWdodDEyID0gcmlnaHRbMTJdO1xuXHRcdGNvbnN0IHJpZ2h0MTMgPSByaWdodFsxM107XG5cdFx0Y29uc3QgcmlnaHQxNCA9IHJpZ2h0WzE0XTtcblx0XHRjb25zdCByaWdodDE1ID0gcmlnaHRbMTVdO1xuXG5cdFx0Y29uc3QgY29sdW1uMFJvdzAgPSBsZWZ0MCAqIHJpZ2h0MCArIGxlZnQ0ICogcmlnaHQxICsgbGVmdDggKiByaWdodDIgKyBsZWZ0MTIgKiByaWdodDM7XG5cdFx0Y29uc3QgY29sdW1uMFJvdzEgPSBsZWZ0MSAqIHJpZ2h0MCArIGxlZnQ1ICogcmlnaHQxICsgbGVmdDkgKiByaWdodDIgKyBsZWZ0MTMgKiByaWdodDM7XG5cdFx0Y29uc3QgY29sdW1uMFJvdzIgPSBsZWZ0MiAqIHJpZ2h0MCArIGxlZnQ2ICogcmlnaHQxICsgbGVmdDEwICogcmlnaHQyICsgbGVmdDE0ICogcmlnaHQzO1xuXHRcdGNvbnN0IGNvbHVtbjBSb3czID0gbGVmdDMgKiByaWdodDAgKyBsZWZ0NyAqIHJpZ2h0MSArIGxlZnQxMSAqIHJpZ2h0MiArIGxlZnQxNSAqIHJpZ2h0MztcblxuXHRcdGNvbnN0IGNvbHVtbjFSb3cwID0gbGVmdDAgKiByaWdodDQgKyBsZWZ0NCAqIHJpZ2h0NSArIGxlZnQ4ICogcmlnaHQ2ICsgbGVmdDEyICogcmlnaHQ3O1xuXHRcdGNvbnN0IGNvbHVtbjFSb3cxID0gbGVmdDEgKiByaWdodDQgKyBsZWZ0NSAqIHJpZ2h0NSArIGxlZnQ5ICogcmlnaHQ2ICsgbGVmdDEzICogcmlnaHQ3O1xuXHRcdGNvbnN0IGNvbHVtbjFSb3cyID0gbGVmdDIgKiByaWdodDQgKyBsZWZ0NiAqIHJpZ2h0NSArIGxlZnQxMCAqIHJpZ2h0NiArIGxlZnQxNCAqIHJpZ2h0Nztcblx0XHRjb25zdCBjb2x1bW4xUm93MyA9IGxlZnQzICogcmlnaHQ0ICsgbGVmdDcgKiByaWdodDUgKyBsZWZ0MTEgKiByaWdodDYgKyBsZWZ0MTUgKiByaWdodDc7XG5cblx0XHRjb25zdCBjb2x1bW4yUm93MCA9IGxlZnQwICogcmlnaHQ4ICsgbGVmdDQgKiByaWdodDkgKyBsZWZ0OCAqIHJpZ2h0MTAgKyBsZWZ0MTIgKiByaWdodDExO1xuXHRcdGNvbnN0IGNvbHVtbjJSb3cxID0gbGVmdDEgKiByaWdodDggKyBsZWZ0NSAqIHJpZ2h0OSArIGxlZnQ5ICogcmlnaHQxMCArIGxlZnQxMyAqIHJpZ2h0MTE7XG5cdFx0Y29uc3QgY29sdW1uMlJvdzIgPSBsZWZ0MiAqIHJpZ2h0OCArIGxlZnQ2ICogcmlnaHQ5ICsgbGVmdDEwICogcmlnaHQxMCArIGxlZnQxNCAqIHJpZ2h0MTE7XG5cdFx0Y29uc3QgY29sdW1uMlJvdzMgPSBsZWZ0MyAqIHJpZ2h0OCArIGxlZnQ3ICogcmlnaHQ5ICsgbGVmdDExICogcmlnaHQxMCArIGxlZnQxNSAqIHJpZ2h0MTE7XG5cblx0XHRjb25zdCBjb2x1bW4zUm93MCA9IGxlZnQwICogcmlnaHQxMiArIGxlZnQ0ICogcmlnaHQxMyArIGxlZnQ4ICogcmlnaHQxNCArIGxlZnQxMiAqIHJpZ2h0MTU7XG5cdFx0Y29uc3QgY29sdW1uM1JvdzEgPSBsZWZ0MSAqIHJpZ2h0MTIgKyBsZWZ0NSAqIHJpZ2h0MTMgKyBsZWZ0OSAqIHJpZ2h0MTQgKyBsZWZ0MTMgKiByaWdodDE1O1xuXHRcdGNvbnN0IGNvbHVtbjNSb3cyID0gbGVmdDIgKiByaWdodDEyICsgbGVmdDYgKiByaWdodDEzICsgbGVmdDEwICogcmlnaHQxNCArIGxlZnQxNCAqIHJpZ2h0MTU7XG5cdFx0Y29uc3QgY29sdW1uM1JvdzMgPSBsZWZ0MyAqIHJpZ2h0MTIgKyBsZWZ0NyAqIHJpZ2h0MTMgKyBsZWZ0MTEgKiByaWdodDE0ICsgbGVmdDE1ICogcmlnaHQxNTtcblxuXHRcdHJlc3VsdFswXSA9IGNvbHVtbjBSb3cwO1xuXHRcdHJlc3VsdFsxXSA9IGNvbHVtbjBSb3cxO1xuXHRcdHJlc3VsdFsyXSA9IGNvbHVtbjBSb3cyO1xuXHRcdHJlc3VsdFszXSA9IGNvbHVtbjBSb3czO1xuXHRcdHJlc3VsdFs0XSA9IGNvbHVtbjFSb3cwO1xuXHRcdHJlc3VsdFs1XSA9IGNvbHVtbjFSb3cxO1xuXHRcdHJlc3VsdFs2XSA9IGNvbHVtbjFSb3cyO1xuXHRcdHJlc3VsdFs3XSA9IGNvbHVtbjFSb3czO1xuXHRcdHJlc3VsdFs4XSA9IGNvbHVtbjJSb3cwO1xuXHRcdHJlc3VsdFs5XSA9IGNvbHVtbjJSb3cxO1xuXHRcdHJlc3VsdFsxMF0gPSBjb2x1bW4yUm93Mjtcblx0XHRyZXN1bHRbMTFdID0gY29sdW1uMlJvdzM7XG5cdFx0cmVzdWx0WzEyXSA9IGNvbHVtbjNSb3cwO1xuXHRcdHJlc3VsdFsxM10gPSBjb2x1bW4zUm93MTtcblx0XHRyZXN1bHRbMTRdID0gY29sdW1uM1JvdzI7XG5cdFx0cmVzdWx0WzE1XSA9IGNvbHVtbjNSb3czO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgYWRkKGxlZnQ6IE1hdHJpeDQsIHJpZ2h0OiBNYXRyaXg0LCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRyZXN1bHRbMF0gPSBsZWZ0WzBdICsgcmlnaHRbMF07XG5cdFx0cmVzdWx0WzFdID0gbGVmdFsxXSArIHJpZ2h0WzFdO1xuXHRcdHJlc3VsdFsyXSA9IGxlZnRbMl0gKyByaWdodFsyXTtcblx0XHRyZXN1bHRbM10gPSBsZWZ0WzNdICsgcmlnaHRbM107XG5cdFx0cmVzdWx0WzRdID0gbGVmdFs0XSArIHJpZ2h0WzRdO1xuXHRcdHJlc3VsdFs1XSA9IGxlZnRbNV0gKyByaWdodFs1XTtcblx0XHRyZXN1bHRbNl0gPSBsZWZ0WzZdICsgcmlnaHRbNl07XG5cdFx0cmVzdWx0WzddID0gbGVmdFs3XSArIHJpZ2h0WzddO1xuXHRcdHJlc3VsdFs4XSA9IGxlZnRbOF0gKyByaWdodFs4XTtcblx0XHRyZXN1bHRbOV0gPSBsZWZ0WzldICsgcmlnaHRbOV07XG5cdFx0cmVzdWx0WzEwXSA9IGxlZnRbMTBdICsgcmlnaHRbMTBdO1xuXHRcdHJlc3VsdFsxMV0gPSBsZWZ0WzExXSArIHJpZ2h0WzExXTtcblx0XHRyZXN1bHRbMTJdID0gbGVmdFsxMl0gKyByaWdodFsxMl07XG5cdFx0cmVzdWx0WzEzXSA9IGxlZnRbMTNdICsgcmlnaHRbMTNdO1xuXHRcdHJlc3VsdFsxNF0gPSBsZWZ0WzE0XSArIHJpZ2h0WzE0XTtcblx0XHRyZXN1bHRbMTVdID0gbGVmdFsxNV0gKyByaWdodFsxNV07XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBzdWJ0cmFjdChsZWZ0OiBNYXRyaXg0LCByaWdodDogTWF0cml4NCwgcmVzdWx0OiBNYXRyaXg0KSB7XG5cdFx0cmVzdWx0WzBdID0gbGVmdFswXSAtIHJpZ2h0WzBdO1xuXHRcdHJlc3VsdFsxXSA9IGxlZnRbMV0gLSByaWdodFsxXTtcblx0XHRyZXN1bHRbMl0gPSBsZWZ0WzJdIC0gcmlnaHRbMl07XG5cdFx0cmVzdWx0WzNdID0gbGVmdFszXSAtIHJpZ2h0WzNdO1xuXHRcdHJlc3VsdFs0XSA9IGxlZnRbNF0gLSByaWdodFs0XTtcblx0XHRyZXN1bHRbNV0gPSBsZWZ0WzVdIC0gcmlnaHRbNV07XG5cdFx0cmVzdWx0WzZdID0gbGVmdFs2XSAtIHJpZ2h0WzZdO1xuXHRcdHJlc3VsdFs3XSA9IGxlZnRbN10gLSByaWdodFs3XTtcblx0XHRyZXN1bHRbOF0gPSBsZWZ0WzhdIC0gcmlnaHRbOF07XG5cdFx0cmVzdWx0WzldID0gbGVmdFs5XSAtIHJpZ2h0WzldO1xuXHRcdHJlc3VsdFsxMF0gPSBsZWZ0WzEwXSAtIHJpZ2h0WzEwXTtcblx0XHRyZXN1bHRbMTFdID0gbGVmdFsxMV0gLSByaWdodFsxMV07XG5cdFx0cmVzdWx0WzEyXSA9IGxlZnRbMTJdIC0gcmlnaHRbMTJdO1xuXHRcdHJlc3VsdFsxM10gPSBsZWZ0WzEzXSAtIHJpZ2h0WzEzXTtcblx0XHRyZXN1bHRbMTRdID0gbGVmdFsxNF0gLSByaWdodFsxNF07XG5cdFx0cmVzdWx0WzE1XSA9IGxlZnRbMTVdIC0gcmlnaHRbMTVdO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgbXVsdGlwbHlUcmFuc2Zvcm1hdGlvbihsZWZ0OiBNYXRyaXg0LCByaWdodDogTWF0cml4NCwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0Y29uc3QgbGVmdDAgPSBsZWZ0WzBdO1xuXHRcdGNvbnN0IGxlZnQxID0gbGVmdFsxXTtcblx0XHRjb25zdCBsZWZ0MiA9IGxlZnRbMl07XG5cdFx0Y29uc3QgbGVmdDQgPSBsZWZ0WzRdO1xuXHRcdGNvbnN0IGxlZnQ1ID0gbGVmdFs1XTtcblx0XHRjb25zdCBsZWZ0NiA9IGxlZnRbNl07XG5cdFx0Y29uc3QgbGVmdDggPSBsZWZ0WzhdO1xuXHRcdGNvbnN0IGxlZnQ5ID0gbGVmdFs5XTtcblx0XHRjb25zdCBsZWZ0MTAgPSBsZWZ0WzEwXTtcblx0XHRjb25zdCBsZWZ0MTIgPSBsZWZ0WzEyXTtcblx0XHRjb25zdCBsZWZ0MTMgPSBsZWZ0WzEzXTtcblx0XHRjb25zdCBsZWZ0MTQgPSBsZWZ0WzE0XTtcblxuXHRcdGNvbnN0IHJpZ2h0MCA9IHJpZ2h0WzBdO1xuXHRcdGNvbnN0IHJpZ2h0MSA9IHJpZ2h0WzFdO1xuXHRcdGNvbnN0IHJpZ2h0MiA9IHJpZ2h0WzJdO1xuXHRcdGNvbnN0IHJpZ2h0NCA9IHJpZ2h0WzRdO1xuXHRcdGNvbnN0IHJpZ2h0NSA9IHJpZ2h0WzVdO1xuXHRcdGNvbnN0IHJpZ2h0NiA9IHJpZ2h0WzZdO1xuXHRcdGNvbnN0IHJpZ2h0OCA9IHJpZ2h0WzhdO1xuXHRcdGNvbnN0IHJpZ2h0OSA9IHJpZ2h0WzldO1xuXHRcdGNvbnN0IHJpZ2h0MTAgPSByaWdodFsxMF07XG5cdFx0Y29uc3QgcmlnaHQxMiA9IHJpZ2h0WzEyXTtcblx0XHRjb25zdCByaWdodDEzID0gcmlnaHRbMTNdO1xuXHRcdGNvbnN0IHJpZ2h0MTQgPSByaWdodFsxNF07XG5cblx0XHRjb25zdCBjb2x1bW4wUm93MCA9IGxlZnQwICogcmlnaHQwICsgbGVmdDQgKiByaWdodDEgKyBsZWZ0OCAqIHJpZ2h0Mjtcblx0XHRjb25zdCBjb2x1bW4wUm93MSA9IGxlZnQxICogcmlnaHQwICsgbGVmdDUgKiByaWdodDEgKyBsZWZ0OSAqIHJpZ2h0Mjtcblx0XHRjb25zdCBjb2x1bW4wUm93MiA9IGxlZnQyICogcmlnaHQwICsgbGVmdDYgKiByaWdodDEgKyBsZWZ0MTAgKiByaWdodDI7XG5cblx0XHRjb25zdCBjb2x1bW4xUm93MCA9IGxlZnQwICogcmlnaHQ0ICsgbGVmdDQgKiByaWdodDUgKyBsZWZ0OCAqIHJpZ2h0Njtcblx0XHRjb25zdCBjb2x1bW4xUm93MSA9IGxlZnQxICogcmlnaHQ0ICsgbGVmdDUgKiByaWdodDUgKyBsZWZ0OSAqIHJpZ2h0Njtcblx0XHRjb25zdCBjb2x1bW4xUm93MiA9IGxlZnQyICogcmlnaHQ0ICsgbGVmdDYgKiByaWdodDUgKyBsZWZ0MTAgKiByaWdodDY7XG5cblx0XHRjb25zdCBjb2x1bW4yUm93MCA9IGxlZnQwICogcmlnaHQ4ICsgbGVmdDQgKiByaWdodDkgKyBsZWZ0OCAqIHJpZ2h0MTA7XG5cdFx0Y29uc3QgY29sdW1uMlJvdzEgPSBsZWZ0MSAqIHJpZ2h0OCArIGxlZnQ1ICogcmlnaHQ5ICsgbGVmdDkgKiByaWdodDEwO1xuXHRcdGNvbnN0IGNvbHVtbjJSb3cyID0gbGVmdDIgKiByaWdodDggKyBsZWZ0NiAqIHJpZ2h0OSArIGxlZnQxMCAqIHJpZ2h0MTA7XG5cblx0XHRjb25zdCBjb2x1bW4zUm93MCA9IGxlZnQwICogcmlnaHQxMiArIGxlZnQ0ICogcmlnaHQxMyArIGxlZnQ4ICogcmlnaHQxNCArIGxlZnQxMjtcblx0XHRjb25zdCBjb2x1bW4zUm93MSA9IGxlZnQxICogcmlnaHQxMiArIGxlZnQ1ICogcmlnaHQxMyArIGxlZnQ5ICogcmlnaHQxNCArIGxlZnQxMztcblx0XHRjb25zdCBjb2x1bW4zUm93MiA9IGxlZnQyICogcmlnaHQxMiArIGxlZnQ2ICogcmlnaHQxMyArIGxlZnQxMCAqIHJpZ2h0MTQgKyBsZWZ0MTQ7XG5cblx0XHRyZXN1bHRbMF0gPSBjb2x1bW4wUm93MDtcblx0XHRyZXN1bHRbMV0gPSBjb2x1bW4wUm93MTtcblx0XHRyZXN1bHRbMl0gPSBjb2x1bW4wUm93Mjtcblx0XHRyZXN1bHRbM10gPSAwLjA7XG5cdFx0cmVzdWx0WzRdID0gY29sdW1uMVJvdzA7XG5cdFx0cmVzdWx0WzVdID0gY29sdW1uMVJvdzE7XG5cdFx0cmVzdWx0WzZdID0gY29sdW1uMVJvdzI7XG5cdFx0cmVzdWx0WzddID0gMC4wO1xuXHRcdHJlc3VsdFs4XSA9IGNvbHVtbjJSb3cwO1xuXHRcdHJlc3VsdFs5XSA9IGNvbHVtbjJSb3cxO1xuXHRcdHJlc3VsdFsxMF0gPSBjb2x1bW4yUm93Mjtcblx0XHRyZXN1bHRbMTFdID0gMC4wO1xuXHRcdHJlc3VsdFsxMl0gPSBjb2x1bW4zUm93MDtcblx0XHRyZXN1bHRbMTNdID0gY29sdW1uM1JvdzE7XG5cdFx0cmVzdWx0WzE0XSA9IGNvbHVtbjNSb3cyO1xuXHRcdHJlc3VsdFsxNV0gPSAxLjA7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBtdWx0aXBseUJ5TWF0cml4MyhtYXRyaXg6IE1hdHJpeDQsIHJvdGF0aW9uOiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRjb25zdCBsZWZ0MCA9IG1hdHJpeFswXTtcblx0XHRjb25zdCBsZWZ0MSA9IG1hdHJpeFsxXTtcblx0XHRjb25zdCBsZWZ0MiA9IG1hdHJpeFsyXTtcblx0XHRjb25zdCBsZWZ0NCA9IG1hdHJpeFs0XTtcblx0XHRjb25zdCBsZWZ0NSA9IG1hdHJpeFs1XTtcblx0XHRjb25zdCBsZWZ0NiA9IG1hdHJpeFs2XTtcblx0XHRjb25zdCBsZWZ0OCA9IG1hdHJpeFs4XTtcblx0XHRjb25zdCBsZWZ0OSA9IG1hdHJpeFs5XTtcblx0XHRjb25zdCBsZWZ0MTAgPSBtYXRyaXhbMTBdO1xuXG5cdFx0Y29uc3QgcmlnaHQwID0gcm90YXRpb25bMF07XG5cdFx0Y29uc3QgcmlnaHQxID0gcm90YXRpb25bMV07XG5cdFx0Y29uc3QgcmlnaHQyID0gcm90YXRpb25bMl07XG5cdFx0Y29uc3QgcmlnaHQ0ID0gcm90YXRpb25bM107XG5cdFx0Y29uc3QgcmlnaHQ1ID0gcm90YXRpb25bNF07XG5cdFx0Y29uc3QgcmlnaHQ2ID0gcm90YXRpb25bNV07XG5cdFx0Y29uc3QgcmlnaHQ4ID0gcm90YXRpb25bNl07XG5cdFx0Y29uc3QgcmlnaHQ5ID0gcm90YXRpb25bN107XG5cdFx0Y29uc3QgcmlnaHQxMCA9IHJvdGF0aW9uWzhdO1xuXG5cdFx0Y29uc3QgY29sdW1uMFJvdzAgPSBsZWZ0MCAqIHJpZ2h0MCArIGxlZnQ0ICogcmlnaHQxICsgbGVmdDggKiByaWdodDI7XG5cdFx0Y29uc3QgY29sdW1uMFJvdzEgPSBsZWZ0MSAqIHJpZ2h0MCArIGxlZnQ1ICogcmlnaHQxICsgbGVmdDkgKiByaWdodDI7XG5cdFx0Y29uc3QgY29sdW1uMFJvdzIgPSBsZWZ0MiAqIHJpZ2h0MCArIGxlZnQ2ICogcmlnaHQxICsgbGVmdDEwICogcmlnaHQyO1xuXG5cdFx0Y29uc3QgY29sdW1uMVJvdzAgPSBsZWZ0MCAqIHJpZ2h0NCArIGxlZnQ0ICogcmlnaHQ1ICsgbGVmdDggKiByaWdodDY7XG5cdFx0Y29uc3QgY29sdW1uMVJvdzEgPSBsZWZ0MSAqIHJpZ2h0NCArIGxlZnQ1ICogcmlnaHQ1ICsgbGVmdDkgKiByaWdodDY7XG5cdFx0Y29uc3QgY29sdW1uMVJvdzIgPSBsZWZ0MiAqIHJpZ2h0NCArIGxlZnQ2ICogcmlnaHQ1ICsgbGVmdDEwICogcmlnaHQ2O1xuXG5cdFx0Y29uc3QgY29sdW1uMlJvdzAgPSBsZWZ0MCAqIHJpZ2h0OCArIGxlZnQ0ICogcmlnaHQ5ICsgbGVmdDggKiByaWdodDEwO1xuXHRcdGNvbnN0IGNvbHVtbjJSb3cxID0gbGVmdDEgKiByaWdodDggKyBsZWZ0NSAqIHJpZ2h0OSArIGxlZnQ5ICogcmlnaHQxMDtcblx0XHRjb25zdCBjb2x1bW4yUm93MiA9IGxlZnQyICogcmlnaHQ4ICsgbGVmdDYgKiByaWdodDkgKyBsZWZ0MTAgKiByaWdodDEwO1xuXG5cdFx0cmVzdWx0WzBdID0gY29sdW1uMFJvdzA7XG5cdFx0cmVzdWx0WzFdID0gY29sdW1uMFJvdzE7XG5cdFx0cmVzdWx0WzJdID0gY29sdW1uMFJvdzI7XG5cdFx0cmVzdWx0WzNdID0gMC4wO1xuXHRcdHJlc3VsdFs0XSA9IGNvbHVtbjFSb3cwO1xuXHRcdHJlc3VsdFs1XSA9IGNvbHVtbjFSb3cxO1xuXHRcdHJlc3VsdFs2XSA9IGNvbHVtbjFSb3cyO1xuXHRcdHJlc3VsdFs3XSA9IDAuMDtcblx0XHRyZXN1bHRbOF0gPSBjb2x1bW4yUm93MDtcblx0XHRyZXN1bHRbOV0gPSBjb2x1bW4yUm93MTtcblx0XHRyZXN1bHRbMTBdID0gY29sdW1uMlJvdzI7XG5cdFx0cmVzdWx0WzExXSA9IDAuMDtcblx0XHRyZXN1bHRbMTJdID0gbWF0cml4WzEyXTtcblx0XHRyZXN1bHRbMTNdID0gbWF0cml4WzEzXTtcblx0XHRyZXN1bHRbMTRdID0gbWF0cml4WzE0XTtcblx0XHRyZXN1bHRbMTVdID0gbWF0cml4WzE1XTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIG11bHRpcGx5QnlUcmFuc2xhdGlvbihtYXRyaXg6IE1hdHJpeDQsIHRyYW5zbGF0aW9uOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRjb25zdCB4ID0gdHJhbnNsYXRpb24ueDtcblx0XHRjb25zdCB5ID0gdHJhbnNsYXRpb24ueTtcblx0XHRjb25zdCB6ID0gdHJhbnNsYXRpb24uejtcblxuXHRcdGNvbnN0IHR4ID0geCAqIG1hdHJpeFswXSArIHkgKiBtYXRyaXhbNF0gKyB6ICogbWF0cml4WzhdICsgbWF0cml4WzEyXTtcblx0XHRjb25zdCB0eSA9IHggKiBtYXRyaXhbMV0gKyB5ICogbWF0cml4WzVdICsgeiAqIG1hdHJpeFs5XSArIG1hdHJpeFsxM107XG5cdFx0Y29uc3QgdHogPSB4ICogbWF0cml4WzJdICsgeSAqIG1hdHJpeFs2XSArIHogKiBtYXRyaXhbMTBdICsgbWF0cml4WzE0XTtcblxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXTtcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV07XG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdO1xuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXTtcblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF07XG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdO1xuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XTtcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN107XG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdO1xuXHRcdHJlc3VsdFs5XSA9IG1hdHJpeFs5XTtcblx0XHRyZXN1bHRbMTBdID0gbWF0cml4WzEwXTtcblx0XHRyZXN1bHRbMTFdID0gbWF0cml4WzExXTtcblx0XHRyZXN1bHRbMTJdID0gdHg7XG5cdFx0cmVzdWx0WzEzXSA9IHR5O1xuXHRcdHJlc3VsdFsxNF0gPSB0ejtcblx0XHRyZXN1bHRbMTVdID0gbWF0cml4WzE1XTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIG11bHRpcGx5QnlTY2FsZShtYXRyaXg6IE1hdHJpeDQsIHNjYWxlOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRjb25zdCBzY2FsZVggPSBzY2FsZS54O1xuXHRcdGNvbnN0IHNjYWxlWSA9IHNjYWxlLnk7XG5cdFx0Y29uc3Qgc2NhbGVaID0gc2NhbGUuejtcblxuXHRcdC8vIEZhc3RlciB0aGFuIFZlY3RvcjMuZXF1YWxzXG5cdFx0aWYgKHNjYWxlWCA9PT0gMS4wICYmIHNjYWxlWSA9PT0gMS4wICYmIHNjYWxlWiA9PT0gMS4wKSB7XG5cdFx0XHRyZXR1cm4gTWF0cml4NC5jbG9uZShtYXRyaXgsIHJlc3VsdCk7XG5cdFx0fVxuXG5cdFx0cmVzdWx0WzBdID0gc2NhbGVYICogbWF0cml4WzBdO1xuXHRcdHJlc3VsdFsxXSA9IHNjYWxlWCAqIG1hdHJpeFsxXTtcblx0XHRyZXN1bHRbMl0gPSBzY2FsZVggKiBtYXRyaXhbMl07XG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdO1xuXG5cdFx0cmVzdWx0WzRdID0gc2NhbGVZICogbWF0cml4WzRdO1xuXHRcdHJlc3VsdFs1XSA9IHNjYWxlWSAqIG1hdHJpeFs1XTtcblx0XHRyZXN1bHRbNl0gPSBzY2FsZVkgKiBtYXRyaXhbNl07XG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddO1xuXG5cdFx0cmVzdWx0WzhdID0gc2NhbGVaICogbWF0cml4WzhdO1xuXHRcdHJlc3VsdFs5XSA9IHNjYWxlWiAqIG1hdHJpeFs5XTtcblx0XHRyZXN1bHRbMTBdID0gc2NhbGVaICogbWF0cml4WzEwXTtcblx0XHRyZXN1bHRbMTFdID0gbWF0cml4WzExXTtcblxuXHRcdHJlc3VsdFsxMl0gPSBtYXRyaXhbMTJdO1xuXHRcdHJlc3VsdFsxM10gPSBtYXRyaXhbMTNdO1xuXHRcdHJlc3VsdFsxNF0gPSBtYXRyaXhbMTRdO1xuXHRcdHJlc3VsdFsxNV0gPSBtYXRyaXhbMTVdO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBtdWx0aXBseUJ5VW5pZm9ybVNjYWxlKG1hdHJpeDogTWF0cml4NCwgc2NhbGU6IG51bWJlciwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdICogc2NhbGU7XG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdICogc2NhbGU7XG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdICogc2NhbGU7XG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdO1xuXG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzRdICogc2NhbGU7XG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdICogc2NhbGU7XG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdICogc2NhbGU7XG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddO1xuXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdICogc2NhbGU7XG5cdFx0cmVzdWx0WzldID0gbWF0cml4WzldICogc2NhbGU7XG5cdFx0cmVzdWx0WzEwXSA9IG1hdHJpeFsxMF0gKiBzY2FsZTtcblx0XHRyZXN1bHRbMTFdID0gbWF0cml4WzExXTtcblxuXHRcdHJlc3VsdFsxMl0gPSBtYXRyaXhbMTJdO1xuXHRcdHJlc3VsdFsxM10gPSBtYXRyaXhbMTNdO1xuXHRcdHJlc3VsdFsxNF0gPSBtYXRyaXhbMTRdO1xuXHRcdHJlc3VsdFsxNV0gPSBtYXRyaXhbMTVdO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBtdWx0aXBseUJ5VmVjdG9yKG1hdHJpeDogTWF0cml4NCwgY2FydGVzaWFuOiBWZWN0b3I0LCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcblx0XHRjb25zdCB2WCA9IGNhcnRlc2lhbi54O1xuXHRcdGNvbnN0IHZZID0gY2FydGVzaWFuLnk7XG5cdFx0Y29uc3QgdlogPSBjYXJ0ZXNpYW4uejtcblx0XHRjb25zdCB2VyA9IGNhcnRlc2lhbi53O1xuXG5cdFx0Y29uc3QgeCA9IG1hdHJpeFswXSAqIHZYICsgbWF0cml4WzRdICogdlkgKyBtYXRyaXhbOF0gKiB2WiArIG1hdHJpeFsxMl0gKiB2Vztcblx0XHRjb25zdCB5ID0gbWF0cml4WzFdICogdlggKyBtYXRyaXhbNV0gKiB2WSArIG1hdHJpeFs5XSAqIHZaICsgbWF0cml4WzEzXSAqIHZXO1xuXHRcdGNvbnN0IHogPSBtYXRyaXhbMl0gKiB2WCArIG1hdHJpeFs2XSAqIHZZICsgbWF0cml4WzEwXSAqIHZaICsgbWF0cml4WzE0XSAqIHZXO1xuXHRcdGNvbnN0IHcgPSBtYXRyaXhbM10gKiB2WCArIG1hdHJpeFs3XSAqIHZZICsgbWF0cml4WzExXSAqIHZaICsgbWF0cml4WzE1XSAqIHZXO1xuXG5cdFx0cmVzdWx0LnggPSB4O1xuXHRcdHJlc3VsdC55ID0geTtcblx0XHRyZXN1bHQueiA9IHo7XG5cdFx0cmVzdWx0LncgPSB3O1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgbXVsdGlwbHlCeVBvaW50QXNWZWN0b3IobWF0cml4OiBNYXRyaXg0LCBjYXJ0ZXNpYW46IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xuXHRcdGNvbnN0IHZYID0gY2FydGVzaWFuLng7XG5cdFx0Y29uc3QgdlkgPSBjYXJ0ZXNpYW4ueTtcblx0XHRjb25zdCB2WiA9IGNhcnRlc2lhbi56O1xuXG5cdFx0Y29uc3QgeCA9IG1hdHJpeFswXSAqIHZYICsgbWF0cml4WzRdICogdlkgKyBtYXRyaXhbOF0gKiB2Wjtcblx0XHRjb25zdCB5ID0gbWF0cml4WzFdICogdlggKyBtYXRyaXhbNV0gKiB2WSArIG1hdHJpeFs5XSAqIHZaO1xuXHRcdGNvbnN0IHogPSBtYXRyaXhbMl0gKiB2WCArIG1hdHJpeFs2XSAqIHZZICsgbWF0cml4WzEwXSAqIHZaO1xuXG5cdFx0cmVzdWx0LnggPSB4O1xuXHRcdHJlc3VsdC55ID0geTtcblx0XHRyZXN1bHQueiA9IHo7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBtdWx0aXBseUJ5UG9pbnQobWF0cml4OiBNYXRyaXg0LCBjYXJ0ZXNpYW46IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xuXHRcdGNvbnN0IHZYID0gY2FydGVzaWFuLng7XG5cdFx0Y29uc3QgdlkgPSBjYXJ0ZXNpYW4ueTtcblx0XHRjb25zdCB2WiA9IGNhcnRlc2lhbi56O1xuXG5cdFx0Y29uc3QgeCA9IG1hdHJpeFswXSAqIHZYICsgbWF0cml4WzRdICogdlkgKyBtYXRyaXhbOF0gKiB2WiArIG1hdHJpeFsxMl07XG5cdFx0Y29uc3QgeSA9IG1hdHJpeFsxXSAqIHZYICsgbWF0cml4WzVdICogdlkgKyBtYXRyaXhbOV0gKiB2WiArIG1hdHJpeFsxM107XG5cdFx0Y29uc3QgeiA9IG1hdHJpeFsyXSAqIHZYICsgbWF0cml4WzZdICogdlkgKyBtYXRyaXhbMTBdICogdlogKyBtYXRyaXhbMTRdO1xuXG5cdFx0cmVzdWx0LnggPSB4O1xuXHRcdHJlc3VsdC55ID0geTtcblx0XHRyZXN1bHQueiA9IHo7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBtdWx0aXBseUJ5U2NhbGFyKG1hdHJpeDogTWF0cml4NCwgc2NhbGFyOiBudW1iZXIsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsYXI7XG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdICogc2NhbGFyO1xuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF0gKiBzY2FsYXI7XG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdICogc2NhbGFyO1xuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN10gKiBzY2FsYXI7XG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdICogc2NhbGFyO1xuXHRcdHJlc3VsdFs5XSA9IG1hdHJpeFs5XSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbMTBdID0gbWF0cml4WzEwXSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbMTFdID0gbWF0cml4WzExXSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbMTJdID0gbWF0cml4WzEyXSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbMTNdID0gbWF0cml4WzEzXSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbMTRdID0gbWF0cml4WzE0XSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbMTVdID0gbWF0cml4WzE1XSAqIHNjYWxhcjtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIG5lZ2F0ZShtYXRyaXg6IE1hdHJpeDQsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdHJlc3VsdFswXSA9IC1tYXRyaXhbMF07XG5cdFx0cmVzdWx0WzFdID0gLW1hdHJpeFsxXTtcblx0XHRyZXN1bHRbMl0gPSAtbWF0cml4WzJdO1xuXHRcdHJlc3VsdFszXSA9IC1tYXRyaXhbM107XG5cdFx0cmVzdWx0WzRdID0gLW1hdHJpeFs0XTtcblx0XHRyZXN1bHRbNV0gPSAtbWF0cml4WzVdO1xuXHRcdHJlc3VsdFs2XSA9IC1tYXRyaXhbNl07XG5cdFx0cmVzdWx0WzddID0gLW1hdHJpeFs3XTtcblx0XHRyZXN1bHRbOF0gPSAtbWF0cml4WzhdO1xuXHRcdHJlc3VsdFs5XSA9IC1tYXRyaXhbOV07XG5cdFx0cmVzdWx0WzEwXSA9IC1tYXRyaXhbMTBdO1xuXHRcdHJlc3VsdFsxMV0gPSAtbWF0cml4WzExXTtcblx0XHRyZXN1bHRbMTJdID0gLW1hdHJpeFsxMl07XG5cdFx0cmVzdWx0WzEzXSA9IC1tYXRyaXhbMTNdO1xuXHRcdHJlc3VsdFsxNF0gPSAtbWF0cml4WzE0XTtcblx0XHRyZXN1bHRbMTVdID0gLW1hdHJpeFsxNV07XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyB0cmFuc3Bvc2UobWF0cml4OiBNYXRyaXg0LCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRjb25zdCBtYXRyaXgxID0gbWF0cml4WzFdO1xuXHRcdGNvbnN0IG1hdHJpeDIgPSBtYXRyaXhbMl07XG5cdFx0Y29uc3QgbWF0cml4MyA9IG1hdHJpeFszXTtcblx0XHRjb25zdCBtYXRyaXg2ID0gbWF0cml4WzZdO1xuXHRcdGNvbnN0IG1hdHJpeDcgPSBtYXRyaXhbN107XG5cdFx0Y29uc3QgbWF0cml4MTEgPSBtYXRyaXhbMTFdO1xuXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdO1xuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFs0XTtcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbOF07XG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzEyXTtcblx0XHRyZXN1bHRbNF0gPSBtYXRyaXgxO1xuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XTtcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXhbOV07XG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzEzXTtcblx0XHRyZXN1bHRbOF0gPSBtYXRyaXgyO1xuXHRcdHJlc3VsdFs5XSA9IG1hdHJpeDY7XG5cdFx0cmVzdWx0WzEwXSA9IG1hdHJpeFsxMF07XG5cdFx0cmVzdWx0WzExXSA9IG1hdHJpeFsxNF07XG5cdFx0cmVzdWx0WzEyXSA9IG1hdHJpeDM7XG5cdFx0cmVzdWx0WzEzXSA9IG1hdHJpeDc7XG5cdFx0cmVzdWx0WzE0XSA9IG1hdHJpeDExO1xuXHRcdHJlc3VsdFsxNV0gPSBtYXRyaXhbMTVdO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgYWJzKG1hdHJpeDogTWF0cml4NCwgcmVzdWx0OiBNYXRyaXg0KSB7XG5cdFx0cmVzdWx0WzBdID0gTWF0aC5hYnMobWF0cml4WzBdKTtcblx0XHRyZXN1bHRbMV0gPSBNYXRoLmFicyhtYXRyaXhbMV0pO1xuXHRcdHJlc3VsdFsyXSA9IE1hdGguYWJzKG1hdHJpeFsyXSk7XG5cdFx0cmVzdWx0WzNdID0gTWF0aC5hYnMobWF0cml4WzNdKTtcblx0XHRyZXN1bHRbNF0gPSBNYXRoLmFicyhtYXRyaXhbNF0pO1xuXHRcdHJlc3VsdFs1XSA9IE1hdGguYWJzKG1hdHJpeFs1XSk7XG5cdFx0cmVzdWx0WzZdID0gTWF0aC5hYnMobWF0cml4WzZdKTtcblx0XHRyZXN1bHRbN10gPSBNYXRoLmFicyhtYXRyaXhbN10pO1xuXHRcdHJlc3VsdFs4XSA9IE1hdGguYWJzKG1hdHJpeFs4XSk7XG5cdFx0cmVzdWx0WzldID0gTWF0aC5hYnMobWF0cml4WzldKTtcblx0XHRyZXN1bHRbMTBdID0gTWF0aC5hYnMobWF0cml4WzEwXSk7XG5cdFx0cmVzdWx0WzExXSA9IE1hdGguYWJzKG1hdHJpeFsxMV0pO1xuXHRcdHJlc3VsdFsxMl0gPSBNYXRoLmFicyhtYXRyaXhbMTJdKTtcblx0XHRyZXN1bHRbMTNdID0gTWF0aC5hYnMobWF0cml4WzEzXSk7XG5cdFx0cmVzdWx0WzE0XSA9IE1hdGguYWJzKG1hdHJpeFsxNF0pO1xuXHRcdHJlc3VsdFsxNV0gPSBNYXRoLmFicyhtYXRyaXhbMTVdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgZXF1YWxzKGxlZnQ6IE1hdHJpeDQsIHJpZ2h0OiBNYXRyaXg0KTogYm9vbGVhbiB7XG5cdFx0Ly8gR2l2ZW4gdGhhdCBtb3N0IG1hdHJpY2VzIHdpbGwgYmUgdHJhbnNmb3JtYXRpb24gbWF0cmljZXMsIHRoZSBlbGVtZW50c1xuXHRcdC8vIGFyZSB0ZXN0ZWQgaW4gb3JkZXIgc3VjaCB0aGF0IHRoZSB0ZXN0IGlzIGxpa2VseSB0byBmYWlsIGFzIGVhcmx5XG5cdFx0Ly8gYXMgcG9zc2libGUuICBJIF90aGlua18gdGhpcyBpcyBqdXN0IGFzIGZyaWVuZGx5IHRvIHRoZSBMMSBjYWNoZVxuXHRcdC8vIGFzIHRlc3RpbmcgaW4gaW5kZXggb3JkZXIuICBJdCBpcyBjZXJ0YWludHkgZmFzdGVyIGluIHByYWN0aWNlLlxuXHRcdHJldHVybiAoXG5cdFx0XHRsZWZ0ID09PSByaWdodCB8fFxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcblx0XHRcdFx0ZGVmaW5lZChyaWdodCkgJiZcblx0XHRcdFx0Ly8gVHJhbnNsYXRpb25cblx0XHRcdFx0bGVmdFsxMl0gPT09IHJpZ2h0WzEyXSAmJlxuXHRcdFx0XHRsZWZ0WzEzXSA9PT0gcmlnaHRbMTNdICYmXG5cdFx0XHRcdGxlZnRbMTRdID09PSByaWdodFsxNF0gJiZcblx0XHRcdFx0Ly8gUm90YXRpb24vc2NhbGVcblx0XHRcdFx0bGVmdFswXSA9PT0gcmlnaHRbMF0gJiZcblx0XHRcdFx0bGVmdFsxXSA9PT0gcmlnaHRbMV0gJiZcblx0XHRcdFx0bGVmdFsyXSA9PT0gcmlnaHRbMl0gJiZcblx0XHRcdFx0bGVmdFs0XSA9PT0gcmlnaHRbNF0gJiZcblx0XHRcdFx0bGVmdFs1XSA9PT0gcmlnaHRbNV0gJiZcblx0XHRcdFx0bGVmdFs2XSA9PT0gcmlnaHRbNl0gJiZcblx0XHRcdFx0bGVmdFs4XSA9PT0gcmlnaHRbOF0gJiZcblx0XHRcdFx0bGVmdFs5XSA9PT0gcmlnaHRbOV0gJiZcblx0XHRcdFx0bGVmdFsxMF0gPT09IHJpZ2h0WzEwXSAmJlxuXHRcdFx0XHQvLyBCb3R0b20gcm93XG5cdFx0XHRcdGxlZnRbM10gPT09IHJpZ2h0WzNdICYmXG5cdFx0XHRcdGxlZnRbN10gPT09IHJpZ2h0WzddICYmXG5cdFx0XHRcdGxlZnRbMTFdID09PSByaWdodFsxMV0gJiZcblx0XHRcdFx0bGVmdFsxNV0gPT09IHJpZ2h0WzE1XSlcblx0XHQpO1xuXHR9XG5cblx0c3RhdGljIGVxdWFsc0Vwc2lsb24obGVmdDogTWF0cml4NCwgcmlnaHQ6IE1hdHJpeDQsIGVwc2lsb246IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdGVwc2lsb24gPSBkZWZhdWx0VmFsdWUoZXBzaWxvbiwgMCk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcblx0XHRcdChkZWZpbmVkKGxlZnQpICYmXG5cdFx0XHRcdGRlZmluZWQocmlnaHQpICYmXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMF0gLSByaWdodFswXSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzFdIC0gcmlnaHRbMV0pIDw9IGVwc2lsb24gJiZcblx0XHRcdFx0TWF0aC5hYnMobGVmdFsyXSAtIHJpZ2h0WzJdKSA8PSBlcHNpbG9uICYmXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbM10gLSByaWdodFszXSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzRdIC0gcmlnaHRbNF0pIDw9IGVwc2lsb24gJiZcblx0XHRcdFx0TWF0aC5hYnMobGVmdFs1XSAtIHJpZ2h0WzVdKSA8PSBlcHNpbG9uICYmXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbNl0gLSByaWdodFs2XSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzddIC0gcmlnaHRbN10pIDw9IGVwc2lsb24gJiZcblx0XHRcdFx0TWF0aC5hYnMobGVmdFs4XSAtIHJpZ2h0WzhdKSA8PSBlcHNpbG9uICYmXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbOV0gLSByaWdodFs5XSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzEwXSAtIHJpZ2h0WzEwXSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzExXSAtIHJpZ2h0WzExXSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzEyXSAtIHJpZ2h0WzEyXSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzEzXSAtIHJpZ2h0WzEzXSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzE0XSAtIHJpZ2h0WzE0XSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzE1XSAtIHJpZ2h0WzE1XSkgPD0gZXBzaWxvbilcblx0XHQpO1xuXHR9XG5cblx0c3RhdGljIGdldFRyYW5zbGF0aW9uKG1hdHJpeDogTWF0cml4NCwgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XG5cdFx0cmVzdWx0LnggPSBtYXRyaXhbMTJdO1xuXHRcdHJlc3VsdC55ID0gbWF0cml4WzEzXTtcblx0XHRyZXN1bHQueiA9IG1hdHJpeFsxNF07XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBnZXRNYXRyaXgzKG1hdHJpeDogTWF0cml4NCwgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdO1xuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXTtcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl07XG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzRdO1xuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeFs1XTtcblx0XHRyZXN1bHRbNV0gPSBtYXRyaXhbNl07XG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzhdO1xuXHRcdHJlc3VsdFs3XSA9IG1hdHJpeFs5XTtcblx0XHRyZXN1bHRbOF0gPSBtYXRyaXhbMTBdO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgaW52ZXJzZShtYXRyaXg6IE1hdHJpeDQsIHJlc3VsdDogTWF0cml4NCkge1xuXHRcdC8vXG5cdFx0Ly8gUG9ydGVkIGZyb206XG5cdFx0Ly8gICBmdHA6Ly9kb3dubG9hZC5pbnRlbC5jb20vZGVzaWduL1BlbnRpdW1JSUkvc21sLzI0NTA0MzAxLnBkZlxuXHRcdC8vXG5cdFx0Y29uc3Qgc3JjMCA9IG1hdHJpeFswXTtcblx0XHRjb25zdCBzcmMxID0gbWF0cml4WzRdO1xuXHRcdGNvbnN0IHNyYzIgPSBtYXRyaXhbOF07XG5cdFx0Y29uc3Qgc3JjMyA9IG1hdHJpeFsxMl07XG5cdFx0Y29uc3Qgc3JjNCA9IG1hdHJpeFsxXTtcblx0XHRjb25zdCBzcmM1ID0gbWF0cml4WzVdO1xuXHRcdGNvbnN0IHNyYzYgPSBtYXRyaXhbOV07XG5cdFx0Y29uc3Qgc3JjNyA9IG1hdHJpeFsxM107XG5cdFx0Y29uc3Qgc3JjOCA9IG1hdHJpeFsyXTtcblx0XHRjb25zdCBzcmM5ID0gbWF0cml4WzZdO1xuXHRcdGNvbnN0IHNyYzEwID0gbWF0cml4WzEwXTtcblx0XHRjb25zdCBzcmMxMSA9IG1hdHJpeFsxNF07XG5cdFx0Y29uc3Qgc3JjMTIgPSBtYXRyaXhbM107XG5cdFx0Y29uc3Qgc3JjMTMgPSBtYXRyaXhbN107XG5cdFx0Y29uc3Qgc3JjMTQgPSBtYXRyaXhbMTFdO1xuXHRcdGNvbnN0IHNyYzE1ID0gbWF0cml4WzE1XTtcblxuXHRcdC8vIGNhbGN1bGF0ZSBwYWlycyBmb3IgZmlyc3QgOCBlbGVtZW50cyAoY29mYWN0b3JzKVxuXHRcdGxldCB0bXAwID0gc3JjMTAgKiBzcmMxNTtcblx0XHRsZXQgdG1wMSA9IHNyYzExICogc3JjMTQ7XG5cdFx0bGV0IHRtcDIgPSBzcmM5ICogc3JjMTU7XG5cdFx0bGV0IHRtcDMgPSBzcmMxMSAqIHNyYzEzO1xuXHRcdGxldCB0bXA0ID0gc3JjOSAqIHNyYzE0O1xuXHRcdGxldCB0bXA1ID0gc3JjMTAgKiBzcmMxMztcblx0XHRsZXQgdG1wNiA9IHNyYzggKiBzcmMxNTtcblx0XHRsZXQgdG1wNyA9IHNyYzExICogc3JjMTI7XG5cdFx0bGV0IHRtcDggPSBzcmM4ICogc3JjMTQ7XG5cdFx0bGV0IHRtcDkgPSBzcmMxMCAqIHNyYzEyO1xuXHRcdGxldCB0bXAxMCA9IHNyYzggKiBzcmMxMztcblx0XHRsZXQgdG1wMTEgPSBzcmM5ICogc3JjMTI7XG5cblx0XHQvLyBjYWxjdWxhdGUgZmlyc3QgOCBlbGVtZW50cyAoY29mYWN0b3JzKVxuXHRcdGNvbnN0IGRzdDAgPSB0bXAwICogc3JjNSArIHRtcDMgKiBzcmM2ICsgdG1wNCAqIHNyYzcgLSAodG1wMSAqIHNyYzUgKyB0bXAyICogc3JjNiArIHRtcDUgKiBzcmM3KTtcblx0XHRjb25zdCBkc3QxID0gdG1wMSAqIHNyYzQgKyB0bXA2ICogc3JjNiArIHRtcDkgKiBzcmM3IC0gKHRtcDAgKiBzcmM0ICsgdG1wNyAqIHNyYzYgKyB0bXA4ICogc3JjNyk7XG5cdFx0Y29uc3QgZHN0MiA9IHRtcDIgKiBzcmM0ICsgdG1wNyAqIHNyYzUgKyB0bXAxMCAqIHNyYzcgLSAodG1wMyAqIHNyYzQgKyB0bXA2ICogc3JjNSArIHRtcDExICogc3JjNyk7XG5cdFx0Y29uc3QgZHN0MyA9IHRtcDUgKiBzcmM0ICsgdG1wOCAqIHNyYzUgKyB0bXAxMSAqIHNyYzYgLSAodG1wNCAqIHNyYzQgKyB0bXA5ICogc3JjNSArIHRtcDEwICogc3JjNik7XG5cdFx0Y29uc3QgZHN0NCA9IHRtcDEgKiBzcmMxICsgdG1wMiAqIHNyYzIgKyB0bXA1ICogc3JjMyAtICh0bXAwICogc3JjMSArIHRtcDMgKiBzcmMyICsgdG1wNCAqIHNyYzMpO1xuXHRcdGNvbnN0IGRzdDUgPSB0bXAwICogc3JjMCArIHRtcDcgKiBzcmMyICsgdG1wOCAqIHNyYzMgLSAodG1wMSAqIHNyYzAgKyB0bXA2ICogc3JjMiArIHRtcDkgKiBzcmMzKTtcblx0XHRjb25zdCBkc3Q2ID0gdG1wMyAqIHNyYzAgKyB0bXA2ICogc3JjMSArIHRtcDExICogc3JjMyAtICh0bXAyICogc3JjMCArIHRtcDcgKiBzcmMxICsgdG1wMTAgKiBzcmMzKTtcblx0XHRjb25zdCBkc3Q3ID0gdG1wNCAqIHNyYzAgKyB0bXA5ICogc3JjMSArIHRtcDEwICogc3JjMiAtICh0bXA1ICogc3JjMCArIHRtcDggKiBzcmMxICsgdG1wMTEgKiBzcmMyKTtcblxuXHRcdC8vIGNhbGN1bGF0ZSBwYWlycyBmb3Igc2Vjb25kIDggZWxlbWVudHMgKGNvZmFjdG9ycylcblx0XHR0bXAwID0gc3JjMiAqIHNyYzc7XG5cdFx0dG1wMSA9IHNyYzMgKiBzcmM2O1xuXHRcdHRtcDIgPSBzcmMxICogc3JjNztcblx0XHR0bXAzID0gc3JjMyAqIHNyYzU7XG5cdFx0dG1wNCA9IHNyYzEgKiBzcmM2O1xuXHRcdHRtcDUgPSBzcmMyICogc3JjNTtcblx0XHR0bXA2ID0gc3JjMCAqIHNyYzc7XG5cdFx0dG1wNyA9IHNyYzMgKiBzcmM0O1xuXHRcdHRtcDggPSBzcmMwICogc3JjNjtcblx0XHR0bXA5ID0gc3JjMiAqIHNyYzQ7XG5cdFx0dG1wMTAgPSBzcmMwICogc3JjNTtcblx0XHR0bXAxMSA9IHNyYzEgKiBzcmM0O1xuXG5cdFx0Ly8gY2FsY3VsYXRlIHNlY29uZCA4IGVsZW1lbnRzIChjb2ZhY3RvcnMpXG5cdFx0Y29uc3QgZHN0OCA9IHRtcDAgKiBzcmMxMyArIHRtcDMgKiBzcmMxNCArIHRtcDQgKiBzcmMxNSAtICh0bXAxICogc3JjMTMgKyB0bXAyICogc3JjMTQgKyB0bXA1ICogc3JjMTUpO1xuXHRcdGNvbnN0IGRzdDkgPSB0bXAxICogc3JjMTIgKyB0bXA2ICogc3JjMTQgKyB0bXA5ICogc3JjMTUgLSAodG1wMCAqIHNyYzEyICsgdG1wNyAqIHNyYzE0ICsgdG1wOCAqIHNyYzE1KTtcblx0XHRjb25zdCBkc3QxMCA9IHRtcDIgKiBzcmMxMiArIHRtcDcgKiBzcmMxMyArIHRtcDEwICogc3JjMTUgLSAodG1wMyAqIHNyYzEyICsgdG1wNiAqIHNyYzEzICsgdG1wMTEgKiBzcmMxNSk7XG5cdFx0Y29uc3QgZHN0MTEgPSB0bXA1ICogc3JjMTIgKyB0bXA4ICogc3JjMTMgKyB0bXAxMSAqIHNyYzE0IC0gKHRtcDQgKiBzcmMxMiArIHRtcDkgKiBzcmMxMyArIHRtcDEwICogc3JjMTQpO1xuXHRcdGNvbnN0IGRzdDEyID0gdG1wMiAqIHNyYzEwICsgdG1wNSAqIHNyYzExICsgdG1wMSAqIHNyYzkgLSAodG1wNCAqIHNyYzExICsgdG1wMCAqIHNyYzkgKyB0bXAzICogc3JjMTApO1xuXHRcdGNvbnN0IGRzdDEzID0gdG1wOCAqIHNyYzExICsgdG1wMCAqIHNyYzggKyB0bXA3ICogc3JjMTAgLSAodG1wNiAqIHNyYzEwICsgdG1wOSAqIHNyYzExICsgdG1wMSAqIHNyYzgpO1xuXHRcdGNvbnN0IGRzdDE0ID0gdG1wNiAqIHNyYzkgKyB0bXAxMSAqIHNyYzExICsgdG1wMyAqIHNyYzggLSAodG1wMTAgKiBzcmMxMSArIHRtcDIgKiBzcmM4ICsgdG1wNyAqIHNyYzkpO1xuXHRcdGNvbnN0IGRzdDE1ID0gdG1wMTAgKiBzcmMxMCArIHRtcDQgKiBzcmM4ICsgdG1wOSAqIHNyYzkgLSAodG1wOCAqIHNyYzkgKyB0bXAxMSAqIHNyYzEwICsgdG1wNSAqIHNyYzgpO1xuXG5cdFx0Ly8gY2FsY3VsYXRlIGRldGVybWluYW50XG5cdFx0bGV0IGRldCA9IHNyYzAgKiBkc3QwICsgc3JjMSAqIGRzdDEgKyBzcmMyICogZHN0MiArIHNyYzMgKiBkc3QzO1xuXG5cdFx0aWYgKE1hdGguYWJzKGRldCkgPCBHTWF0aC5FUFNJTE9OMjEpIHtcblx0XHRcdC8vIFNwZWNpYWwgY2FzZSBmb3IgYSB6ZXJvIHNjYWxlIG1hdHJpeCB0aGF0IGNhbiBvY2N1ciwgZm9yIGV4YW1wbGUsXG5cdFx0XHQvLyB3aGVuIGEgbW9kZWwncyBub2RlIGhhcyBhIFswLCAwLCAwXSBzY2FsZS5cblx0XHRcdGlmIChcblx0XHRcdFx0TWF0cml4My5lcXVhbHNFcHNpbG9uKFxuXHRcdFx0XHRcdE1hdHJpeDQuZ2V0TWF0cml4MyhtYXRyaXgsIHNjcmF0Y2hJbnZlcnNlUm90YXRpb24pLFxuXHRcdFx0XHRcdHNjcmF0Y2hNYXRyaXgzWmVybyxcblx0XHRcdFx0XHRHTWF0aC5FUFNJTE9ON1xuXHRcdFx0XHQpICYmXG5cdFx0XHRcdFZlY3RvcjQuZXF1YWxzKE1hdHJpeDQuZ2V0Um93KG1hdHJpeCwgMywgc2NyYXRjaEJvdHRvbVJvdyksIHNjcmF0Y2hFeHBlY3RlZEJvdHRvbVJvdylcblx0XHRcdCkge1xuXHRcdFx0XHRyZXN1bHRbMF0gPSAwLjA7XG5cdFx0XHRcdHJlc3VsdFsxXSA9IDAuMDtcblx0XHRcdFx0cmVzdWx0WzJdID0gMC4wO1xuXHRcdFx0XHRyZXN1bHRbM10gPSAwLjA7XG5cdFx0XHRcdHJlc3VsdFs0XSA9IDAuMDtcblx0XHRcdFx0cmVzdWx0WzVdID0gMC4wO1xuXHRcdFx0XHRyZXN1bHRbNl0gPSAwLjA7XG5cdFx0XHRcdHJlc3VsdFs3XSA9IDAuMDtcblx0XHRcdFx0cmVzdWx0WzhdID0gMC4wO1xuXHRcdFx0XHRyZXN1bHRbOV0gPSAwLjA7XG5cdFx0XHRcdHJlc3VsdFsxMF0gPSAwLjA7XG5cdFx0XHRcdHJlc3VsdFsxMV0gPSAwLjA7XG5cdFx0XHRcdHJlc3VsdFsxMl0gPSAtbWF0cml4WzEyXTtcblx0XHRcdFx0cmVzdWx0WzEzXSA9IC1tYXRyaXhbMTNdO1xuXHRcdFx0XHRyZXN1bHRbMTRdID0gLW1hdHJpeFsxNF07XG5cdFx0XHRcdHJlc3VsdFsxNV0gPSAxLjA7XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1hdHJpeCBpcyBub3QgaW52ZXJ0aWJsZSBiZWNhdXNlIGl0cyBkZXRlcm1pbmF0ZSBpcyB6ZXJvLlwiKTtcblx0XHR9XG5cblx0XHQvLyBjYWxjdWxhdGUgbWF0cml4IGludmVyc2Vcblx0XHRkZXQgPSAxLjAgLyBkZXQ7XG5cblx0XHRyZXN1bHRbMF0gPSBkc3QwICogZGV0O1xuXHRcdHJlc3VsdFsxXSA9IGRzdDEgKiBkZXQ7XG5cdFx0cmVzdWx0WzJdID0gZHN0MiAqIGRldDtcblx0XHRyZXN1bHRbM10gPSBkc3QzICogZGV0O1xuXHRcdHJlc3VsdFs0XSA9IGRzdDQgKiBkZXQ7XG5cdFx0cmVzdWx0WzVdID0gZHN0NSAqIGRldDtcblx0XHRyZXN1bHRbNl0gPSBkc3Q2ICogZGV0O1xuXHRcdHJlc3VsdFs3XSA9IGRzdDcgKiBkZXQ7XG5cdFx0cmVzdWx0WzhdID0gZHN0OCAqIGRldDtcblx0XHRyZXN1bHRbOV0gPSBkc3Q5ICogZGV0O1xuXHRcdHJlc3VsdFsxMF0gPSBkc3QxMCAqIGRldDtcblx0XHRyZXN1bHRbMTFdID0gZHN0MTEgKiBkZXQ7XG5cdFx0cmVzdWx0WzEyXSA9IGRzdDEyICogZGV0O1xuXHRcdHJlc3VsdFsxM10gPSBkc3QxMyAqIGRldDtcblx0XHRyZXN1bHRbMTRdID0gZHN0MTQgKiBkZXQ7XG5cdFx0cmVzdWx0WzE1XSA9IGRzdDE1ICogZGV0O1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgaW52ZXJzZVRyYW5zZm9ybWF0aW9uKG1hdHJpeDogTWF0cml4NCwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0Ly8gVGhpcyBmdW5jdGlvbiBpcyBhbiBvcHRpbWl6ZWQgdmVyc2lvbiBvZiB0aGUgYmVsb3cgNCBsaW5lcy5cblx0XHQvLyBjb25zdCByVCA9IE1hdHJpeDMudHJhbnNwb3NlKE1hdHJpeDQuZ2V0TWF0cml4MyhtYXRyaXgpKTtcblx0XHQvLyBjb25zdCByVE4gPSBNYXRyaXgzLm5lZ2F0ZShyVCk7XG5cdFx0Ly8gY29uc3QgclRUID0gTWF0cml4My5tdWx0aXBseUJ5VmVjdG9yKHJUTiwgTWF0cml4NC5nZXRUcmFuc2xhdGlvbihtYXRyaXgpKTtcblx0XHQvLyByZXR1cm4gTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihyVCwgclRULCByZXN1bHQpO1xuXG5cdFx0Y29uc3QgbWF0cml4MCA9IG1hdHJpeFswXTtcblx0XHRjb25zdCBtYXRyaXgxID0gbWF0cml4WzFdO1xuXHRcdGNvbnN0IG1hdHJpeDIgPSBtYXRyaXhbMl07XG5cdFx0Y29uc3QgbWF0cml4NCA9IG1hdHJpeFs0XTtcblx0XHRjb25zdCBtYXRyaXg1ID0gbWF0cml4WzVdO1xuXHRcdGNvbnN0IG1hdHJpeDYgPSBtYXRyaXhbNl07XG5cdFx0Y29uc3QgbWF0cml4OCA9IG1hdHJpeFs4XTtcblx0XHRjb25zdCBtYXRyaXg5ID0gbWF0cml4WzldO1xuXHRcdGNvbnN0IG1hdHJpeDEwID0gbWF0cml4WzEwXTtcblxuXHRcdGNvbnN0IHZYID0gbWF0cml4WzEyXTtcblx0XHRjb25zdCB2WSA9IG1hdHJpeFsxM107XG5cdFx0Y29uc3QgdlogPSBtYXRyaXhbMTRdO1xuXG5cdFx0Y29uc3QgeCA9IC1tYXRyaXgwICogdlggLSBtYXRyaXgxICogdlkgLSBtYXRyaXgyICogdlo7XG5cdFx0Y29uc3QgeSA9IC1tYXRyaXg0ICogdlggLSBtYXRyaXg1ICogdlkgLSBtYXRyaXg2ICogdlo7XG5cdFx0Y29uc3QgeiA9IC1tYXRyaXg4ICogdlggLSBtYXRyaXg5ICogdlkgLSBtYXRyaXgxMCAqIHZaO1xuXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4MDtcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXg0O1xuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeDg7XG5cdFx0cmVzdWx0WzNdID0gMC4wO1xuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeDE7XG5cdFx0cmVzdWx0WzVdID0gbWF0cml4NTtcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXg5O1xuXHRcdHJlc3VsdFs3XSA9IDAuMDtcblx0XHRyZXN1bHRbOF0gPSBtYXRyaXgyO1xuXHRcdHJlc3VsdFs5XSA9IG1hdHJpeDY7XG5cdFx0cmVzdWx0WzEwXSA9IG1hdHJpeDEwO1xuXHRcdHJlc3VsdFsxMV0gPSAwLjA7XG5cdFx0cmVzdWx0WzEyXSA9IHg7XG5cdFx0cmVzdWx0WzEzXSA9IHk7XG5cdFx0cmVzdWx0WzE0XSA9IHo7XG5cdFx0cmVzdWx0WzE1XSA9IDEuMDtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIGludmVyc2VUcmFuc3Bvc2UobWF0cml4OiBNYXRyaXg0LCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRyZXR1cm4gTWF0cml4NC5pbnZlcnNlKE1hdHJpeDQudHJhbnNwb3NlKG1hdHJpeCwgc2NyYXRjaFRyYW5zcG9zZU1hdHJpeCksIHJlc3VsdCk7XG5cdH1cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRzdGF0aWMgZXF1YWxzQXJyYXkobWF0cml4OiBNYXRyaXg0LCBhcnJheTogQXJyYXk8bnVtYmVyPiwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0bWF0cml4WzBdID09PSBhcnJheVtvZmZzZXRdICYmXG5cdFx0XHRtYXRyaXhbMV0gPT09IGFycmF5W29mZnNldCArIDFdICYmXG5cdFx0XHRtYXRyaXhbMl0gPT09IGFycmF5W29mZnNldCArIDJdICYmXG5cdFx0XHRtYXRyaXhbM10gPT09IGFycmF5W29mZnNldCArIDNdICYmXG5cdFx0XHRtYXRyaXhbNF0gPT09IGFycmF5W29mZnNldCArIDRdICYmXG5cdFx0XHRtYXRyaXhbNV0gPT09IGFycmF5W29mZnNldCArIDVdICYmXG5cdFx0XHRtYXRyaXhbNl0gPT09IGFycmF5W29mZnNldCArIDZdICYmXG5cdFx0XHRtYXRyaXhbN10gPT09IGFycmF5W29mZnNldCArIDddICYmXG5cdFx0XHRtYXRyaXhbOF0gPT09IGFycmF5W29mZnNldCArIDhdICYmXG5cdFx0XHRtYXRyaXhbOV0gPT09IGFycmF5W29mZnNldCArIDldICYmXG5cdFx0XHRtYXRyaXhbMTBdID09PSBhcnJheVtvZmZzZXQgKyAxMF0gJiZcblx0XHRcdG1hdHJpeFsxMV0gPT09IGFycmF5W29mZnNldCArIDExXSAmJlxuXHRcdFx0bWF0cml4WzEyXSA9PT0gYXJyYXlbb2Zmc2V0ICsgMTJdICYmXG5cdFx0XHRtYXRyaXhbMTNdID09PSBhcnJheVtvZmZzZXQgKyAxM10gJiZcblx0XHRcdG1hdHJpeFsxNF0gPT09IGFycmF5W29mZnNldCArIDE0XSAmJlxuXHRcdFx0bWF0cml4WzE1XSA9PT0gYXJyYXlbb2Zmc2V0ICsgMTVdXG5cdFx0KTtcblx0fVxufVxuXG5jb25zdCBzY3JhdGNoVHJhbnNwb3NlTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcblxuY29uc3QgZnJvbUNhbWVyYUYgPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgZnJvbUNhbWVyYVIgPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgZnJvbUNhbWVyYVUgPSBuZXcgVmVjdG9yMygpO1xuXG5jb25zdCBzY2FsZVNjcmF0Y2gxID0gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IHNjYWxlU2NyYXRjaDIgPSBuZXcgVmVjdG9yMygpO1xuY29uc3Qgc2NyYXRjaENvbHVtbiA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBzY2FsZVNjcmF0Y2gzID0gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IHNjYWxlU2NyYXRjaDQgPSBuZXcgVmVjdG9yMygpO1xuY29uc3Qgc2NhbGVTY3JhdGNoNSA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBzY3JhdGNoSW52ZXJzZVJvdGF0aW9uID0gbmV3IE1hdHJpeDMoKTtcbmNvbnN0IHNjcmF0Y2hNYXRyaXgzWmVybyA9IG5ldyBNYXRyaXgzKCk7XG5jb25zdCBzY3JhdGNoQm90dG9tUm93ID0gbmV3IFZlY3RvcjQoKTtcbmNvbnN0IHNjcmF0Y2hFeHBlY3RlZEJvdHRvbVJvdyA9IG5ldyBWZWN0b3I0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XG5jb25zdCB4ID0gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IHkgPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgeiA9IG5ldyBWZWN0b3IzKCk7XG5leHBvcnQgZGVmYXVsdCBNYXRyaXg0O1xuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vY2FtZXJhL0NhbWVyYVwiO1xuaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4uL21hdGgvTWF0cml4NFwiO1xuaW1wb3J0IFBsYW5lIGZyb20gXCIuLi9tYXRoL1BsYW5lXCI7XG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XG5pbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcbmltcG9ydCBkZWZpbmVkIGZyb20gXCIuLi91dGlscy9kZWZpbmVkXCI7XG5pbXBvcnQgeyBJbnRlcnNlY3QgfSBmcm9tIFwiLi9XZWJHUFVDb25zdGFudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb3VuZGluZ1NwaGVyZSB7XG5cdHJhZGl1czogbnVtYmVyO1xuXHRjZW50ZXI6IFZlY3RvcjM7XG5cdG9yaWdpblJhZGl1czogbnVtYmVyO1xuXHRvcmlnaW5DZW50ZXI6IFZlY3RvcjM7XG5cdGNvbnN0cnVjdG9yKGNlbnRlcjogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDAsIDAsIDApLCByYWRpdXMgPSAwKSB7XG5cdFx0dGhpcy5jZW50ZXIgPSBjZW50ZXI7XG5cdFx0dGhpcy5yYWRpdXMgPSByYWRpdXM7XG5cdFx0dGhpcy5vcmlnaW5DZW50ZXIgPSB0aGlzLmNlbnRlci5jbG9uZSgpO1xuXHRcdHRoaXMub3JpZ2luUmFkaXVzID0gcmFkaXVzO1xuXHR9XG5cdC8qKlxuXHQgKiBAcGFyYW0ge1ZlY3RvcjNbXX0gW3Bvc2l0aW9uc10gQW4gYXJyYXkgb2YgcG9pbnRzIHRoYXQgdGhlIGJvdW5kaW5nIHNwaGVyZSB3aWxsIGVuY2xvc2UuICBFYWNoIHBvaW50IG11c3QgaGF2ZSA8Y29kZT54PC9jb2RlPiwgPGNvZGU+eTwvY29kZT4sIGFuZCA8Y29kZT56PC9jb2RlPiBwcm9wZXJ0aWVzLlxuXHQgKiBAcmV0dXJucyB7Qm91bmRpbmdTcGhlcmV9IFRoZSBtb2RpZmllZCByZXN1bHQgcGFyYW1ldGVyIG9yIGEgbmV3IEJvdW5kaW5nU3BoZXJlIGluc3RhbmNlIGlmIG9uZSB3YXMgbm90IHByb3ZpZGVkLlxuXHQgKi9cblx0c3RhdGljIGZyb21Qb2ludHMocG9zaXRpb25zOiBWZWN0b3IzW10pIHtcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQm91bmRpbmdTcGhlcmUoKTtcblxuXHRcdGlmICghZGVmaW5lZChwb3NpdGlvbnMpIHx8IHBvc2l0aW9ucy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJlc3VsdC5jZW50ZXIgPSBWZWN0b3IzLmNsb25lKFZlY3RvcjMuWkVSTywgcmVzdWx0LmNlbnRlcik7XG5cdFx0XHRyZXN1bHQucmFkaXVzID0gMC4wO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cblx0XHRjb25zdCBjdXJyZW50UG9zID0gVmVjdG9yMy5jbG9uZShwb3NpdGlvbnNbMF0sIGZyb21Qb2ludHNDdXJyZW50UG9zKTtcblxuXHRcdGNvbnN0IHhNaW4gPSBWZWN0b3IzLmNsb25lKGN1cnJlbnRQb3MsIGZyb21Qb2ludHNYTWluKTtcblx0XHRjb25zdCB5TWluID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWU1pbik7XG5cdFx0Y29uc3Qgek1pbiA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1pNaW4pO1xuXG5cdFx0Y29uc3QgeE1heCA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1hNYXgpO1xuXHRcdGNvbnN0IHlNYXggPSBWZWN0b3IzLmNsb25lKGN1cnJlbnRQb3MsIGZyb21Qb2ludHNZTWF4KTtcblx0XHRjb25zdCB6TWF4ID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWk1heCk7XG5cblx0XHRjb25zdCBudW1Qb3NpdGlvbnMgPSBwb3NpdGlvbnMubGVuZ3RoO1xuXHRcdGxldCBpO1xuXHRcdGZvciAoaSA9IDE7IGkgPCBudW1Qb3NpdGlvbnM7IGkrKykge1xuXHRcdFx0VmVjdG9yMy5jbG9uZShwb3NpdGlvbnNbaV0sIGN1cnJlbnRQb3MpO1xuXG5cdFx0XHRjb25zdCB4ID0gY3VycmVudFBvcy54O1xuXHRcdFx0Y29uc3QgeSA9IGN1cnJlbnRQb3MueTtcblx0XHRcdGNvbnN0IHogPSBjdXJyZW50UG9zLno7XG5cblx0XHRcdC8vIFN0b3JlIHBvaW50cyBjb250YWluaW5nIHRoZSB0aGUgc21hbGxlc3QgYW5kIGxhcmdlc3QgY29tcG9uZW50c1xuXHRcdFx0aWYgKHggPCB4TWluLngpIHtcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB4TWluKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHggPiB4TWF4LngpIHtcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB4TWF4KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHkgPCB5TWluLnkpIHtcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB5TWluKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHkgPiB5TWF4LnkpIHtcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB5TWF4KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHogPCB6TWluLnopIHtcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB6TWluKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHogPiB6TWF4LnopIHtcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB6TWF4KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb21wdXRlIHgtLCB5LSwgYW5kIHotc3BhbnMgKFNxdWFyZWQgZGlzdGFuY2VzIGIvbiBlYWNoIGNvbXBvbmVudCdzIG1pbi4gYW5kIG1heC4pLlxuXHRcdGNvbnN0IHhTcGFuID0gVmVjdG9yMy5tYWduaXR1ZGVTcXVhcmVkKFZlY3RvcjMuc3VidHJhY3QoeE1heCwgeE1pbiwgZnJvbVBvaW50c1NjcmF0Y2gpKTtcblx0XHRjb25zdCB5U3BhbiA9IFZlY3RvcjMubWFnbml0dWRlU3F1YXJlZChWZWN0b3IzLnN1YnRyYWN0KHlNYXgsIHlNaW4sIGZyb21Qb2ludHNTY3JhdGNoKSk7XG5cdFx0Y29uc3QgelNwYW4gPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yMy5zdWJ0cmFjdCh6TWF4LCB6TWluLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xuXG5cdFx0Ly8gU2V0IHRoZSBkaWFtZXRlciBlbmRwb2ludHMgdG8gdGhlIGxhcmdlc3Qgc3Bhbi5cblx0XHRsZXQgZGlhbWV0ZXIxID0geE1pbjtcblx0XHRsZXQgZGlhbWV0ZXIyID0geE1heDtcblx0XHRsZXQgbWF4U3BhbiA9IHhTcGFuO1xuXHRcdGlmICh5U3BhbiA+IG1heFNwYW4pIHtcblx0XHRcdG1heFNwYW4gPSB5U3Bhbjtcblx0XHRcdGRpYW1ldGVyMSA9IHlNaW47XG5cdFx0XHRkaWFtZXRlcjIgPSB5TWF4O1xuXHRcdH1cblx0XHRpZiAoelNwYW4gPiBtYXhTcGFuKSB7XG5cdFx0XHRtYXhTcGFuID0gelNwYW47XG5cdFx0XHRkaWFtZXRlcjEgPSB6TWluO1xuXHRcdFx0ZGlhbWV0ZXIyID0gek1heDtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgdGhlIGNlbnRlciBvZiB0aGUgaW5pdGlhbCBzcGhlcmUgZm91bmQgYnkgUml0dGVyJ3MgYWxnb3JpdGhtXG5cdFx0Y29uc3Qgcml0dGVyQ2VudGVyID0gZnJvbVBvaW50c1JpdHRlckNlbnRlcjtcblx0XHRyaXR0ZXJDZW50ZXIueCA9IChkaWFtZXRlcjEueCArIGRpYW1ldGVyMi54KSAqIDAuNTtcblx0XHRyaXR0ZXJDZW50ZXIueSA9IChkaWFtZXRlcjEueSArIGRpYW1ldGVyMi55KSAqIDAuNTtcblx0XHRyaXR0ZXJDZW50ZXIueiA9IChkaWFtZXRlcjEueiArIGRpYW1ldGVyMi56KSAqIDAuNTtcblxuXHRcdC8vIENhbGN1bGF0ZSB0aGUgcmFkaXVzIG9mIHRoZSBpbml0aWFsIHNwaGVyZSBmb3VuZCBieSBSaXR0ZXIncyBhbGdvcml0aG1cblx0XHRsZXQgcmFkaXVzU3F1YXJlZCA9IFZlY3RvcjMubWFnbml0dWRlU3F1YXJlZChWZWN0b3IzLnN1YnRyYWN0KGRpYW1ldGVyMiwgcml0dGVyQ2VudGVyLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xuXHRcdGxldCByaXR0ZXJSYWRpdXMgPSBNYXRoLnNxcnQocmFkaXVzU3F1YXJlZCk7XG5cblx0XHQvLyBGaW5kIHRoZSBjZW50ZXIgb2YgdGhlIHNwaGVyZSBmb3VuZCB1c2luZyB0aGUgTmFpdmUgbWV0aG9kLlxuXHRcdGNvbnN0IG1pbkJveFB0ID0gZnJvbVBvaW50c01pbkJveFB0O1xuXHRcdG1pbkJveFB0LnggPSB4TWluLng7XG5cdFx0bWluQm94UHQueSA9IHlNaW4ueTtcblx0XHRtaW5Cb3hQdC56ID0gek1pbi56O1xuXG5cdFx0Y29uc3QgbWF4Qm94UHQgPSBmcm9tUG9pbnRzTWF4Qm94UHQ7XG5cdFx0bWF4Qm94UHQueCA9IHhNYXgueDtcblx0XHRtYXhCb3hQdC55ID0geU1heC55O1xuXHRcdG1heEJveFB0LnogPSB6TWF4Lno7XG5cblx0XHRjb25zdCBuYWl2ZUNlbnRlciA9IFZlY3RvcjMubWlkcG9pbnQobWluQm94UHQsIG1heEJveFB0LCBmcm9tUG9pbnRzTmFpdmVDZW50ZXJTY3JhdGNoKTtcblxuXHRcdC8vIEJlZ2luIDJuZCBwYXNzIHRvIGZpbmQgbmFpdmUgcmFkaXVzIGFuZCBtb2RpZnkgdGhlIHJpdHRlciBzcGhlcmUuXG5cdFx0bGV0IG5haXZlUmFkaXVzID0gMDtcblx0XHRmb3IgKGkgPSAwOyBpIDwgbnVtUG9zaXRpb25zOyBpKyspIHtcblx0XHRcdFZlY3RvcjMuY2xvbmUocG9zaXRpb25zW2ldLCBjdXJyZW50UG9zKTtcblxuXHRcdFx0Ly8gRmluZCB0aGUgZnVydGhlc3QgcG9pbnQgZnJvbSB0aGUgbmFpdmUgY2VudGVyIHRvIGNhbGN1bGF0ZSB0aGUgbmFpdmUgcmFkaXVzLlxuXHRcdFx0Y29uc3QgciA9IFZlY3RvcjMubWFnbml0dWRlKFZlY3RvcjMuc3VidHJhY3QoY3VycmVudFBvcywgbmFpdmVDZW50ZXIsIGZyb21Qb2ludHNTY3JhdGNoKSk7XG5cdFx0XHRpZiAociA+IG5haXZlUmFkaXVzKSB7XG5cdFx0XHRcdG5haXZlUmFkaXVzID0gcjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBhZGp1c3RtZW50cyB0byB0aGUgUml0dGVyIFNwaGVyZSB0byBpbmNsdWRlIGFsbCBwb2ludHMuXG5cdFx0XHRjb25zdCBvbGRDZW50ZXJUb1BvaW50U3F1YXJlZCA9IFZlY3RvcjMubWFnbml0dWRlU3F1YXJlZChcblx0XHRcdFx0VmVjdG9yMy5zdWJ0cmFjdChjdXJyZW50UG9zLCByaXR0ZXJDZW50ZXIsIGZyb21Qb2ludHNTY3JhdGNoKVxuXHRcdFx0KTtcblx0XHRcdGlmIChvbGRDZW50ZXJUb1BvaW50U3F1YXJlZCA+IHJhZGl1c1NxdWFyZWQpIHtcblx0XHRcdFx0Y29uc3Qgb2xkQ2VudGVyVG9Qb2ludCA9IE1hdGguc3FydChvbGRDZW50ZXJUb1BvaW50U3F1YXJlZCk7XG5cdFx0XHRcdC8vIENhbGN1bGF0ZSBuZXcgcmFkaXVzIHRvIGluY2x1ZGUgdGhlIHBvaW50IHRoYXQgbGllcyBvdXRzaWRlXG5cdFx0XHRcdHJpdHRlclJhZGl1cyA9IChyaXR0ZXJSYWRpdXMgKyBvbGRDZW50ZXJUb1BvaW50KSAqIDAuNTtcblx0XHRcdFx0cmFkaXVzU3F1YXJlZCA9IHJpdHRlclJhZGl1cyAqIHJpdHRlclJhZGl1cztcblx0XHRcdFx0Ly8gQ2FsY3VsYXRlIGNlbnRlciBvZiBuZXcgUml0dGVyIHNwaGVyZVxuXHRcdFx0XHRjb25zdCBvbGRUb05ldyA9IG9sZENlbnRlclRvUG9pbnQgLSByaXR0ZXJSYWRpdXM7XG5cdFx0XHRcdHJpdHRlckNlbnRlci54ID0gKHJpdHRlclJhZGl1cyAqIHJpdHRlckNlbnRlci54ICsgb2xkVG9OZXcgKiBjdXJyZW50UG9zLngpIC8gb2xkQ2VudGVyVG9Qb2ludDtcblx0XHRcdFx0cml0dGVyQ2VudGVyLnkgPSAocml0dGVyUmFkaXVzICogcml0dGVyQ2VudGVyLnkgKyBvbGRUb05ldyAqIGN1cnJlbnRQb3MueSkgLyBvbGRDZW50ZXJUb1BvaW50O1xuXHRcdFx0XHRyaXR0ZXJDZW50ZXIueiA9IChyaXR0ZXJSYWRpdXMgKiByaXR0ZXJDZW50ZXIueiArIG9sZFRvTmV3ICogY3VycmVudFBvcy56KSAvIG9sZENlbnRlclRvUG9pbnQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJpdHRlclJhZGl1cyA8IG5haXZlUmFkaXVzKSB7XG5cdFx0XHRWZWN0b3IzLmNsb25lKHJpdHRlckNlbnRlciwgcmVzdWx0LmNlbnRlcik7XG5cdFx0XHRyZXN1bHQucmFkaXVzID0gcml0dGVyUmFkaXVzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRWZWN0b3IzLmNsb25lKG5haXZlQ2VudGVyLCByZXN1bHQuY2VudGVyKTtcblx0XHRcdHJlc3VsdC5yYWRpdXMgPSBuYWl2ZVJhZGl1cztcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdC8qKlxuXHQgKiBDb21wdXRlcyBhIHRpZ2h0LWZpdHRpbmcgYm91bmRpbmcgc3BoZXJlIGVuY2xvc2luZyBhIGxpc3Qgb2YgM0QgcG9pbnRzLCB3aGVyZSB0aGUgcG9pbnRzIGFyZVxuXHQgKiBzdG9yZWQgaW4gYSBmbGF0IGFycmF5IGluIFgsIFksIFosIG9yZGVyLiAgVGhlIGJvdW5kaW5nIHNwaGVyZSBpcyBjb21wdXRlZCBieSBydW5uaW5nIHR3b1xuXHQgKiBhbGdvcml0aG1zLCBhIG5haXZlIGFsZ29yaXRobSBhbmQgUml0dGVyJ3MgYWxnb3JpdGhtLiBUaGUgc21hbGxlciBvZiB0aGUgdHdvIHNwaGVyZXMgaXMgdXNlZCB0b1xuXHQgKiBlbnN1cmUgYSB0aWdodCBmaXQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7TnVtYmVyW119IFtwb3NpdGlvbnNdIEFuIGFycmF5IG9mIHBvaW50cyB0aGF0IHRoZSBib3VuZGluZyBzcGhlcmUgd2lsbCBlbmNsb3NlLiAgRWFjaCBwb2ludFxuXHQgKiAgICAgICAgaXMgZm9ybWVkIGZyb20gdGhyZWUgZWxlbWVudHMgaW4gdGhlIGFycmF5IGluIHRoZSBvcmRlciBYLCBZLCBaLlxuXHQgKiBAcGFyYW0ge1ZlY3RvcjN9IFtjZW50ZXI9VmVjdG9yMy5aRVJPXSBUaGUgcG9zaXRpb24gdG8gd2hpY2ggdGhlIHBvc2l0aW9ucyBhcmUgcmVsYXRpdmUsIHdoaWNoIG5lZWQgbm90IGJlIHRoZVxuXHQgKiAgICAgICAgb3JpZ2luIG9mIHRoZSBjb29yZGluYXRlIHN5c3RlbS4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIHBvc2l0aW9ucyBhcmUgdG8gYmUgdXNlZCBmb3Jcblx0ICogICAgICAgIHJlbGF0aXZlLXRvLWNlbnRlciAoUlRDKSByZW5kZXJpbmcuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbc3RyaWRlPTNdIFRoZSBudW1iZXIgb2YgYXJyYXkgZWxlbWVudHMgcGVyIHZlcnRleC4gIEl0IG11c3QgYmUgYXQgbGVhc3QgMywgYnV0IGl0IG1heVxuXHQgKiAgICAgICAgYmUgaGlnaGVyLiAgUmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIsIHRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGZpcnN0IHBvc2l0aW9uXG5cdCAqICAgICAgICBpcyBhdCBhcnJheSBpbmRleCAwLCB0aGUgWSBjb29yZGluYXRlIGlzIGF0IGFycmF5IGluZGV4IDEsIGFuZCB0aGUgWiBjb29yZGluYXRlIGlzIGF0IGFycmF5IGluZGV4XG5cdCAqICAgICAgICAyLiAgV2hlbiBzdHJpZGUgaXMgMywgdGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgbmV4dCBwb3NpdGlvbiB0aGVuIGJlZ2lucyBhdCBhcnJheSBpbmRleCAzLiAgSWZcblx0ICogICAgICAgIHRoZSBzdHJpZGUgaXMgNSwgaG93ZXZlciwgdHdvIGFycmF5IGVsZW1lbnRzIGFyZSBza2lwcGVkIGFuZCB0aGUgbmV4dCBwb3NpdGlvbiBiZWdpbnMgYXQgYXJyYXlcblx0ICogICAgICAgIGluZGV4IDUuXG5cdCAqIEBwYXJhbSB7Qm91bmRpbmdTcGhlcmV9IFtyZXN1bHRdIFRoZSBvYmplY3Qgb250byB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0LlxuXHQgKiBAcmV0dXJucyB7Qm91bmRpbmdTcGhlcmV9IFRoZSBtb2RpZmllZCByZXN1bHQgcGFyYW1ldGVyIG9yIGEgbmV3IEJvdW5kaW5nU3BoZXJlIGluc3RhbmNlIGlmIG9uZSB3YXMgbm90IHByb3ZpZGVkLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiAvLyBDb21wdXRlIHRoZSBib3VuZGluZyBzcGhlcmUgZnJvbSAzIHBvc2l0aW9ucywgZWFjaCBzcGVjaWZpZWQgcmVsYXRpdmUgdG8gYSBjZW50ZXIuXG5cdCAqIC8vIEluIGFkZGl0aW9uIHRvIHRoZSBYLCBZLCBhbmQgWiBjb29yZGluYXRlcywgdGhlIHBvaW50cyBhcnJheSBjb250YWlucyB0d28gYWRkaXRpb25hbFxuXHQgKiAvLyBlbGVtZW50cyBwZXIgcG9pbnQgd2hpY2ggYXJlIGlnbm9yZWQgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbXB1dGluZyB0aGUgYm91bmRpbmcgc3BoZXJlLlxuXHQgKiBjb25zdCBjZW50ZXIgPSBuZXcgVmVjdG9yMygxLjAsIDIuMCwgMy4wKTtcblx0ICogY29uc3QgcG9pbnRzID0gWzEuMCwgMi4wLCAzLjAsIDAuMSwgMC4yLFxuXHQgKiAgICAgICAgICAgICAgIDQuMCwgNS4wLCA2LjAsIDAuMSwgMC4yLFxuXHQgKiAgICAgICAgICAgICAgIDcuMCwgOC4wLCA5LjAsIDAuMSwgMC4yXTtcblx0ICogY29uc3Qgc3BoZXJlID0gQm91bmRpbmdTcGhlcmUuZnJvbVZlcnRpY2VzKHBvaW50cywgY2VudGVyLCA1KTtcblx0ICpcblx0ICovXG5cdHN0YXRpYyBmcm9tVmVydGljZXMocG9zaXRpb25zOiBudW1iZXJbXSwgY2VudGVyOiBWZWN0b3IzID0gVmVjdG9yMy5aRVJPLCBzdHJpZGUgPSAzKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IEJvdW5kaW5nU3BoZXJlKCk7XG5cblx0XHRpZiAoIWRlZmluZWQocG9zaXRpb25zKSB8fCBwb3NpdGlvbnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXN1bHQuY2VudGVyID0gVmVjdG9yMy5jbG9uZShWZWN0b3IzLlpFUk8sIHJlc3VsdC5jZW50ZXIpO1xuXHRcdFx0cmVzdWx0LnJhZGl1cyA9IDAuMDtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXG5cdFx0Y2VudGVyID0gZGVmYXVsdFZhbHVlKGNlbnRlciwgVmVjdG9yMy5aRVJPKTtcblxuXHRcdHN0cmlkZSA9IGRlZmF1bHRWYWx1ZShzdHJpZGUsIDMpO1xuXG5cdFx0Y29uc3QgY3VycmVudFBvcyA9IGZyb21Qb2ludHNDdXJyZW50UG9zO1xuXHRcdGN1cnJlbnRQb3MueCA9IHBvc2l0aW9uc1swXSArIGNlbnRlci54O1xuXHRcdGN1cnJlbnRQb3MueSA9IHBvc2l0aW9uc1sxXSArIGNlbnRlci55O1xuXHRcdGN1cnJlbnRQb3MueiA9IHBvc2l0aW9uc1syXSArIGNlbnRlci56O1xuXG5cdFx0Y29uc3QgeE1pbiA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1hNaW4pO1xuXHRcdGNvbnN0IHlNaW4gPSBWZWN0b3IzLmNsb25lKGN1cnJlbnRQb3MsIGZyb21Qb2ludHNZTWluKTtcblx0XHRjb25zdCB6TWluID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWk1pbik7XG5cblx0XHRjb25zdCB4TWF4ID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWE1heCk7XG5cdFx0Y29uc3QgeU1heCA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1lNYXgpO1xuXHRcdGNvbnN0IHpNYXggPSBWZWN0b3IzLmNsb25lKGN1cnJlbnRQb3MsIGZyb21Qb2ludHNaTWF4KTtcblxuXHRcdGNvbnN0IG51bUVsZW1lbnRzID0gcG9zaXRpb25zLmxlbmd0aDtcblx0XHRsZXQgaTtcblx0XHRmb3IgKGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkgKz0gc3RyaWRlKSB7XG5cdFx0XHRjb25zdCB4ID0gcG9zaXRpb25zW2ldICsgY2VudGVyLng7XG5cdFx0XHRjb25zdCB5ID0gcG9zaXRpb25zW2kgKyAxXSArIGNlbnRlci55O1xuXHRcdFx0Y29uc3QgeiA9IHBvc2l0aW9uc1tpICsgMl0gKyBjZW50ZXIuejtcblxuXHRcdFx0Y3VycmVudFBvcy54ID0geDtcblx0XHRcdGN1cnJlbnRQb3MueSA9IHk7XG5cdFx0XHRjdXJyZW50UG9zLnogPSB6O1xuXG5cdFx0XHQvLyBTdG9yZSBwb2ludHMgY29udGFpbmluZyB0aGUgdGhlIHNtYWxsZXN0IGFuZCBsYXJnZXN0IGNvbXBvbmVudHNcblx0XHRcdGlmICh4IDwgeE1pbi54KSB7XG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgeE1pbik7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh4ID4geE1heC54KSB7XG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgeE1heCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh5IDwgeU1pbi55KSB7XG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgeU1pbik7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh5ID4geU1heC55KSB7XG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgeU1heCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh6IDwgek1pbi56KSB7XG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgek1pbik7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh6ID4gek1heC56KSB7XG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgek1heCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29tcHV0ZSB4LSwgeS0sIGFuZCB6LXNwYW5zIChTcXVhcmVkIGRpc3RhbmNlcyBiL24gZWFjaCBjb21wb25lbnQncyBtaW4uIGFuZCBtYXguKS5cblx0XHRjb25zdCB4U3BhbiA9IFZlY3RvcjMubWFnbml0dWRlU3F1YXJlZChWZWN0b3IzLnN1YnRyYWN0KHhNYXgsIHhNaW4sIGZyb21Qb2ludHNTY3JhdGNoKSk7XG5cdFx0Y29uc3QgeVNwYW4gPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yMy5zdWJ0cmFjdCh5TWF4LCB5TWluLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xuXHRcdGNvbnN0IHpTcGFuID0gVmVjdG9yMy5tYWduaXR1ZGVTcXVhcmVkKFZlY3RvcjMuc3VidHJhY3Qoek1heCwgek1pbiwgZnJvbVBvaW50c1NjcmF0Y2gpKTtcblxuXHRcdC8vIFNldCB0aGUgZGlhbWV0ZXIgZW5kcG9pbnRzIHRvIHRoZSBsYXJnZXN0IHNwYW4uXG5cdFx0bGV0IGRpYW1ldGVyMSA9IHhNaW47XG5cdFx0bGV0IGRpYW1ldGVyMiA9IHhNYXg7XG5cdFx0bGV0IG1heFNwYW4gPSB4U3Bhbjtcblx0XHRpZiAoeVNwYW4gPiBtYXhTcGFuKSB7XG5cdFx0XHRtYXhTcGFuID0geVNwYW47XG5cdFx0XHRkaWFtZXRlcjEgPSB5TWluO1xuXHRcdFx0ZGlhbWV0ZXIyID0geU1heDtcblx0XHR9XG5cdFx0aWYgKHpTcGFuID4gbWF4U3Bhbikge1xuXHRcdFx0bWF4U3BhbiA9IHpTcGFuO1xuXHRcdFx0ZGlhbWV0ZXIxID0gek1pbjtcblx0XHRcdGRpYW1ldGVyMiA9IHpNYXg7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIHRoZSBjZW50ZXIgb2YgdGhlIGluaXRpYWwgc3BoZXJlIGZvdW5kIGJ5IFJpdHRlcidzIGFsZ29yaXRobVxuXHRcdGNvbnN0IHJpdHRlckNlbnRlciA9IGZyb21Qb2ludHNSaXR0ZXJDZW50ZXI7XG5cdFx0cml0dGVyQ2VudGVyLnggPSAoZGlhbWV0ZXIxLnggKyBkaWFtZXRlcjIueCkgKiAwLjU7XG5cdFx0cml0dGVyQ2VudGVyLnkgPSAoZGlhbWV0ZXIxLnkgKyBkaWFtZXRlcjIueSkgKiAwLjU7XG5cdFx0cml0dGVyQ2VudGVyLnogPSAoZGlhbWV0ZXIxLnogKyBkaWFtZXRlcjIueikgKiAwLjU7XG5cblx0XHQvLyBDYWxjdWxhdGUgdGhlIHJhZGl1cyBvZiB0aGUgaW5pdGlhbCBzcGhlcmUgZm91bmQgYnkgUml0dGVyJ3MgYWxnb3JpdGhtXG5cdFx0bGV0IHJhZGl1c1NxdWFyZWQgPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yMy5zdWJ0cmFjdChkaWFtZXRlcjIsIHJpdHRlckNlbnRlciwgZnJvbVBvaW50c1NjcmF0Y2gpKTtcblx0XHRsZXQgcml0dGVyUmFkaXVzID0gTWF0aC5zcXJ0KHJhZGl1c1NxdWFyZWQpO1xuXG5cdFx0Ly8gRmluZCB0aGUgY2VudGVyIG9mIHRoZSBzcGhlcmUgZm91bmQgdXNpbmcgdGhlIE5haXZlIG1ldGhvZC5cblx0XHRjb25zdCBtaW5Cb3hQdCA9IGZyb21Qb2ludHNNaW5Cb3hQdDtcblx0XHRtaW5Cb3hQdC54ID0geE1pbi54O1xuXHRcdG1pbkJveFB0LnkgPSB5TWluLnk7XG5cdFx0bWluQm94UHQueiA9IHpNaW4uejtcblxuXHRcdGNvbnN0IG1heEJveFB0ID0gZnJvbVBvaW50c01heEJveFB0O1xuXHRcdG1heEJveFB0LnggPSB4TWF4Lng7XG5cdFx0bWF4Qm94UHQueSA9IHlNYXgueTtcblx0XHRtYXhCb3hQdC56ID0gek1heC56O1xuXG5cdFx0Y29uc3QgbmFpdmVDZW50ZXIgPSBWZWN0b3IzLm1pZHBvaW50KG1pbkJveFB0LCBtYXhCb3hQdCwgZnJvbVBvaW50c05haXZlQ2VudGVyU2NyYXRjaCk7XG5cblx0XHQvLyBCZWdpbiAybmQgcGFzcyB0byBmaW5kIG5haXZlIHJhZGl1cyBhbmQgbW9kaWZ5IHRoZSByaXR0ZXIgc3BoZXJlLlxuXHRcdGxldCBuYWl2ZVJhZGl1cyA9IDA7XG5cdFx0Zm9yIChpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpICs9IHN0cmlkZSkge1xuXHRcdFx0Y3VycmVudFBvcy54ID0gcG9zaXRpb25zW2ldICsgY2VudGVyLng7XG5cdFx0XHRjdXJyZW50UG9zLnkgPSBwb3NpdGlvbnNbaSArIDFdICsgY2VudGVyLnk7XG5cdFx0XHRjdXJyZW50UG9zLnogPSBwb3NpdGlvbnNbaSArIDJdICsgY2VudGVyLno7XG5cblx0XHRcdC8vIEZpbmQgdGhlIGZ1cnRoZXN0IHBvaW50IGZyb20gdGhlIG5haXZlIGNlbnRlciB0byBjYWxjdWxhdGUgdGhlIG5haXZlIHJhZGl1cy5cblx0XHRcdGNvbnN0IHIgPSBWZWN0b3IzLm1hZ25pdHVkZShWZWN0b3IzLnN1YnRyYWN0KGN1cnJlbnRQb3MsIG5haXZlQ2VudGVyLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xuXHRcdFx0aWYgKHIgPiBuYWl2ZVJhZGl1cykge1xuXHRcdFx0XHRuYWl2ZVJhZGl1cyA9IHI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1ha2UgYWRqdXN0bWVudHMgdG8gdGhlIFJpdHRlciBTcGhlcmUgdG8gaW5jbHVkZSBhbGwgcG9pbnRzLlxuXHRcdFx0Y29uc3Qgb2xkQ2VudGVyVG9Qb2ludFNxdWFyZWQgPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoXG5cdFx0XHRcdFZlY3RvcjMuc3VidHJhY3QoY3VycmVudFBvcywgcml0dGVyQ2VudGVyLCBmcm9tUG9pbnRzU2NyYXRjaClcblx0XHRcdCk7XG5cdFx0XHRpZiAob2xkQ2VudGVyVG9Qb2ludFNxdWFyZWQgPiByYWRpdXNTcXVhcmVkKSB7XG5cdFx0XHRcdGNvbnN0IG9sZENlbnRlclRvUG9pbnQgPSBNYXRoLnNxcnQob2xkQ2VudGVyVG9Qb2ludFNxdWFyZWQpO1xuXHRcdFx0XHQvLyBDYWxjdWxhdGUgbmV3IHJhZGl1cyB0byBpbmNsdWRlIHRoZSBwb2ludCB0aGF0IGxpZXMgb3V0c2lkZVxuXHRcdFx0XHRyaXR0ZXJSYWRpdXMgPSAocml0dGVyUmFkaXVzICsgb2xkQ2VudGVyVG9Qb2ludCkgKiAwLjU7XG5cdFx0XHRcdHJhZGl1c1NxdWFyZWQgPSByaXR0ZXJSYWRpdXMgKiByaXR0ZXJSYWRpdXM7XG5cdFx0XHRcdC8vIENhbGN1bGF0ZSBjZW50ZXIgb2YgbmV3IFJpdHRlciBzcGhlcmVcblx0XHRcdFx0Y29uc3Qgb2xkVG9OZXcgPSBvbGRDZW50ZXJUb1BvaW50IC0gcml0dGVyUmFkaXVzO1xuXHRcdFx0XHRyaXR0ZXJDZW50ZXIueCA9IChyaXR0ZXJSYWRpdXMgKiByaXR0ZXJDZW50ZXIueCArIG9sZFRvTmV3ICogY3VycmVudFBvcy54KSAvIG9sZENlbnRlclRvUG9pbnQ7XG5cdFx0XHRcdHJpdHRlckNlbnRlci55ID0gKHJpdHRlclJhZGl1cyAqIHJpdHRlckNlbnRlci55ICsgb2xkVG9OZXcgKiBjdXJyZW50UG9zLnkpIC8gb2xkQ2VudGVyVG9Qb2ludDtcblx0XHRcdFx0cml0dGVyQ2VudGVyLnogPSAocml0dGVyUmFkaXVzICogcml0dGVyQ2VudGVyLnogKyBvbGRUb05ldyAqIGN1cnJlbnRQb3MueikgLyBvbGRDZW50ZXJUb1BvaW50O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChyaXR0ZXJSYWRpdXMgPCBuYWl2ZVJhZGl1cykge1xuXHRcdFx0VmVjdG9yMy5jbG9uZShyaXR0ZXJDZW50ZXIsIHJlc3VsdC5jZW50ZXIpO1xuXHRcdFx0cmVzdWx0LnJhZGl1cyA9IHJpdHRlclJhZGl1cztcblx0XHR9IGVsc2Uge1xuXHRcdFx0VmVjdG9yMy5jbG9uZShuYWl2ZUNlbnRlciwgcmVzdWx0LmNlbnRlcik7XG5cdFx0XHRyZXN1bHQucmFkaXVzID0gbmFpdmVSYWRpdXM7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGludGVyc2VjdFBsYW5lKHBsYW5lOiBQbGFuZSkge1xuXHRcdGNvbnN0IGNlbnRlciA9IHRoaXMuY2VudGVyO1xuXHRcdGNvbnN0IHJhZGl1cyA9IHRoaXMucmFkaXVzO1xuXHRcdGNvbnN0IG5vcm1hbCA9IHBsYW5lLm5vcm1hbDtcblx0XHRjb25zdCBkaXN0YW5jZVRvUGxhbmUgPSBWZWN0b3IzLmRvdChub3JtYWwsIGNlbnRlcikgKyBwbGFuZS5kaXN0YW5jZTtcblxuXHRcdGlmIChkaXN0YW5jZVRvUGxhbmUgPCAtcmFkaXVzKSB7XG5cdFx0XHQvLyBUaGUgY2VudGVyIHBvaW50IGlzIG5lZ2F0aXZlIHNpZGUgb2YgdGhlIHBsYW5lIG5vcm1hbFxuXHRcdFx0cmV0dXJuIEludGVyc2VjdC5PVVRTSURFO1xuXHRcdH0gZWxzZSBpZiAoZGlzdGFuY2VUb1BsYW5lIDwgcmFkaXVzKSB7XG5cdFx0XHQvLyBUaGUgY2VudGVyIHBvaW50IGlzIHBvc2l0aXZlIHNpZGUgb2YgdGhlIHBsYW5lLCBidXQgcmFkaXVzIGV4dGVuZHMgYmV5b25kIGl0OyBwYXJ0aWFsIG92ZXJsYXBcblx0XHRcdHJldHVybiBJbnRlcnNlY3QuSU5URVJTRUNUSU5HO1xuXHRcdH1cblx0XHRyZXR1cm4gSW50ZXJzZWN0LklOU0lERTtcblx0fVxuXHR1cGRhdGUodHJhbnNmb3JtOiBNYXRyaXg0KSB7XG5cdFx0TWF0cml4NC5tdWx0aXBseUJ5UG9pbnQodHJhbnNmb3JtLCB0aGlzLm9yaWdpbkNlbnRlciwgdGhpcy5jZW50ZXIpO1xuXHRcdHRoaXMucmFkaXVzID0gTWF0cml4NC5nZXRNYXhpbXVtU2NhbGUodHJhbnNmb3JtKSAqIHRoaXMub3JpZ2luUmFkaXVzO1xuXHR9XG5cdGRpc3RhbmNlVG9DYW1lcmEoY2FtZXJhOiBDYW1lcmEpIHtcblx0XHRyZXR1cm4gTWF0aC5tYXgoMC4wLCBWZWN0b3IzLmRpc3RhbmNlKHRoaXMuY2VudGVyLCBjYW1lcmEucG9zaXRpb24pIC0gdGhpcy5yYWRpdXMpO1xuXHR9XG59XG5jb25zdCBmcm9tUG9pbnRzWE1pbiA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tUG9pbnRzWU1pbiA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tUG9pbnRzWk1pbiA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tUG9pbnRzWE1heCA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tUG9pbnRzWU1heCA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tUG9pbnRzWk1heCA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tUG9pbnRzQ3VycmVudFBvcyA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tUG9pbnRzU2NyYXRjaCA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tUG9pbnRzUml0dGVyQ2VudGVyID0gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IGZyb21Qb2ludHNNaW5Cb3hQdCA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tUG9pbnRzTWF4Qm94UHQgPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgZnJvbVBvaW50c05haXZlQ2VudGVyU2NyYXRjaCA9IG5ldyBWZWN0b3IzKCk7XG4iLCJpbXBvcnQgeyBJbmRleEZvcm1hdCB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCBCdWZmZXIgZnJvbSBcIi4vQnVmZmVyXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluZGV4QnVmZmVyIHtcclxuXHRidWZmZXI6IEJ1ZmZlcjtcclxuXHRpbmRpY2VzOiBBcnJheTxudW1iZXI+O1xyXG5cdGluZGV4Rm9ybWF0OiBHUFVJbmRleEZvcm1hdDtcclxuXHRkaXJ0eTogYm9vbGVhbjtcclxuXHRwcml2YXRlIGxhYmVsOiBzdHJpbmc7XHJcblx0Y29uc3RydWN0b3IobGFiZWw6IHN0cmluZywgaW5kaWNlcz86IEFycmF5PG51bWJlcj4pIHtcclxuXHRcdHRoaXMubGFiZWwgPSBsYWJlbDtcclxuXHRcdHRoaXMuaW5kaWNlcyA9IGluZGljZXM7XHJcblx0XHR0aGlzLmluZGV4Rm9ybWF0ID0gSW5kZXhGb3JtYXQuVWludDE2O1xyXG5cdFx0dGhpcy5kaXJ0eSA9IHRydWU7XHJcblx0fVxyXG5cdHNldEluZGljZXMoaW5kaWNlcykge1xyXG5cdFx0dGhpcy5pbmRpY2VzID0gaW5kaWNlcztcclxuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xyXG5cdH1cclxuXHRiaW5kKGRldmljZTogR1BVRGV2aWNlLCBwYXNzRW5jb2RlcjogR1BVUmVuZGVyUGFzc0VuY29kZXIpIHtcclxuXHRcdGlmICh0aGlzLmRpcnR5KSB7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5idWZmZXIgPSBCdWZmZXIuY3JlYXRlSW5kZXhCdWZmZXIoXHJcblx0XHRcdFx0dGhpcy5sYWJlbCxcclxuXHRcdFx0XHRkZXZpY2UsXHJcblx0XHRcdFx0dGhpcy5pbmRleEZvcm1hdCA9PSBJbmRleEZvcm1hdC5VaW50MTYgPyBuZXcgVWludDE2QXJyYXkodGhpcy5pbmRpY2VzKSA6IG5ldyBVaW50MzJBcnJheSh0aGlzLmluZGljZXMpXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0XHRwYXNzRW5jb2Rlci5zZXRJbmRleEJ1ZmZlcih0aGlzLmJ1ZmZlci5ncHVCdWZmZXIsIHRoaXMuaW5kZXhGb3JtYXQpO1xyXG5cdH1cclxuXHRkZXN0cm95KCkge1xyXG5cdFx0dGhpcy5idWZmZXIuZGVzdHJveSgpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBdHRyaWJ1dGUsIEF0dHJpYnV0ZVR5cGUsIEludGVybGVhdmVkQXR0cmlidXRlIH0gZnJvbSBcIi4vQXR0cmlidXRlXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBdHRyaWJ1dGVzIHtcblx0cHVibGljIGludGVybGVhdmU6IGJvb2xlYW47XG5cdHByaXZhdGUgX2F0dHJpYnV0ZXM6IE1hcDxzdHJpbmcsIEF0dHJpYnV0ZSB8IEludGVybGVhdmVkQXR0cmlidXRlPjtcblx0cHJpdmF0ZSBzaGFkZXJMb2NhdGlvbjogbnVtYmVyO1xuXHRwcml2YXRlIG9mZnNldDogbnVtYmVyO1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLl9hdHRyaWJ1dGVzID0gbmV3IE1hcCgpO1xuXHRcdHRoaXMuc2hhZGVyTG9jYXRpb24gPSAwO1xuXHRcdHRoaXMub2Zmc2V0ID0gMDtcblx0XHR0aGlzLmludGVybGVhdmUgPSBmYWxzZTtcblx0fVxuXHRnZXRBdHRyaWJ1dGUobmFtZSk6IEF0dHJpYnV0ZSB8IEludGVybGVhdmVkQXR0cmlidXRlIHtcblx0XHRyZXR1cm4gdGhpcy5fYXR0cmlidXRlcy5nZXQobmFtZSk7XG5cdH1cblx0c2V0QXR0cmlidXRlKGF0dHJpYnV0ZTogQXR0cmlidXRlIHwgSW50ZXJsZWF2ZWRBdHRyaWJ1dGUpIHtcblx0XHRpZiAoYXR0cmlidXRlLmF0dHJpYnV0ZVR5cGUgPT09IEF0dHJpYnV0ZVR5cGUuYXR0cmlidXRlKSB7XG5cdFx0XHR0aGlzLnNldE5vdEludGVybGVhdmVkQXR0cmlidXRlKGF0dHJpYnV0ZSBhcyBBdHRyaWJ1dGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldEludGVybGVhdmVkQXR0cmlidXRlKGF0dHJpYnV0ZSBhcyBJbnRlcmxlYXZlZEF0dHJpYnV0ZSk7XG5cdFx0fVxuXHR9XG5cdHByaXZhdGUgc2V0Tm90SW50ZXJsZWF2ZWRBdHRyaWJ1dGUoYXR0cmlidXRlOiBBdHRyaWJ1dGUpIHtcblx0XHRpZiAodGhpcy5fYXR0cmlidXRlcy5oYXMoYXR0cmlidXRlLm5hbWUpKSByZXR1cm47XG5cdFx0YXR0cmlidXRlLnNoYWRlckxvY2F0aW9uID0gdGhpcy5zaGFkZXJMb2NhdGlvbjtcblx0XHR0aGlzLnNoYWRlckxvY2F0aW9uICs9IDE7XG5cdFx0YXR0cmlidXRlLm9mZnNldCA9IHRoaXMub2Zmc2V0O1xuXHRcdHRoaXMub2Zmc2V0ICs9IGF0dHJpYnV0ZS5hdHRyaWJ1dGVCeXRlU2l6ZTtcblx0XHR0aGlzLl9hdHRyaWJ1dGVzLnNldChhdHRyaWJ1dGUubmFtZSwgYXR0cmlidXRlKTtcblx0fVxuXHRwcml2YXRlIHNldEludGVybGVhdmVkQXR0cmlidXRlKGF0dHJpYnV0ZTogSW50ZXJsZWF2ZWRBdHRyaWJ1dGUpIHtcblx0XHRpZiAodGhpcy5fYXR0cmlidXRlcy5oYXMoYXR0cmlidXRlLm5hbWVzLnRvU3RyaW5nKCkpKSByZXR1cm47XG5cdFx0dGhpcy5fYXR0cmlidXRlcy5zZXQoYXR0cmlidXRlLm5hbWVzLnRvU3RyaW5nKCksIGF0dHJpYnV0ZSk7XG5cdH1cblx0Z2V0R1BVQXR0cmlidXRlcygpIHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblx0XHR0aGlzLl9hdHRyaWJ1dGVzLmZvckVhY2goKGF0dHJpYnV0ZSkgPT4ge1xuXHRcdFx0cmVzdWx0LnB1c2goLi4uYXR0cmlidXRlLmdldEdQVUF0dHJpYnV0ZSgpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdGdldEF0cnJpYnV0ZVZhbHVlcygpOiB7XG5cdFx0YXJyYXlTdHJpZGU6IG51bWJlcjtcblx0XHR0eXBlQXJyYXk6IEZsb2F0MzJBcnJheTtcblx0fSB7XG5cdFx0Y29uc3QgYXJyYXlTdHJpZGVzID0gW107XG5cdFx0bGV0IGFycmF5U3RyaWRlID0gMDtcblx0XHRsZXQgdmFsdWVzID0gbnVsbDtcblx0XHRjb25zdCBhcnJheXMgPSBbXTtcblx0XHR0aGlzLl9hdHRyaWJ1dGVzLmZvckVhY2goKGF0dHJpYnV0ZTogQXR0cmlidXRlIHwgSW50ZXJsZWF2ZWRBdHRyaWJ1dGUpID0+IHtcblx0XHRcdGlmIChhdHRyaWJ1dGUuYXR0cmlidXRlVHlwZSA9PT0gQXR0cmlidXRlVHlwZS5hdHRyaWJ1dGUpIHtcblx0XHRcdFx0YXJyYXlTdHJpZGVzLnB1c2goKGF0dHJpYnV0ZSBhcyBBdHRyaWJ1dGUpLml0ZW1TaXplKTtcblx0XHRcdFx0YXJyYXlzLnB1c2goYXR0cmlidXRlLnZhbHVlKTtcblx0XHRcdFx0YXJyYXlTdHJpZGUgKz0gKGF0dHJpYnV0ZSBhcyBBdHRyaWJ1dGUpLml0ZW1TaXplO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCF0aGlzLmludGVybGVhdmUpIHRoaXMuaW50ZXJsZWF2ZSA9IHRydWU7XG5cdFx0XHRcdHZhbHVlcyA9IHZhbHVlcyA/PyBhdHRyaWJ1dGUudmFsdWU7XG5cdFx0XHRcdGFycmF5U3RyaWRlID0gKGF0dHJpYnV0ZSBhcyBJbnRlcmxlYXZlZEF0dHJpYnV0ZSkuaXRlbVNpemVzLnJlZHVjZShcblx0XHRcdFx0XHQodG90YWwsIGN1cnJlbnQpID0+ICh0b3RhbCArPSBjdXJyZW50KSxcblx0XHRcdFx0XHQwXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRjb25zdCB0eXBlQXJyYXkgPSB0aGlzLmludGVybGVhdmVcblx0XHRcdD8gbmV3IEZsb2F0MzJBcnJheSh2YWx1ZXMpXG5cdFx0XHQ6IHRoaXMuaW50ZXJsZWF2ZVR5cGVkQXJyYXkoRmxvYXQzMkFycmF5LCBhcnJheVN0cmlkZXMsIC4uLmFycmF5cyk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGFycmF5U3RyaWRlOiBhcnJheVN0cmlkZSAqIHR5cGVBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxcblx0XHRcdHR5cGVBcnJheVxuXHRcdH07XG5cdH1cblx0ZGVzdHJveSgpIHtcblx0XHR0aGlzLl9hdHRyaWJ1dGVzLmZvckVhY2goKGF0dHJpYnV0ZSkgPT4ge1xuXHRcdFx0YXR0cmlidXRlLmRlc3Ryb3koKTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogSW50ZXJsZWF2ZSBuIHR5cGVkIGFycmF5c1xuXHQgKiBAYWxpYXMgbW9kdWxlOmludGVybGVhdmVUeXBlZEFycmF5XG5cdCAqIEBwYXJhbSB7VHlwZWRBcnJheX0gUmVzdWx0Q29uc3RydWN0b3IgUmV0dXJuZWQgdHlwZWQgYXJyYXkgY29uc3RydWN0b3Jcblx0ICogQHBhcmFtIHtBcnJheX0gZWxlbWVudHMgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIGdyb3VwIGZvciBlYWNoIHR5cGVkIGFycmF5XG5cdCAqIEBwYXJhbSB7Li4uVHlwZWRBcnJheX0gYXJyYXlzIEFycmF5cyB0byBpbnRlcmxlYXZlXG5cdCAqIEByZXR1cm5zIHtUeXBlZEFycmF5fVxuXHQgKi9cblx0aW50ZXJsZWF2ZVR5cGVkQXJyYXkoUmVzdWx0Q29uc3RydWN0b3IsIGVsZW1lbnRzLCAuLi5hcnJheXMpIHtcblx0XHRjb25zdCB0b3RhbExlbmd0aCA9IGFycmF5cy5yZWR1Y2UoKHRvdGFsLCBhcnIpID0+IHRvdGFsICsgYXJyLmxlbmd0aCwgMCk7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IFJlc3VsdENvbnN0cnVjdG9yKHRvdGFsTGVuZ3RoKTtcblx0XHRjb25zdCBzdHJpZGUgPSBlbGVtZW50cy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWxMZW5ndGg7IGkrKykge1xuXHRcdFx0bGV0IG9mZnNldCA9IDA7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGZvciAobGV0IGsgPSAwOyBrIDwgZWxlbWVudHNbal07IGsrKykge1xuXHRcdFx0XHRcdHJlc3VsdFtpICogc3RyaWRlICsgb2Zmc2V0XSA9IGFycmF5c1tqXVtlbGVtZW50c1tqXSAqIGkgKyBrXTtcblx0XHRcdFx0XHRvZmZzZXQrKztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJbnB1dFN0ZXBNb2RlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcbmltcG9ydCB7IEF0dHJpYnV0ZSwgSW50ZXJsZWF2ZWRBdHRyaWJ1dGUgfSBmcm9tIFwiLi9BdHRyaWJ1dGVcIjtcbmltcG9ydCBBdHRyaWJ1dGVzIGZyb20gXCIuL0F0dHJpYnV0ZXNcIjtcbmltcG9ydCBCdWZmZXIgZnJvbSBcIi4vQnVmZmVyXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJ0ZXh0QnVmZmVyIHtcblx0cHVibGljIGluZGV4OiBudW1iZXI7XG5cdHB1YmxpYyBhcnJheVN0cmlkZTogbnVtYmVyO1xuXHRwdWJsaWMgc3RlcE1vZGU6IHN0cmluZztcblx0cHVibGljIGJ1ZmZlcjogQnVmZmVyO1xuXHRwdWJsaWMgYXR0cmlidXRlczogQXR0cmlidXRlcztcblx0cHVibGljIGRpcnR5OiBib29sZWFuO1xuXHRwcml2YXRlIGxhYmVsOiBzdHJpbmc7XG5cdGNvbnN0cnVjdG9yKGxhYmVsOiBzdHJpbmcsIGluZGV4PzogbnVtYmVyLCBzdGVwTW9kZT86IHN0cmluZykge1xuXHRcdHRoaXMuaW5kZXggPSBpbmRleCB8fCAwO1xuXHRcdHRoaXMuYXR0cmlidXRlcyA9IG5ldyBBdHRyaWJ1dGVzKCk7XG5cdFx0dGhpcy5zdGVwTW9kZSA9IElucHV0U3RlcE1vZGUuVmVydGV4O1xuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xuXHRcdHRoaXMubGFiZWwgPSBsYWJlbDtcblx0fVxuXHRwdWJsaWMgZ2V0QnVmZmVyRGVzKCkge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGFycmF5U3RyaWRlOiB0aGlzLmFycmF5U3RyaWRlLFxuXHRcdFx0XHRzdGVwTW9kZTogdGhpcy5zdGVwTW9kZSxcblx0XHRcdFx0YXR0cmlidXRlczogdGhpcy5hdHRyaWJ1dGVzLmdldEdQVUF0dHJpYnV0ZXMoKVxuXHRcdFx0fVxuXHRcdF07XG5cdH1cblx0cHVibGljIHNldEF0dHJpYnV0ZShhdHRyaWJ1dGU6IEF0dHJpYnV0ZSB8IEludGVybGVhdmVkQXR0cmlidXRlKSB7XG5cdFx0dGhpcy5hdHRyaWJ1dGVzLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xuXHR9XG5cdHB1YmxpYyBnZXRBdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogQXR0cmlidXRlIHwgSW50ZXJsZWF2ZWRBdHRyaWJ1dGUge1xuXHRcdHJldHVybiB0aGlzLmF0dHJpYnV0ZXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXHR9XG5cdHB1YmxpYyBiaW5kKGRldmljZTogR1BVRGV2aWNlLCBwYXNzRW5jb2RlcjogR1BVUmVuZGVyUGFzc0VuY29kZXIpIHtcblx0XHRpZiAodGhpcy5kaXJ0eSkge1xuXHRcdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0Y29uc3QgeyBhcnJheVN0cmlkZSwgdHlwZUFycmF5IH0gPSB0aGlzLmF0dHJpYnV0ZXMuZ2V0QXRycmlidXRlVmFsdWVzKCk7XG5cdFx0XHR0aGlzLmFycmF5U3RyaWRlID0gYXJyYXlTdHJpZGU7XG5cdFx0XHR0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYWJlbCwgZGV2aWNlLCB0eXBlQXJyYXkpO1xuXHRcdH1cblx0XHRwYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXIodGhpcy5pbmRleCwgdGhpcy5idWZmZXIuZ3B1QnVmZmVyKTtcblx0fVxuXHRkZXN0cm95KCkge1xuXHRcdHRoaXMuYnVmZmVyLmRlc3Ryb3koKTtcblx0XHR0aGlzLmF0dHJpYnV0ZXMuZGVzdHJveSgpO1xuXHR9XG59XG4iLCJpbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuL2RlZmF1bHRWYWx1ZVwiO1xyXG5pbXBvcnQgZGVmaW5lZCBmcm9tIFwiLi9kZWZpbmVkXCI7XHJcblxyXG4vKipcclxuICogTWVyZ2VzIHR3byBvYmplY3RzLCBjb3B5aW5nIHRoZWlyIHByb3BlcnRpZXMgb250byBhIG5ldyBjb21iaW5lZCBvYmplY3QuIFdoZW4gdHdvIG9iamVjdHMgaGF2ZSB0aGUgc2FtZVxyXG4gKiBwcm9wZXJ0eSwgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBvbiB0aGUgZmlyc3Qgb2JqZWN0IGlzIHVzZWQuICBJZiBlaXRoZXIgb2JqZWN0IGlzIHVuZGVmaW5lZCxcclxuICogaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIGVtcHR5IG9iamVjdC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogY29uc3Qgb2JqZWN0MSA9IHtcclxuICogICAgIHByb3BPbmUgOiAxLFxyXG4gKiAgICAgcHJvcFR3byA6IHtcclxuICogICAgICAgICB2YWx1ZTEgOiAxMFxyXG4gKiAgICAgfVxyXG4gKiB9XHJcbiAqIGNvbnN0IG9iamVjdDIgPSB7XHJcbiAqICAgICBwcm9wVHdvIDogMlxyXG4gKiB9XHJcbiAqIGNvbnN0IGZpbmFsID0gY29tYmluZShvYmplY3QxLCBvYmplY3QyKTtcclxuICpcclxuICogLy8gZmluYWwgPT09IHtcclxuICogLy8gICAgIHByb3BPbmUgOiAxLFxyXG4gKiAvLyAgICAgcHJvcFR3byA6IHtcclxuICogLy8gICAgICAgICB2YWx1ZTEgOiAxMFxyXG4gKiAvLyAgICAgfVxyXG4gKiAvLyB9XHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0MV0gVGhlIGZpcnN0IG9iamVjdCB0byBtZXJnZS5cclxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3QyXSBUaGUgc2Vjb25kIG9iamVjdCB0byBtZXJnZS5cclxuICogQHBhcmFtIHtCb29sZWFufSBbZGVlcD1mYWxzZV0gUGVyZm9ybSBhIHJlY3Vyc2l2ZSBtZXJnZS5cclxuICogQHJldHVybnMge09iamVjdH0gVGhlIGNvbWJpbmVkIG9iamVjdCBjb250YWluaW5nIGFsbCBwcm9wZXJ0aWVzIGZyb20gYm90aCBvYmplY3RzLlxyXG4gKlxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbmZ1bmN0aW9uIGNvbWJpbmUob2JqZWN0MSwgb2JqZWN0MiwgZGVlcCkge1xyXG4gIGRlZXAgPSBkZWZhdWx0VmFsdWUoZGVlcCwgZmFsc2UpO1xyXG5cclxuICBjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcbiAgY29uc3Qgb2JqZWN0MURlZmluZWQgPSBkZWZpbmVkKG9iamVjdDEpO1xyXG4gIGNvbnN0IG9iamVjdDJEZWZpbmVkID0gZGVmaW5lZChvYmplY3QyKTtcclxuICBsZXQgcHJvcGVydHk7XHJcbiAgbGV0IG9iamVjdDFWYWx1ZTtcclxuICBsZXQgb2JqZWN0MlZhbHVlO1xyXG4gIGlmIChvYmplY3QxRGVmaW5lZCkge1xyXG4gICAgZm9yIChwcm9wZXJ0eSBpbiBvYmplY3QxKSB7XHJcbiAgICAgIGlmIChvYmplY3QxLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xyXG4gICAgICAgIG9iamVjdDFWYWx1ZSA9IG9iamVjdDFbcHJvcGVydHldO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIG9iamVjdDJEZWZpbmVkICYmXHJcbiAgICAgICAgICBkZWVwICYmXHJcbiAgICAgICAgICB0eXBlb2Ygb2JqZWN0MVZhbHVlID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICBvYmplY3QyLmhhc093blByb3BlcnR5KHByb3BlcnR5KVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgb2JqZWN0MlZhbHVlID0gb2JqZWN0Mltwcm9wZXJ0eV07XHJcbiAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdDJWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICByZXN1bHRbcHJvcGVydHldID0gY29tYmluZShvYmplY3QxVmFsdWUsIG9iamVjdDJWYWx1ZSwgZGVlcCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHRbcHJvcGVydHldID0gb2JqZWN0MVZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXN1bHRbcHJvcGVydHldID0gb2JqZWN0MVZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBpZiAob2JqZWN0MkRlZmluZWQpIHtcclxuICAgIGZvciAocHJvcGVydHkgaW4gb2JqZWN0Mikge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgb2JqZWN0Mi5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkgJiZcclxuICAgICAgICAhcmVzdWx0Lmhhc093blByb3BlcnR5KHByb3BlcnR5KVxyXG4gICAgICApIHtcclxuICAgICAgICBvYmplY3QyVmFsdWUgPSBvYmplY3QyW3Byb3BlcnR5XTtcclxuICAgICAgICByZXN1bHRbcHJvcGVydHldID0gb2JqZWN0MlZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgY29tYmluZTtcclxuIiwiaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gXCIuLi9jb3JlL0JvdW5kaW5nQm94XCI7XG5pbXBvcnQgQm91bmRpbmdTcGhlcmUgZnJvbSBcIi4uL2NvcmUvQm91bmRpbmdTcGhlcmVcIjtcbmltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XG5pbXBvcnQgeyBQcmltaXRpdmVUb3BvbG9neSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XG5pbXBvcnQgVmVjdG9yMiBmcm9tIFwiLi4vbWF0aC9WZWN0b3IyXCI7XG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi4vbWF0aC9WZWN0b3I0XCI7XG5pbXBvcnQgeyBBdHRyaWJ1dGUsIEF0dHJpYnV0ZVR5cGUsIEludGVybGVhdmVkRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XG5pbXBvcnQgSW5kZXhCdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9JbmRleEJ1ZmZlclwiO1xuaW1wb3J0IFZlcnRleHRCdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9WZXJ0ZXh0QnVmZmVyXCI7XG5pbXBvcnQgY29tYmluZSBmcm9tIFwiLi4vdXRpbHMvY29tYmluZVwiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2VvbWV0cnkge1xuXHRub3JtYWxzOiBudW1iZXJbXTtcblx0dXZzOiBudW1iZXJbXTtcblx0cG9zaXRpb25zOiBudW1iZXJbXTtcblx0aW5kaWNlczogbnVtYmVyW107XG5cdHRhbmdlbnRzOiBudW1iZXJbXTtcblx0dHlwZTogc3RyaW5nO1xuXHRkaXJ0eTogYm9vbGVhbjtcblx0aW5kZXhCdWZmZXI/OiBJbmRleEJ1ZmZlcjtcblx0dmVydEJ1ZmZlcjogVmVydGV4dEJ1ZmZlcjtcblx0Y291bnQ6IG51bWJlcjtcblx0Ym91bmRpbmdTcGhlcmU/OiBCb3VuZGluZ1NwaGVyZTtcblx0Ym91bmRpbmdCb3g/OiBCb3VuZGluZ0JveDtcblx0cHJpdmF0ZSBfZGVmaW5lczogeyBbcHJvcDogc3RyaW5nXTogYm9vbGVhbiB8IG51bWJlciB9O1xuXHRwcml2YXRlIGxvY2F0aW9uSW5kZXg/OiBudW1iZXI7XG5cdGRlZmluZXNEaXJ0eTogYm9vbGVhbjtcblx0dG9wb2xvZ3k6IFByaW1pdGl2ZVRvcG9sb2d5O1xuXHRnZXQgZGVmaW5lcygpIHtcblx0XHRyZXR1cm4gdGhpcy5fZGVmaW5lcztcblx0fVxuXHRzZXQgZGVmaW5lcyh2YWx1ZSkge1xuXHRcdHRoaXMuZGVmaW5lc0RpcnR5ID0gdHJ1ZTtcblx0XHR0aGlzLl9kZWZpbmVzID0gY29tYmluZSh2YWx1ZSwgdGhpcy5fZGVmaW5lcywgZmFsc2UpO1xuXHR9XG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBhbnkpIHtcblx0XHR0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGUgfHwgdW5kZWZpbmVkO1xuXHRcdHRoaXMuYm91bmRpbmdTcGhlcmUgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXHRcdHRoaXMuZGVmaW5lc0RpcnR5ID0gdHJ1ZTtcblx0XHR0aGlzLmxvY2F0aW9uSW5kZXggPSAwO1xuXHRcdHRoaXMudmVydEJ1ZmZlciA9IG5ldyBWZXJ0ZXh0QnVmZmVyKHRoaXMudHlwZSwgMCk7XG5cdFx0dGhpcy5fZGVmaW5lcyA9IHt9O1xuXHRcdHRoaXMubm9ybWFscyA9IFtdO1xuXHRcdHRoaXMudXZzID0gW107XG5cdFx0dGhpcy5wb3NpdGlvbnMgPSBbXTtcblx0XHR0aGlzLmluZGljZXMgPSBbXTtcblx0XHR0aGlzLnRhbmdlbnRzID0gW107XG5cdH1cblx0Z2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLnZlcnRCdWZmZXIuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXHR9XG5cdHNldEF0dHJpYnV0ZShhdHRyaWJ1dGU6IEF0dHJpYnV0ZSB8IEludGVybGVhdmVkRmxvYXQzMkF0dHJpYnV0ZSkge1xuXHRcdGlmIChhdHRyaWJ1dGUuYXR0cmlidXRlVHlwZSA9PT0gQXR0cmlidXRlVHlwZS5hdHRyaWJ1dGUpIHtcblx0XHRcdHRoaXMuc2V0TG9jYXRpb25JbmRleCgoYXR0cmlidXRlIGFzIEF0dHJpYnV0ZSkubmFtZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdChhdHRyaWJ1dGUgYXMgSW50ZXJsZWF2ZWRGbG9hdDMyQXR0cmlidXRlKT8ubmFtZXMuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB0aGlzLnNldExvY2F0aW9uSW5kZXgobmFtZSkpO1xuXHRcdH1cblx0XHR0aGlzLnZlcnRCdWZmZXIuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XG5cdH1cblx0cHJpdmF0ZSBzZXRMb2NhdGlvbkluZGV4KG5hbWU6IHN0cmluZykge1xuXHRcdGlmICh0aGlzLl9kZWZpbmVzW25hbWU/LmNvbmNhdChcIkxvY2F0aW9uXCIpXSB8fCAhbmFtZSkgcmV0dXJuO1xuXHRcdHRoaXMuX2RlZmluZXNbbmFtZT8uY29uY2F0KFwiTG9jYXRpb25cIildID0gdGhpcy5sb2NhdGlvbkluZGV4O1xuXHRcdHRoaXMubG9jYXRpb25JbmRleCArPSAxO1xuXHR9XG5cdGNvbnRhaW5BdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2RlZmluZXNbbmFtZT8uY29uY2F0KFwiTG9jYXRpb25cIildICE9IHVuZGVmaW5lZCA/IHRydWUgOiBmYWxzZTtcblx0fVxuXHRzZXRJbmRpY2UoaW5kaWNlczogQXJyYXk8bnVtYmVyPikge1xuXHRcdHRoaXMuaW5kaWNlcyA9IGluZGljZXM7XG5cdFx0aWYgKCF0aGlzLmluZGV4QnVmZmVyKSB0aGlzLmluZGV4QnVmZmVyID0gbmV3IEluZGV4QnVmZmVyKHRoaXMudHlwZSArIFwiSW5kZXhCdWZmZXJcIik7XG5cdFx0dGhpcy5pbmRleEJ1ZmZlci5zZXRJbmRpY2VzKGluZGljZXMpO1xuXHR9XG5cdHVwZGF0ZShmcmFtZVN0YXRlOiBGcmFtZVN0YXRlKSB7fVxuXHRjb21wdXRlQm91bmRpbmdTcGhlcmUocG9zaXRpb25zOiBudW1iZXJbXSwgc3RyaWRlID0gMykge1xuXHRcdHRoaXMuYm91bmRpbmdTcGhlcmUgPSBCb3VuZGluZ1NwaGVyZS5mcm9tVmVydGljZXMocG9zaXRpb25zLCBuZXcgVmVjdG9yMygwLCAwLCAwKSwgc3RyaWRlKTtcblx0fVxuXHQvKipcblx0ICogQ2FsY3VsYXRlIG1lc2ggdGFuZ2VudC5cblx0ICogQHJlbWFyayBuZWVkIHRvIHNldCBwb3NpdGlvbnMod2l0aCBvciBub3Qgd2l0aCBpbmRpY2VzKSwgbm9ybWFscywgdXYgYmVmb3JlIGNhbGN1bGF0aW9uLlxuXHQgKiBAcmVtYXJrIGJhc2VkIG9uIGh0dHA6Ly9mb3VuZGF0aW9uc29mZ2FtZWVuZ2luZWRldi5jb20vRkdFRDItc2FtcGxlLnBkZlxuXHQgKi9cblx0Y2FsY3VsYXRlVGFuZ2VudHMoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLm5vcm1hbHMgfHwgIXRoaXMudXZzKSB7XG5cdFx0XHR0aHJvdyBcIlNldCBub3JtYWwgYW5kIHV2IGJlZm9yZSBjYWxjdWxhdGlvbi5cIjtcblx0XHR9XG5cdFx0Y29uc3QgeyBpbmRpY2VzLCBwb3NpdGlvbnMsIG5vcm1hbHMsIHV2cyB9ID0gdGhpcztcblx0XHRjb25zdCB0ZW1wUG9zMCA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHR0ZW1wUG9zMSA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHR0ZW1wUG9zMiA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHR0ZW1wVVYwID0gbmV3IFZlY3RvcjIoKSxcblx0XHRcdHRlbXBVVjEgPSBuZXcgVmVjdG9yMigpLFxuXHRcdFx0dGVtcFVWMiA9IG5ldyBWZWN0b3IyKCk7XG5cdFx0Y29uc3QgZTEgPSBuZXcgVmVjdG9yMygpLFxuXHRcdFx0ZTIgPSBuZXcgVmVjdG9yMygpLFxuXHRcdFx0dCA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRiID0gbmV3IFZlY3RvcjMoKSxcblx0XHRcdHRlbXAgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IHZlcnRleENvdW50ID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcblx0XHRjb25zdCB0cmlhbmdsZUNvdW50ID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIC8gMyA6IHBvc2l0aW9ucy5sZW5ndGggLyAzO1xuXHRcdGNvbnN0IHRhbmdlbnRzID0gbmV3IEFycmF5PFZlY3RvcjQ+KHZlcnRleENvdW50KTtcblx0XHRjb25zdCBiaVRhbmdlbnRzID0gbmV3IEFycmF5PFZlY3RvcjM+KHZlcnRleENvdW50KTtcblx0XHR0aGlzLnRhbmdlbnRzID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSsrKSB7XG5cdFx0XHR0YW5nZW50c1tpXSA9IG5ldyBWZWN0b3I0KCk7XG5cdFx0XHRiaVRhbmdlbnRzW2ldID0gbmV3IFZlY3RvcjMoKTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgdGFuZ2VudCBhbmQgYmktdGFuZ2VudCBmb3IgZWFjaCB0cmlhbmdsZSBhbmQgYWRkIHRvIGFsbCB0aHJlZSB2ZXJ0aWNlcy5cblx0XHRmb3IgKGxldCBrID0gMDsgayA8IHRyaWFuZ2xlQ291bnQ7IGsrKykge1xuXHRcdFx0bGV0IGkwID0gMyAqIGs7XG5cdFx0XHRsZXQgaTEgPSAzICogayArIDE7XG5cdFx0XHRsZXQgaTIgPSAzICogayArIDI7XG5cdFx0XHRpZiAoaW5kaWNlcykge1xuXHRcdFx0XHRpMCA9IGluZGljZXNbaTBdO1xuXHRcdFx0XHRpMSA9IGluZGljZXNbaTFdO1xuXHRcdFx0XHRpMiA9IGluZGljZXNbaTJdO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBwMCA9IHRlbXBQb3MwLnNldChwb3NpdGlvbnNbaTBdLCBwb3NpdGlvbnNbaTAgKyAxXSwgcG9zaXRpb25zW2kwICsgMl0pO1xuXHRcdFx0Y29uc3QgcDEgPSB0ZW1wUG9zMS5zZXQocG9zaXRpb25zW2kxXSwgcG9zaXRpb25zW2kxICsgMV0sIHBvc2l0aW9uc1tpMSArIDJdKTtcblx0XHRcdGNvbnN0IHAyID0gdGVtcFBvczIuc2V0KHBvc2l0aW9uc1tpMl0sIHBvc2l0aW9uc1tpMiArIDFdLCBwb3NpdGlvbnNbaTIgKyAyXSk7XG5cdFx0XHRjb25zdCB3MCA9IHRlbXBVVjAuc2V0KHV2c1tpMF0sIHV2c1tpMCArIDFdKTtcblx0XHRcdGNvbnN0IHcxID0gdGVtcFVWMS5zZXQodXZzW2kxXSwgdXZzW2kxICsgMV0pO1xuXHRcdFx0Y29uc3QgdzIgPSB0ZW1wVVYyLnNldCh1dnNbaTJdLCB1dnNbaTIgKyAxXSk7XG5cblx0XHRcdFZlY3RvcjMuc3VidHJhY3QocDEsIHAwLCBlMSk7XG5cdFx0XHRWZWN0b3IzLnN1YnRyYWN0KHAyLCBwMCwgZTIpO1xuXHRcdFx0Y29uc3QgeDEgPSB3MS54IC0gdzAueDtcblx0XHRcdGNvbnN0IHgyID0gdzIueCAtIHcwLng7XG5cdFx0XHRjb25zdCB5MSA9IHcxLnkgLSB3MC55O1xuXHRcdFx0Y29uc3QgeTIgPSB3Mi55IC0gdzAueTtcblx0XHRcdGNvbnN0IHIgPSAxLjAgLyAoeDEgKiB5MiAtIHgyICogeTEpO1xuXG5cdFx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIoZTEsIHkyICogciwgdCk7XG5cdFx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIoZTIsIHkxICogciwgdGVtcCk7XG5cdFx0XHRWZWN0b3IzLnN1YnRyYWN0KHQsIHRlbXAsIHQpO1xuXHRcdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGUyLCB4MSAqIHIsIGIpO1xuXHRcdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGUxLCB4MiAqIHIsIHRlbXApO1xuXHRcdFx0VmVjdG9yMy5zdWJ0cmFjdChiLCB0ZW1wLCBiKTtcblxuXHRcdFx0bGV0IHRhbmdlbnQgPSB0YW5nZW50c1tpMF07XG5cdFx0XHR0YW5nZW50LnNldCh0YW5nZW50LnggKyB0LngsIHRhbmdlbnQueSArIHQueSwgdGFuZ2VudC56ICsgdC56LCAxLjApO1xuXG5cdFx0XHR0YW5nZW50ID0gdGFuZ2VudHNbaTFdO1xuXHRcdFx0dGFuZ2VudC5zZXQodGFuZ2VudC54ICsgdC54LCB0YW5nZW50LnkgKyB0LnksIHRhbmdlbnQueiArIHQueiwgMS4wKTtcblxuXHRcdFx0dGFuZ2VudCA9IHRhbmdlbnRzW2kyXTtcblx0XHRcdHRhbmdlbnQuc2V0KHRhbmdlbnQueCArIHQueCwgdGFuZ2VudC55ICsgdC55LCB0YW5nZW50LnogKyB0LnosIDEuMCk7XG5cdFx0XHRiaVRhbmdlbnRzW2kwXS5hZGQoYik7XG5cdFx0XHRiaVRhbmdlbnRzW2kxXS5hZGQoYik7XG5cdFx0XHRiaVRhbmdlbnRzW2kyXS5hZGQoYik7XG5cdFx0fVxuXG5cdFx0Ly8gT3J0aG9ub3JtYWxpemUgZWFjaCB0YW5nZW50IGFuZCBjYWxjdWxhdGUgdGhlIGhhbmRlZG5lc3MuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSsrKSB7XG5cdFx0XHRjb25zdCBuID0gbmV3IFZlY3RvcjMobm9ybWFsc1szICogaV0sIG5vcm1hbHNbMyAqIGkgKyAxXSwgbm9ybWFsc1szICogaSArIDJdKTtcblx0XHRcdGNvbnN0IGIgPSBiaVRhbmdlbnRzW2ldO1xuXHRcdFx0Y29uc3QgdGFuZ2VudCA9IHRhbmdlbnRzW2ldO1xuXHRcdFx0dC5zZXQodGFuZ2VudC54LCB0YW5nZW50LnksIHRhbmdlbnQueik7XG5cblx0XHRcdFZlY3RvcjMuY3Jvc3ModCwgYiwgdGVtcCk7XG5cdFx0XHRjb25zdCB3ID0gVmVjdG9yMy5kb3QodGVtcCwgbikgPiAwLjAgPyAxIDogLTE7XG5cdFx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIobiwgVmVjdG9yMy5kb3QodCwgbiksIHRlbXApO1xuXHRcdFx0VmVjdG9yMy5zdWJ0cmFjdCh0LCB0ZW1wLCB0KTtcblx0XHRcdFZlY3RvcjMubm9ybWFsaXplKHQsIHQpO1xuXHRcdFx0Ly8gdC5ub3JtYWxpemUoKTtcblx0XHRcdHRhbmdlbnQuc2V0KHQueCwgdC55LCB0LnosIHcpO1xuXHRcdFx0dGhpcy50YW5nZW50cy5wdXNoKHQueCwgdC55LCB0LnosIHcpO1xuXHRcdH1cblx0XHQvLyB0aGlzLnNldFRhbmdlbnRzKHRhbmdlbnRzKTtcblx0fVxuXHRkZXN0cm95KCkge1xuXHRcdHRoaXM/LmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcblx0XHR0aGlzLnZlcnRCdWZmZXIuZGVzdHJveSgpO1xuXHRcdHRoaXMubm9ybWFscyA9IG51bGw7XG5cdFx0dGhpcy51dnMgPSBudWxsO1xuXHRcdHRoaXMucG9zaXRpb25zID0gbnVsbDtcblx0XHR0aGlzLmluZGljZXMgPSBudWxsO1xuXHRcdHRoaXMudGFuZ2VudHMgPSBudWxsO1xuXHRcdHRoaXMuYm91bmRpbmdTcGhlcmUgPSB1bmRlZmluZWQ7XG5cdH1cbn1cbiIsImltcG9ydCB7IEZsb2F0MzJBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vcmVuZGVyL0F0dHJpYnV0ZVwiO1xyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSBcIi4vR2VvbWV0cnlcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxhbmVHZW9tZXRyeSBleHRlbmRzIEdlb21ldHJ5IHtcclxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgd2lkdGg6IG51bWJlciA9IDEwLCBwdWJsaWMgaGVpZ2h0OiBudW1iZXIgPSAxMCkge1xyXG5cdFx0c3VwZXIoe1xyXG5cdFx0XHR0eXBlOiBcInBsYW5lR2VvbWV0cnlcIlxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmRlZmluZXMgPSB7XHJcblx0XHRcdEhBU19OT1JNQUw6IHRydWVcclxuXHRcdH07XHJcblx0XHR0aGlzLmluaXQoKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBpbml0KCkge1xyXG5cdFx0Ly8gZ2VuZXJhdGUgcG9zIHV2IG5vcm1hbCBzbyBvblxyXG5cdFx0Y29uc3QgeyBpbmRpY2VzLCBub3JtYWxzLCB1dnMsIHZlcnRpY2VzIH0gPSB0aGlzLmNyZWF0ZUdyaWQodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xyXG5cdFx0dGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUodmVydGljZXMpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJwb3NpdGlvblwiLCB2ZXJ0aWNlcywgMykpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJub3JtYWxcIiwgbm9ybWFscywgMykpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJ1dlwiLCB1dnMsIDIpKTtcclxuXHRcdHRoaXMuc2V0SW5kaWNlKGluZGljZXMpO1xyXG5cdFx0dGhpcy5jb3VudCA9IGluZGljZXMubGVuZ3RoO1xyXG5cdH1cclxuXHRwdWJsaWMgdXBkYXRlKGZyYW1lU3RhdGUpIHt9XHJcblx0cHJpdmF0ZSBjcmVhdGVHcmlkKHdpZHRoID0gMSwgaGVpZ2h0ID0gMSwgd2lkdGhTZWdtZW50cyA9IDEsIGhlaWdodFNlZ21lbnRzID0gMSkge1xyXG5cdFx0Y29uc3Qgd2lkdGhfaGFsZiA9IHdpZHRoIC8gMjtcclxuXHRcdGNvbnN0IGhlaWdodF9oYWxmID0gaGVpZ2h0IC8gMjtcclxuXHJcblx0XHRjb25zdCBncmlkWCA9IE1hdGguZmxvb3Iod2lkdGhTZWdtZW50cyk7XHJcblx0XHRjb25zdCBncmlkWSA9IE1hdGguZmxvb3IoaGVpZ2h0U2VnbWVudHMpO1xyXG5cclxuXHRcdGNvbnN0IGdyaWRYMSA9IGdyaWRYICsgMTtcclxuXHRcdGNvbnN0IGdyaWRZMSA9IGdyaWRZICsgMTtcclxuXHJcblx0XHRjb25zdCBzZWdtZW50X3dpZHRoID0gd2lkdGggLyBncmlkWDtcclxuXHRcdGNvbnN0IHNlZ21lbnRfaGVpZ2h0ID0gaGVpZ2h0IC8gZ3JpZFk7XHJcblxyXG5cdFx0Ly9cclxuXHJcblx0XHRjb25zdCBpbmRpY2VzID0gW107XHJcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xyXG5cdFx0Y29uc3Qgbm9ybWFscyA9IFtdO1xyXG5cdFx0Y29uc3QgdXZzID0gW107XHJcblxyXG5cdFx0Zm9yIChsZXQgaXkgPSAwOyBpeSA8IGdyaWRZMTsgaXkrKykge1xyXG5cdFx0XHRjb25zdCB5ID0gaXkgKiBzZWdtZW50X2hlaWdodCAtIGhlaWdodF9oYWxmO1xyXG5cclxuXHRcdFx0Zm9yIChsZXQgaXggPSAwOyBpeCA8IGdyaWRYMTsgaXgrKykge1xyXG5cdFx0XHRcdGNvbnN0IHggPSBpeCAqIHNlZ21lbnRfd2lkdGggLSB3aWR0aF9oYWxmO1xyXG5cclxuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKHgsIC15LCAwKTtcclxuXHJcblx0XHRcdFx0bm9ybWFscy5wdXNoKDAsIDAsIDEpO1xyXG5cclxuXHRcdFx0XHR1dnMucHVzaChpeCAvIGdyaWRYKTtcclxuXHRcdFx0XHR1dnMucHVzaCgxIC0gaXkgLyBncmlkWSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGxldCBpeSA9IDA7IGl5IDwgZ3JpZFk7IGl5KyspIHtcclxuXHRcdFx0Zm9yIChsZXQgaXggPSAwOyBpeCA8IGdyaWRYOyBpeCsrKSB7XHJcblx0XHRcdFx0Y29uc3QgYSA9IGl4ICsgZ3JpZFgxICogaXk7XHJcblx0XHRcdFx0Y29uc3QgYiA9IGl4ICsgZ3JpZFgxICogKGl5ICsgMSk7XHJcblx0XHRcdFx0Y29uc3QgYyA9IGl4ICsgMSArIGdyaWRYMSAqIChpeSArIDEpO1xyXG5cdFx0XHRcdGNvbnN0IGQgPSBpeCArIDEgKyBncmlkWDEgKiBpeTtcclxuXHJcblx0XHRcdFx0aW5kaWNlcy5wdXNoKGEsIGIsIGQpO1xyXG5cdFx0XHRcdGluZGljZXMucHVzaChiLCBjLCBkKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHsgaW5kaWNlcywgbm9ybWFscywgdXZzLCB2ZXJ0aWNlcyB9O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IEdNYXRoIGZyb20gXCIuL01hdGhcIjtcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4vTWF0cml4NFwiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi9WZWN0b3IzXCI7XHJcbi8qKlxyXG4gKiBBIHNldCBvZiA0LWRpbWVuc2lvbmFsIGNvb3JkaW5hdGVzIHVzZWQgdG8gcmVwcmVzZW50IHJvdGF0aW9uIGluIDMtZGltZW5zaW9uYWwgc3BhY2UuXHJcbiAqIEBhbGlhcyBRdWF0ZXJuaW9uXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3g9MC4wXSBUaGUgWCBjb21wb25lbnQuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbeT0wLjBdIFRoZSBZIGNvbXBvbmVudC5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFt6PTAuMF0gVGhlIFogY29tcG9uZW50LlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3c9MC4wXSBUaGUgVyBjb21wb25lbnQuXHJcbiAqXHJcbiAqIEBzZWUgUGFja2FibGVGb3JJbnRlcnBvbGF0aW9uXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUXVhdGVybmlvbiB7XHJcblx0cHVibGljIHN0YXRpYyBaRVJPID0gT2JqZWN0LmZyZWV6ZShuZXcgUXVhdGVybmlvbigwLjAsIDAuMCwgMC4wLCAwLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBJREVOVElUWSA9IE9iamVjdC5mcmVlemUobmV3IFF1YXRlcm5pb24oMC4wLCAwLjAsIDAuMCwgMS4wKSk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyB4OiBudW1iZXIgPSAwLCBwdWJsaWMgeTogbnVtYmVyID0gMCwgcHVibGljIHo6IG51bWJlciA9IDAsIHB1YmxpYyB3OiBudW1iZXIgPSAxKSB7fVxyXG5cdHNldCh4LCB5LCB6LCB3KSB7XHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHRoaXMueiA9IHo7XHJcblx0XHR0aGlzLncgPSB3O1xyXG5cdH1cclxuXHRub3JtYWxpemUoKSB7XHJcblx0XHRjb25zdCBpbnZlcnNlTWFnbml0dWRlID0gMS4wIC8gUXVhdGVybmlvbi5tYWduaXR1ZGUodGhpcyk7XHJcblx0XHRjb25zdCB4ID0gdGhpcy54ICogaW52ZXJzZU1hZ25pdHVkZTtcclxuXHRcdGNvbnN0IHkgPSB0aGlzLnkgKiBpbnZlcnNlTWFnbml0dWRlO1xyXG5cdFx0Y29uc3QgeiA9IHRoaXMueiAqIGludmVyc2VNYWduaXR1ZGU7XHJcblx0XHRjb25zdCB3ID0gdGhpcy53ICogaW52ZXJzZU1hZ25pdHVkZTtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHRoaXMueiA9IHo7XHJcblx0XHR0aGlzLncgPSB3O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdGludmVydCgpIHtcclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHRoaXMueiAqPSAtMTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0ZG90KHY6IFF1YXRlcm5pb24pOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMueCAqIHYueCArIHRoaXMueSAqIHYueSArIHRoaXMueiAqIHYueiArIHRoaXMudyAqIHYudztcclxuXHR9XHJcblx0c2V0RnJvbVVuaXRWZWN0b3JzKHZGcm9tOiBWZWN0b3IzLCB2VG86IFZlY3RvcjMpOiBRdWF0ZXJuaW9uIHtcclxuXHRcdC8vIGFzc3VtZXMgZGlyZWN0aW9uIHZlY3RvcnMgdkZyb20gYW5kIHZUbyBhcmUgbm9ybWFsaXplZFxyXG5cdFx0bGV0IHIgPSBWZWN0b3IzLmRvdCh2RnJvbSwgdlRvKSArIDE7XHJcblx0XHRpZiAociA8IE51bWJlci5FUFNJTE9OKSB7XHJcblx0XHRcdC8vIHZGcm9tIGFuZCB2VG8gcG9pbnQgaW4gb3Bwb3NpdGUgZGlyZWN0aW9uc1xyXG5cclxuXHRcdFx0ciA9IDA7XHJcblxyXG5cdFx0XHRpZiAoTWF0aC5hYnModkZyb20ueCkgPiBNYXRoLmFicyh2RnJvbS56KSkge1xyXG5cdFx0XHRcdHRoaXMueCA9IC12RnJvbS55O1xyXG5cdFx0XHRcdHRoaXMueSA9IHZGcm9tLng7XHJcblx0XHRcdFx0dGhpcy56ID0gMDtcclxuXHRcdFx0XHR0aGlzLncgPSByO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMueCA9IDA7XHJcblx0XHRcdFx0dGhpcy55ID0gLXZGcm9tLno7XHJcblx0XHRcdFx0dGhpcy56ID0gdkZyb20ueTtcclxuXHRcdFx0XHR0aGlzLncgPSByO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBjcm9zc1ZlY3RvcnMoIHZGcm9tLCB2VG8gKTsgLy8gaW5saW5lZCB0byBhdm9pZCBjeWNsaWMgZGVwZW5kZW5jeSBvbiBWZWN0b3IzXHJcblxyXG5cdFx0XHR0aGlzLnggPSB2RnJvbS55ICogdlRvLnogLSB2RnJvbS56ICogdlRvLnk7XHJcblx0XHRcdHRoaXMueSA9IHZGcm9tLnogKiB2VG8ueCAtIHZGcm9tLnggKiB2VG8uejtcclxuXHRcdFx0dGhpcy56ID0gdkZyb20ueCAqIHZUby55IC0gdkZyb20ueSAqIHZUby54O1xyXG5cdFx0XHR0aGlzLncgPSByO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLm5vcm1hbGl6ZSgpO1xyXG5cdH1cclxuXHRzZXRGcm9tUm90YXRpb25NYXRyaXgobWF0cml4OiBNYXRyaXg0KTogUXVhdGVybmlvbiB7XHJcblx0XHRjb25zdCB0ZSA9IG1hdHJpeCxcclxuXHRcdFx0bTExID0gdGVbMF0sXHJcblx0XHRcdG0xMiA9IHRlWzRdLFxyXG5cdFx0XHRtMTMgPSB0ZVs4XSxcclxuXHRcdFx0bTIxID0gdGVbMV0sXHJcblx0XHRcdG0yMiA9IHRlWzVdLFxyXG5cdFx0XHRtMjMgPSB0ZVs5XSxcclxuXHRcdFx0bTMxID0gdGVbMl0sXHJcblx0XHRcdG0zMiA9IHRlWzZdLFxyXG5cdFx0XHRtMzMgPSB0ZVsxMF0sXHJcblx0XHRcdHRyYWNlID0gbTExICsgbTIyICsgbTMzO1xyXG5cclxuXHRcdGlmICh0cmFjZSA+IDApIHtcclxuXHRcdFx0Y29uc3QgcyA9IDAuNSAvIE1hdGguc3FydCh0cmFjZSArIDEuMCk7XHJcblxyXG5cdFx0XHR0aGlzLncgPSAwLjI1IC8gcztcclxuXHRcdFx0dGhpcy54ID0gKG0zMiAtIG0yMykgKiBzO1xyXG5cdFx0XHR0aGlzLnkgPSAobTEzIC0gbTMxKSAqIHM7XHJcblx0XHRcdHRoaXMueiA9IChtMjEgLSBtMTIpICogcztcclxuXHRcdH0gZWxzZSBpZiAobTExID4gbTIyICYmIG0xMSA+IG0zMykge1xyXG5cdFx0XHRjb25zdCBzID0gMi4wICogTWF0aC5zcXJ0KDEuMCArIG0xMSAtIG0yMiAtIG0zMyk7XHJcblxyXG5cdFx0XHR0aGlzLncgPSAobTMyIC0gbTIzKSAvIHM7XHJcblx0XHRcdHRoaXMueCA9IDAuMjUgKiBzO1xyXG5cdFx0XHR0aGlzLnkgPSAobTEyICsgbTIxKSAvIHM7XHJcblx0XHRcdHRoaXMueiA9IChtMTMgKyBtMzEpIC8gcztcclxuXHRcdH0gZWxzZSBpZiAobTIyID4gbTMzKSB7XHJcblx0XHRcdGNvbnN0IHMgPSAyLjAgKiBNYXRoLnNxcnQoMS4wICsgbTIyIC0gbTExIC0gbTMzKTtcclxuXHJcblx0XHRcdHRoaXMudyA9IChtMTMgLSBtMzEpIC8gcztcclxuXHRcdFx0dGhpcy54ID0gKG0xMiArIG0yMSkgLyBzO1xyXG5cdFx0XHR0aGlzLnkgPSAwLjI1ICogcztcclxuXHRcdFx0dGhpcy56ID0gKG0yMyArIG0zMikgLyBzO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc3QgcyA9IDIuMCAqIE1hdGguc3FydCgxLjAgKyBtMzMgLSBtMTEgLSBtMjIpO1xyXG5cclxuXHRcdFx0dGhpcy53ID0gKG0yMSAtIG0xMikgLyBzO1xyXG5cdFx0XHR0aGlzLnggPSAobTEzICsgbTMxKSAvIHM7XHJcblx0XHRcdHRoaXMueSA9IChtMjMgKyBtMzIpIC8gcztcclxuXHRcdFx0dGhpcy56ID0gMC4yNSAqIHM7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0Y2xvbmUoKSB7XHJcblx0XHRyZXR1cm4gUXVhdGVybmlvbi5jbG9uZSh0aGlzLCB0aGlzKTtcclxuXHR9XHJcblxyXG5cdGVxdWFscyhyaWdodDogUXVhdGVybmlvbik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIFF1YXRlcm5pb24uZXF1YWxzKHRoaXMsIHJpZ2h0KTtcclxuXHR9XHJcblxyXG5cdGVxdWFsc0Vwc2lsb24ocmlnaHQ6IFF1YXRlcm5pb24sIGVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gUXVhdGVybmlvbi5lcXVhbHNFcHNpbG9uKHRoaXMsIHJpZ2h0LCBlcHNpbG9uKTtcclxuXHR9XHJcblx0dG9BcnJheSgpOiBudW1iZXJbXSB7XHJcblx0XHRjb25zdCB7IHgsIHksIHosIHcgfSA9IHRoaXM7XHJcblx0XHRyZXR1cm4gW3gsIHksIHosIHddO1xyXG5cdH1cclxuXHRzdGF0aWMgZnJvbUF4aXNBbmdsZShheGlzOiBWZWN0b3IzLCBhbmdsZTogbnVtYmVyKTogUXVhdGVybmlvbiB7XHJcblx0XHRjb25zdCBoYWxmQW5nbGUgPSBhbmdsZSAvIDIuMDtcclxuXHRcdGNvbnN0IHMgPSBNYXRoLnNpbihoYWxmQW5nbGUpO1xyXG5cdFx0ZnJvbUF4aXNBbmdsZVNjcmF0Y2ggPSBWZWN0b3IzLm5vcm1hbGl6ZShheGlzLCBmcm9tQXhpc0FuZ2xlU2NyYXRjaCk7XHJcblxyXG5cdFx0Y29uc3QgeCA9IGZyb21BeGlzQW5nbGVTY3JhdGNoLnggKiBzO1xyXG5cdFx0Y29uc3QgeSA9IGZyb21BeGlzQW5nbGVTY3JhdGNoLnkgKiBzO1xyXG5cdFx0Y29uc3QgeiA9IGZyb21BeGlzQW5nbGVTY3JhdGNoLnogKiBzO1xyXG5cdFx0Y29uc3QgdyA9IE1hdGguY29zKGhhbGZBbmdsZSk7XHJcblx0XHQvLyBpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0Ly8gICByZXR1cm5cclxuXHRcdC8vIH1cclxuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBRdWF0ZXJuaW9uKHgsIHksIHosIHcpO1xyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmVzdWx0LnogPSB6O1xyXG5cdFx0cmVzdWx0LncgPSB3O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8vIHN0YXRpYyBmcm9tUm90YXRpb25NYXRyaXgobWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHQvLyBcdGxldCByb290O1xyXG5cdC8vIFx0bGV0IHg7XHJcblx0Ly8gXHRsZXQgeTtcclxuXHQvLyBcdGxldCB6O1xyXG5cdC8vIFx0bGV0IHc7XHJcblxyXG5cdC8vIFx0Y29uc3QgbTAwID0gbWF0cml4W01hdHJpeDMuQ09MVU1OMFJPVzBdO1xyXG5cdC8vIFx0Y29uc3QgbTExID0gbWF0cml4W01hdHJpeDMuQ09MVU1OMVJPVzFdO1xyXG5cdC8vIFx0Y29uc3QgbTIyID0gbWF0cml4W01hdHJpeDMuQ09MVU1OMlJPVzJdO1xyXG5cdC8vIFx0Y29uc3QgdHJhY2UgPSBtMDAgKyBtMTEgKyBtMjI7XHJcblxyXG5cdC8vIFx0aWYgKHRyYWNlID4gMC4wKSB7XHJcblx0Ly8gXHRcdC8vIHx3fCA+IDEvMiwgbWF5IGFzIHdlbGwgY2hvb3NlIHcgPiAxLzJcclxuXHQvLyBcdFx0cm9vdCA9IE1hdGguc3FydCh0cmFjZSArIDEuMCk7IC8vIDJ3XHJcblx0Ly8gXHRcdHcgPSAwLjUgKiByb290O1xyXG5cdC8vIFx0XHRyb290ID0gMC41IC8gcm9vdDsgLy8gMS8oNHcpXHJcblxyXG5cdC8vIFx0XHR4ID0gKG1hdHJpeFtNYXRyaXgzLkNPTFVNTjFST1cyXSAtIG1hdHJpeFtNYXRyaXgzLkNPTFVNTjJST1cxXSkgKiByb290O1xyXG5cdC8vIFx0XHR5ID0gKG1hdHJpeFtNYXRyaXgzLkNPTFVNTjJST1cwXSAtIG1hdHJpeFtNYXRyaXgzLkNPTFVNTjBST1cyXSkgKiByb290O1xyXG5cdC8vIFx0XHR6ID0gKG1hdHJpeFtNYXRyaXgzLkNPTFVNTjBST1cxXSAtIG1hdHJpeFtNYXRyaXgzLkNPTFVNTjFST1cwXSkgKiByb290O1xyXG5cdC8vIFx0fSBlbHNlIHtcclxuXHQvLyBcdFx0Ly8gfHd8IDw9IDEvMlxyXG5cdC8vIFx0XHRjb25zdCBuZXh0ID0gZnJvbVJvdGF0aW9uTWF0cml4TmV4dDtcclxuXHJcblx0Ly8gXHRcdGxldCBpID0gMDtcclxuXHQvLyBcdFx0aWYgKG0xMSA+IG0wMCkge1xyXG5cdC8vIFx0XHRcdGkgPSAxO1xyXG5cdC8vIFx0XHR9XHJcblx0Ly8gXHRcdGlmIChtMjIgPiBtMDAgJiYgbTIyID4gbTExKSB7XHJcblx0Ly8gXHRcdFx0aSA9IDI7XHJcblx0Ly8gXHRcdH1cclxuXHQvLyBcdFx0Y29uc3QgaiA9IG5leHRbaV07XHJcblx0Ly8gXHRcdGNvbnN0IGsgPSBuZXh0W2pdO1xyXG5cclxuXHQvLyBcdFx0cm9vdCA9IE1hdGguc3FydChcclxuXHQvLyBcdFx0XHRtYXRyaXhbTWF0cml4My5nZXRFbGVtZW50SW5kZXgoaSwgaSldIC1cclxuXHQvLyBcdFx0XHRcdG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChqLCBqKV0gLVxyXG5cdC8vIFx0XHRcdFx0bWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KGssIGspXSArXHJcblx0Ly8gXHRcdFx0XHQxLjBcclxuXHQvLyBcdFx0KTtcclxuXHJcblx0Ly8gXHRcdGNvbnN0IHF1YXQgPSBmcm9tUm90YXRpb25NYXRyaXhRdWF0O1xyXG5cdC8vIFx0XHRxdWF0W2ldID0gMC41ICogcm9vdDtcclxuXHQvLyBcdFx0cm9vdCA9IDAuNSAvIHJvb3Q7XHJcblx0Ly8gXHRcdHcgPSAobWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KGssIGopXSAtIG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChqLCBrKV0pICogcm9vdDtcclxuXHQvLyBcdFx0cXVhdFtqXSA9IChtYXRyaXhbTWF0cml4My5nZXRFbGVtZW50SW5kZXgoaiwgaSldICsgbWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KGksIGopXSkgKiByb290O1xyXG5cdC8vIFx0XHRxdWF0W2tdID0gKG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChrLCBpKV0gKyBtYXRyaXhbTWF0cml4My5nZXRFbGVtZW50SW5kZXgoaSwgayldKSAqIHJvb3Q7XHJcblxyXG5cdC8vIFx0XHR4ID0gLXF1YXRbMF07XHJcblx0Ly8gXHRcdHkgPSAtcXVhdFsxXTtcclxuXHQvLyBcdFx0eiA9IC1xdWF0WzJdO1xyXG5cdC8vIFx0fVxyXG5cclxuXHQvLyBcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0Ly8gXHRcdHJldHVybiBuZXcgUXVhdGVybmlvbih4LCB5LCB6LCB3KTtcclxuXHQvLyBcdH1cclxuXHQvLyBcdHJlc3VsdC54ID0geDtcclxuXHQvLyBcdHJlc3VsdC55ID0geTtcclxuXHQvLyBcdHJlc3VsdC56ID0gejtcclxuXHQvLyBcdHJlc3VsdC53ID0gdztcclxuXHQvLyBcdHJldHVybiByZXN1bHQ7XHJcblx0Ly8gfVxyXG5cclxuXHRzdGF0aWMgY2xvbmUocXVhdGVybmlvbjogUXVhdGVybmlvbiwgcmVzdWx0OiBRdWF0ZXJuaW9uKTogUXVhdGVybmlvbiB7XHJcblx0XHRpZiAoIWRlZmluZWQocXVhdGVybmlvbikpIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQueCA9IHF1YXRlcm5pb24ueDtcclxuXHRcdHJlc3VsdC55ID0gcXVhdGVybmlvbi55O1xyXG5cdFx0cmVzdWx0LnogPSBxdWF0ZXJuaW9uLno7XHJcblx0XHRyZXN1bHQudyA9IHF1YXRlcm5pb24udztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY29uanVnYXRlKHF1YXRlcm5pb246IFF1YXRlcm5pb24sIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0cmVzdWx0LnggPSAtcXVhdGVybmlvbi54O1xyXG5cdFx0cmVzdWx0LnkgPSAtcXVhdGVybmlvbi55O1xyXG5cdFx0cmVzdWx0LnogPSAtcXVhdGVybmlvbi56O1xyXG5cdFx0cmVzdWx0LncgPSBxdWF0ZXJuaW9uLnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1hZ25pdHVkZVNxdWFyZWQocXVhdGVybmlvbjogUXVhdGVybmlvbik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRxdWF0ZXJuaW9uLnggKiBxdWF0ZXJuaW9uLnggK1xyXG5cdFx0XHRxdWF0ZXJuaW9uLnkgKiBxdWF0ZXJuaW9uLnkgK1xyXG5cdFx0XHRxdWF0ZXJuaW9uLnogKiBxdWF0ZXJuaW9uLnogK1xyXG5cdFx0XHRxdWF0ZXJuaW9uLncgKiBxdWF0ZXJuaW9uLndcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWFnbml0dWRlKHF1YXRlcm5pb246IFF1YXRlcm5pb24pOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIE1hdGguc3FydChRdWF0ZXJuaW9uLm1hZ25pdHVkZVNxdWFyZWQocXVhdGVybmlvbikpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG5vcm1hbGl6ZShxdWF0ZXJuaW9uOiBRdWF0ZXJuaW9uLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHRcdGNvbnN0IGludmVyc2VNYWduaXR1ZGUgPSAxLjAgLyBRdWF0ZXJuaW9uLm1hZ25pdHVkZShxdWF0ZXJuaW9uKTtcclxuXHRcdGNvbnN0IHggPSBxdWF0ZXJuaW9uLnggKiBpbnZlcnNlTWFnbml0dWRlO1xyXG5cdFx0Y29uc3QgeSA9IHF1YXRlcm5pb24ueSAqIGludmVyc2VNYWduaXR1ZGU7XHJcblx0XHRjb25zdCB6ID0gcXVhdGVybmlvbi56ICogaW52ZXJzZU1hZ25pdHVkZTtcclxuXHRcdGNvbnN0IHcgPSBxdWF0ZXJuaW9uLncgKiBpbnZlcnNlTWFnbml0dWRlO1xyXG5cclxuXHRcdHJlc3VsdC54ID0geDtcclxuXHRcdHJlc3VsdC55ID0geTtcclxuXHRcdHJlc3VsdC56ID0gejtcclxuXHRcdHJlc3VsdC53ID0gdztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgaW52ZXJzZShxdWF0ZXJuaW9uOiBRdWF0ZXJuaW9uLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHRcdGNvbnN0IG1hZ25pdHVkZVNxdWFyZWQgPSBRdWF0ZXJuaW9uLm1hZ25pdHVkZVNxdWFyZWQocXVhdGVybmlvbik7XHJcblx0XHRyZXN1bHQgPSBRdWF0ZXJuaW9uLmNvbmp1Z2F0ZShxdWF0ZXJuaW9uLCByZXN1bHQpO1xyXG5cdFx0cmV0dXJuIFF1YXRlcm5pb24ubXVsdGlwbHlCeVNjYWxhcihyZXN1bHQsIDEuMCAvIG1hZ25pdHVkZVNxdWFyZWQsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYWRkKGxlZnQ6IFF1YXRlcm5pb24sIHJpZ2h0OiBRdWF0ZXJuaW9uLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHRcdHJlc3VsdC54ID0gbGVmdC54ICsgcmlnaHQueDtcclxuXHRcdHJlc3VsdC55ID0gbGVmdC55ICsgcmlnaHQueTtcclxuXHRcdHJlc3VsdC56ID0gbGVmdC56ICsgcmlnaHQuejtcclxuXHRcdHJlc3VsdC53ID0gbGVmdC53ICsgcmlnaHQudztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc3VidHJhY3QobGVmdDogUXVhdGVybmlvbiwgcmlnaHQ6IFF1YXRlcm5pb24sIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0cmVzdWx0LnggPSBsZWZ0LnggLSByaWdodC54O1xyXG5cdFx0cmVzdWx0LnkgPSBsZWZ0LnkgLSByaWdodC55O1xyXG5cdFx0cmVzdWx0LnogPSBsZWZ0LnogLSByaWdodC56O1xyXG5cdFx0cmVzdWx0LncgPSBsZWZ0LncgLSByaWdodC53O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBuZWdhdGUocXVhdGVybmlvbjogUXVhdGVybmlvbiwgcmVzdWx0OiBRdWF0ZXJuaW9uKTogUXVhdGVybmlvbiB7XHJcblx0XHRyZXN1bHQueCA9IC1xdWF0ZXJuaW9uLng7XHJcblx0XHRyZXN1bHQueSA9IC1xdWF0ZXJuaW9uLnk7XHJcblx0XHRyZXN1bHQueiA9IC1xdWF0ZXJuaW9uLno7XHJcblx0XHRyZXN1bHQudyA9IC1xdWF0ZXJuaW9uLnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRvdChsZWZ0OiBRdWF0ZXJuaW9uLCByaWdodDogUXVhdGVybmlvbik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gbGVmdC54ICogcmlnaHQueCArIGxlZnQueSAqIHJpZ2h0LnkgKyBsZWZ0LnogKiByaWdodC56ICsgbGVmdC53ICogcmlnaHQudztcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseShsZWZ0OiBRdWF0ZXJuaW9uLCByaWdodDogUXVhdGVybmlvbiwgcmVzdWx0OiBRdWF0ZXJuaW9uKTogUXVhdGVybmlvbiB7XHJcblx0XHRjb25zdCBsZWZ0WCA9IGxlZnQueDtcclxuXHRcdGNvbnN0IGxlZnRZID0gbGVmdC55O1xyXG5cdFx0Y29uc3QgbGVmdFogPSBsZWZ0Lno7XHJcblx0XHRjb25zdCBsZWZ0VyA9IGxlZnQudztcclxuXHJcblx0XHRjb25zdCByaWdodFggPSByaWdodC54O1xyXG5cdFx0Y29uc3QgcmlnaHRZID0gcmlnaHQueTtcclxuXHRcdGNvbnN0IHJpZ2h0WiA9IHJpZ2h0Lno7XHJcblx0XHRjb25zdCByaWdodFcgPSByaWdodC53O1xyXG5cclxuXHRcdGNvbnN0IHggPSBsZWZ0VyAqIHJpZ2h0WCArIGxlZnRYICogcmlnaHRXICsgbGVmdFkgKiByaWdodFogLSBsZWZ0WiAqIHJpZ2h0WTtcclxuXHRcdGNvbnN0IHkgPSBsZWZ0VyAqIHJpZ2h0WSAtIGxlZnRYICogcmlnaHRaICsgbGVmdFkgKiByaWdodFcgKyBsZWZ0WiAqIHJpZ2h0WDtcclxuXHRcdGNvbnN0IHogPSBsZWZ0VyAqIHJpZ2h0WiArIGxlZnRYICogcmlnaHRZIC0gbGVmdFkgKiByaWdodFggKyBsZWZ0WiAqIHJpZ2h0VztcclxuXHRcdGNvbnN0IHcgPSBsZWZ0VyAqIHJpZ2h0VyAtIGxlZnRYICogcmlnaHRYIC0gbGVmdFkgKiByaWdodFkgLSBsZWZ0WiAqIHJpZ2h0WjtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXN1bHQudyA9IHc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlTY2FsYXIocXVhdGVybmlvbjogUXVhdGVybmlvbiwgc2NhbGFyOiBudW1iZXIsIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0cmVzdWx0LnggPSBxdWF0ZXJuaW9uLnggKiBzY2FsYXI7XHJcblx0XHRyZXN1bHQueSA9IHF1YXRlcm5pb24ueSAqIHNjYWxhcjtcclxuXHRcdHJlc3VsdC56ID0gcXVhdGVybmlvbi56ICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0LncgPSBxdWF0ZXJuaW9uLncgKiBzY2FsYXI7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRpdmlkZUJ5U2NhbGFyKHF1YXRlcm5pb246IFF1YXRlcm5pb24sIHNjYWxhcjogbnVtYmVyLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHRcdHJlc3VsdC54ID0gcXVhdGVybmlvbi54IC8gc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnkgPSBxdWF0ZXJuaW9uLnkgLyBzY2FsYXI7XHJcblx0XHRyZXN1bHQueiA9IHF1YXRlcm5pb24ueiAvIHNjYWxhcjtcclxuXHRcdHJlc3VsdC53ID0gcXVhdGVybmlvbi53IC8gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjb21wdXRlQXhpcyhxdWF0ZXJuaW9uOiBRdWF0ZXJuaW9uLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IHcgPSBxdWF0ZXJuaW9uLnc7XHJcblx0XHRpZiAoTWF0aC5hYnModyAtIDEuMCkgPCBHTWF0aC5FUFNJTE9ONikge1xyXG5cdFx0XHRyZXN1bHQueCA9IHJlc3VsdC55ID0gcmVzdWx0LnogPSAwO1xyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHNjYWxhciA9IDEuMCAvIE1hdGguc3FydCgxLjAgLSB3ICogdyk7XHJcblxyXG5cdFx0cmVzdWx0LnggPSBxdWF0ZXJuaW9uLnggKiBzY2FsYXI7XHJcblx0XHRyZXN1bHQueSA9IHF1YXRlcm5pb24ueSAqIHNjYWxhcjtcclxuXHRcdHJlc3VsdC56ID0gcXVhdGVybmlvbi56ICogc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjb21wdXRlQW5nbGUocXVhdGVybmlvbjogUXVhdGVybmlvbik6IG51bWJlciB7XHJcblx0XHRpZiAoTWF0aC5hYnMocXVhdGVybmlvbi53IC0gMS4wKSA8IEdNYXRoLkVQU0lMT042KSB7XHJcblx0XHRcdHJldHVybiAwLjA7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gMi4wICogTWF0aC5hY29zKHF1YXRlcm5pb24udyk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbGVycChzdGFydDogUXVhdGVybmlvbiwgZW5kOiBRdWF0ZXJuaW9uLCB0OiBudW1iZXIsIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0bGVycFNjcmF0Y2ggPSBRdWF0ZXJuaW9uLm11bHRpcGx5QnlTY2FsYXIoZW5kLCB0LCBsZXJwU2NyYXRjaCk7XHJcblx0XHRyZXN1bHQgPSBRdWF0ZXJuaW9uLm11bHRpcGx5QnlTY2FsYXIoc3RhcnQsIDEuMCAtIHQsIHJlc3VsdCk7XHJcblx0XHRyZXR1cm4gUXVhdGVybmlvbi5hZGQobGVycFNjcmF0Y2gsIHJlc3VsdCwgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzbGVycChzdGFydDogUXVhdGVybmlvbiwgZW5kOiBRdWF0ZXJuaW9uLCB0OiBudW1iZXIsIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0bGV0IGRvdCA9IFF1YXRlcm5pb24uZG90KHN0YXJ0LCBlbmQpO1xyXG5cclxuXHRcdC8vIFRoZSBhbmdsZSBiZXR3ZWVuIHN0YXJ0IG11c3QgYmUgYWN1dGUuIFNpbmNlIHEgYW5kIC1xIHJlcHJlc2VudFxyXG5cdFx0Ly8gdGhlIHNhbWUgcm90YXRpb24sIG5lZ2F0ZSBxIHRvIGdldCB0aGUgYWN1dGUgYW5nbGUuXHJcblx0XHRsZXQgciA9IGVuZDtcclxuXHRcdGlmIChkb3QgPCAwLjApIHtcclxuXHRcdFx0ZG90ID0gLWRvdDtcclxuXHRcdFx0ciA9IHNsZXJwRW5kTmVnYXRlZCA9IFF1YXRlcm5pb24ubmVnYXRlKGVuZCwgc2xlcnBFbmROZWdhdGVkKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBkb3QgPiAwLCBhcyB0aGUgZG90IHByb2R1Y3QgYXBwcm9hY2hlcyAxLCB0aGUgYW5nbGUgYmV0d2VlbiB0aGVcclxuXHRcdC8vIHF1YXRlcm5pb25zIHZhbmlzaGVzLiB1c2UgbGluZWFyIGludGVycG9sYXRpb24uXHJcblx0XHRpZiAoMS4wIC0gZG90IDwgR01hdGguRVBTSUxPTjYpIHtcclxuXHRcdFx0cmV0dXJuIFF1YXRlcm5pb24ubGVycChzdGFydCwgciwgdCwgcmVzdWx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCB0aGV0YSA9IE1hdGguYWNvcyhkb3QpO1xyXG5cdFx0c2xlcnBTY2FsZWRQID0gUXVhdGVybmlvbi5tdWx0aXBseUJ5U2NhbGFyKHN0YXJ0LCBNYXRoLnNpbigoMSAtIHQpICogdGhldGEpLCBzbGVycFNjYWxlZFApO1xyXG5cdFx0c2xlcnBTY2FsZWRSID0gUXVhdGVybmlvbi5tdWx0aXBseUJ5U2NhbGFyKHIsIE1hdGguc2luKHQgKiB0aGV0YSksIHNsZXJwU2NhbGVkUik7XHJcblx0XHRyZXN1bHQgPSBRdWF0ZXJuaW9uLmFkZChzbGVycFNjYWxlZFAsIHNsZXJwU2NhbGVkUiwgcmVzdWx0KTtcclxuXHRcdHJldHVybiBRdWF0ZXJuaW9uLm11bHRpcGx5QnlTY2FsYXIocmVzdWx0LCAxLjAgLyBNYXRoLnNpbih0aGV0YSksIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc3F1YWQoXHJcblx0XHRxMDogUXVhdGVybmlvbixcclxuXHRcdHExOiBRdWF0ZXJuaW9uLFxyXG5cdFx0czA6IFF1YXRlcm5pb24sXHJcblx0XHRzMTogUXVhdGVybmlvbixcclxuXHRcdHQ6IG51bWJlcixcclxuXHRcdHJlc3VsdDogUXVhdGVybmlvblxyXG5cdCk6IFF1YXRlcm5pb24ge1xyXG5cdFx0Y29uc3Qgc2xlcnAwID0gUXVhdGVybmlvbi5zbGVycChxMCwgcTEsIHQsIHNxdWFkU2NyYXRjaFF1YXRlcm5pb24wKTtcclxuXHRcdGNvbnN0IHNsZXJwMSA9IFF1YXRlcm5pb24uc2xlcnAoczAsIHMxLCB0LCBzcXVhZFNjcmF0Y2hRdWF0ZXJuaW9uMSk7XHJcblx0XHRyZXR1cm4gUXVhdGVybmlvbi5zbGVycChzbGVycDAsIHNsZXJwMSwgMi4wICogdCAqICgxLjAgLSB0KSwgcmVzdWx0KTtcclxuXHR9XHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBRdWF0ZXJuaW9uLCByaWdodDogUXVhdGVybmlvbik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdGxlZnQueCA9PT0gcmlnaHQueCAmJlxyXG5cdFx0XHRcdGxlZnQueSA9PT0gcmlnaHQueSAmJlxyXG5cdFx0XHRcdGxlZnQueiA9PT0gcmlnaHQueiAmJlxyXG5cdFx0XHRcdGxlZnQudyA9PT0gcmlnaHQudylcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZXF1YWxzRXBzaWxvbihsZWZ0OiBRdWF0ZXJuaW9uLCByaWdodDogUXVhdGVybmlvbiwgZXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdGVwc2lsb24gPSBkZWZhdWx0VmFsdWUoZXBzaWxvbiwgMCk7XHJcblxyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnQueCAtIHJpZ2h0LngpIDw9IGVwc2lsb24gJiZcclxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0LnkgLSByaWdodC55KSA8PSBlcHNpbG9uICYmXHJcblx0XHRcdFx0TWF0aC5hYnMobGVmdC56IC0gcmlnaHQueikgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnQudyAtIHJpZ2h0LncpIDw9IGVwc2lsb24pXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGV4cChjYXJ0ZXNpYW46IFZlY3RvcjMsIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0Y29uc3QgdGhldGEgPSBWZWN0b3IzLm1hZ25pdHVkZShjYXJ0ZXNpYW4pO1xyXG5cdFx0bGV0IHNpblRoZXRhT3ZlclRoZXRhID0gMC4wO1xyXG5cclxuXHRcdGlmICh0aGV0YSAhPT0gMC4wKSB7XHJcblx0XHRcdHNpblRoZXRhT3ZlclRoZXRhID0gTWF0aC5zaW4odGhldGEpIC8gdGhldGE7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0LnggPSBjYXJ0ZXNpYW4ueCAqIHNpblRoZXRhT3ZlclRoZXRhO1xyXG5cdFx0cmVzdWx0LnkgPSBjYXJ0ZXNpYW4ueSAqIHNpblRoZXRhT3ZlclRoZXRhO1xyXG5cdFx0cmVzdWx0LnogPSBjYXJ0ZXNpYW4ueiAqIHNpblRoZXRhT3ZlclRoZXRhO1xyXG5cdFx0cmVzdWx0LncgPSBNYXRoLmNvcyh0aGV0YSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcbn1cclxuXHJcbmxldCBmcm9tQXhpc0FuZ2xlU2NyYXRjaCA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG5jb25zdCBmcm9tUm90YXRpb25NYXRyaXhOZXh0ID0gWzEsIDIsIDBdO1xyXG5jb25zdCBmcm9tUm90YXRpb25NYXRyaXhRdWF0ID0gbmV3IEFycmF5KDMpO1xyXG5cclxubGV0IGxlcnBTY3JhdGNoID0gbmV3IFF1YXRlcm5pb24oKTtcclxuXHJcbmxldCBzbGVycEVuZE5lZ2F0ZWQgPSBuZXcgUXVhdGVybmlvbigpO1xyXG5sZXQgc2xlcnBTY2FsZWRQID0gbmV3IFF1YXRlcm5pb24oKTtcclxubGV0IHNsZXJwU2NhbGVkUiA9IG5ldyBRdWF0ZXJuaW9uKCk7XHJcblxyXG5jb25zdCBzcXVhZFNjcmF0Y2hDYXJ0ZXNpYW4wID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3Qgc3F1YWRTY3JhdGNoQ2FydGVzaWFuMSA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHNxdWFkU2NyYXRjaFF1YXRlcm5pb24wID0gbmV3IFF1YXRlcm5pb24oKTtcclxuY29uc3Qgc3F1YWRTY3JhdGNoUXVhdGVybmlvbjEgPSBuZXcgUXVhdGVybmlvbigpO1xyXG4iLCJpbXBvcnQgTWF0cml4NCBmcm9tIFwiLi4vbWF0aC9NYXRyaXg0XCI7XG5pbXBvcnQgeyBRdWF0ZXJuaW9uIH0gZnJvbSBcIi4uL21hdGgvUXVhdGVybmlvblwiO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xuaW1wb3J0IElDbG9uZSBmcm9tIFwiLi9JQ2xvbmVcIjtcbmltcG9ydCB7IFJlbmRlck9iamVjdFR5cGUgfSBmcm9tIFwiLi9XZWJHUFVUeXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZW5kZXJPYmplY3QgaW1wbGVtZW50cyBJQ2xvbmUge1xuXHRwdWJsaWMgdXA6IFZlY3RvcjM7XG5cdHByb3RlY3RlZCBfcG9zaXRpb246IFZlY3RvcjM7XG5cdHByb3RlY3RlZCBfc2NhbGU6IFZlY3RvcjM7XG5cdHByb3RlY3RlZCBfcXVhdGVybmlvbjogUXVhdGVybmlvbjtcblx0cHJvdGVjdGVkIF90YXJnZXQ6IFZlY3RvcjM7XG5cdHByaXZhdGUgX25vcm1hbE1hdHJpeDogTWF0cml4NDtcblx0bW9kZWxNYXRyaXg6IE1hdHJpeDQ7XG5cdHBhcmVudDogUmVuZGVyT2JqZWN0O1xuXHR0eXBlOiBSZW5kZXJPYmplY3RUeXBlO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuX3Bvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcblx0XHR0aGlzLl9zY2FsZSA9IG5ldyBWZWN0b3IzKDEsIDEsIDEpO1xuXHRcdHRoaXMuX3F1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpO1xuXHRcdHRoaXMubW9kZWxNYXRyaXggPSBNYXRyaXg0LmNsb25lKE1hdHJpeDQuSURFTlRJVFksIG5ldyBNYXRyaXg0KCkpO1xuXHRcdHRoaXMuX25vcm1hbE1hdHJpeCA9IE1hdHJpeDQuY2xvbmUoTWF0cml4NC5JREVOVElUWSwgbmV3IE1hdHJpeDQoKSk7XG5cdFx0dGhpcy51cCA9IG5ldyBWZWN0b3IzKDAsIDEsIDApO1xuXHRcdHRoaXMuX3RhcmdldCA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xuXHR9XG5cdHB1YmxpYyBnZXQgbm9ybWFsTWF0cml4KCk6IE1hdHJpeDQge1xuXHRcdHJldHVybiB0aGlzLl9ub3JtYWxNYXRyaXg7XG5cdH1cblxuXHRwdWJsaWMgZ2V0IHBvc2l0aW9uKCk6IFZlY3RvcjMge1xuXHRcdHJldHVybiB0aGlzLl9wb3NpdGlvbjtcblx0fVxuXHRwdWJsaWMgZ2V0IHNjYWxlKCk6IFZlY3RvcjMge1xuXHRcdHJldHVybiB0aGlzLl9zY2FsZTtcblx0fVxuXHRwdWJsaWMgZ2V0IHF1YXRlcm5pb24oKTogUXVhdGVybmlvbiB7XG5cdFx0cmV0dXJuIHRoaXMuX3F1YXRlcm5pb247XG5cdH1cblx0cHJpdmF0ZSB1cGRhdGVOb3JtYWxNYXRyaXgoKSB7XG5cdFx0TWF0cml4NC5pbnZlcnNlKHRoaXMubW9kZWxNYXRyaXgsIHRoaXMuX25vcm1hbE1hdHJpeCk7XG5cdFx0TWF0cml4NC50cmFuc3Bvc2UodGhpcy5fbm9ybWFsTWF0cml4LCB0aGlzLl9ub3JtYWxNYXRyaXgpO1xuXHR9XG5cdHVwZGF0ZU1hdHJpeChtYXRyaXg/OiBNYXRyaXg0KSB7XG5cdFx0dGhpcy5tb2RlbE1hdHJpeC5jb21wb3NlKHRoaXMucG9zaXRpb24sIHRoaXMucXVhdGVybmlvbiwgdGhpcy5zY2FsZSk7XG5cdFx0aWYgKG1hdHJpeCkgTWF0cml4NC5tdWx0aXBseShtYXRyaXgsIHRoaXMubW9kZWxNYXRyaXgsIHRoaXMubW9kZWxNYXRyaXgpO1xuXHRcdHRoaXMudXBkYXRlTm9ybWFsTWF0cml4KCk7XG5cdH1cblx0bG9va0F0KHgsIHksIHopIHtcblx0XHR0aGlzLl90YXJnZXQuc2V0KHgsIHksIHopO1xuXHRcdGlmICh0aGlzLnR5cGUgPT0gUmVuZGVyT2JqZWN0VHlwZS5DYW1lcmEgfHwgdGhpcy50eXBlID09IFJlbmRlck9iamVjdFR5cGUuTGlnaHQpIHtcblx0XHRcdF9tMS5sb29rQXQodGhpcy5wb3NpdGlvbiwgdGhpcy5fdGFyZ2V0LCB0aGlzLnVwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0X20xLmxvb2tBdCh0aGlzLl90YXJnZXQsIHRoaXMucG9zaXRpb24sIHRoaXMudXApO1xuXHRcdH1cblx0XHR0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KF9tMSk7XG5cdH1cblx0cm90YXRlT25BeGlzKGF4aXMsIGFuZ2xlKSB7XG5cdFx0Y29uc3QgcXVhdCA9IFF1YXRlcm5pb24uZnJvbUF4aXNBbmdsZShheGlzLCBhbmdsZSk7XG5cdFx0UXVhdGVybmlvbi5tdWx0aXBseSh0aGlzLnF1YXRlcm5pb24sIHF1YXQsIHRoaXMucXVhdGVybmlvbik7XG5cdH1cblx0cm90YXRlWChhbmdsZSkge1xuXHRcdHJldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhfeEF4aXMsIGFuZ2xlKTtcblx0fVxuXHRyb3RhdGVZKGFuZ2xlKSB7XG5cdFx0cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKF95QXhpcywgYW5nbGUpO1xuXHR9XG5cdHJvdGF0ZVooYW5nbGUpIHtcblx0XHRyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoX3pBeGlzLCBhbmdsZSk7XG5cdH1cbn1cbmNvbnN0IF94QXhpcyA9IG5ldyBWZWN0b3IzKDEsIDAsIDApO1xuY29uc3QgX3lBeGlzID0gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XG5jb25zdCBfekF4aXMgPSBuZXcgVmVjdG9yMygwLCAwLCAxKTtcbmNvbnN0IF9tMSA9IG5ldyBNYXRyaXg0KCk7XG4iLCJpbXBvcnQgUmVuZGVyT2JqZWN0IGZyb20gXCIuLi9jb3JlL1JlbmRlck9iamVjdFwiO1xyXG5pbXBvcnQgeyBMaWdodFR5cGUsIFJlbmRlck9iamVjdFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XHJcbmltcG9ydCB7IEJhc2VTaGFkb3cgfSBmcm9tIFwiLi9zaGFkb3dzL0Jhc2VTaGFkb3dcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBMaWdodCBleHRlbmRzIFJlbmRlck9iamVjdCB7XHJcblx0cHJpdmF0ZSBfY29sb3I6IFZlY3RvcjM7XHJcblx0dHlwZTogUmVuZGVyT2JqZWN0VHlwZTtcclxuXHRwcml2YXRlIF9pbnRlbnNpdHk6IG51bWJlcjtcclxuXHRkaXJ0eTogYm9vbGVhbjtcclxuXHRjb2xvckRpcnR5OiBib29sZWFuO1xyXG5cdHNoYWRvd0RpcnR5OiBib29sZWFuO1xyXG5cdGludGVuc2l0eURpcnR5OiBib29sZWFuO1xyXG5cdHBvc2l0aW9uRGlydHk6IGJvb2xlYW47XHJcblx0cHVibGljIF9zaGFkb3c6IEJhc2VTaGFkb3c7XHJcblx0cHVibGljIHRhcmdldERpcnR5OiBib29sZWFuO1xyXG5cdHB1YmxpYyBsaWdodFR5cGU6IExpZ2h0VHlwZTtcclxuXHJcblx0Y29uc3RydWN0b3IoY29sb3I6IFZlY3RvcjMsIGludGVuc2l0eTogbnVtYmVyKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0dGhpcy50eXBlID0gUmVuZGVyT2JqZWN0VHlwZS5MaWdodDtcclxuXHRcdHRoaXMuX2NvbG9yID0gVmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGNvbG9yLCBpbnRlbnNpdHksIG5ldyBWZWN0b3IzKCkpO1xyXG5cdFx0dGhpcy5faW50ZW5zaXR5ID0gaW50ZW5zaXR5O1xyXG5cdFx0dGhpcy5fcG9zaXRpb24gPSBuZXcgVmVjdG9yMygwLCAxLCAwKTtcclxuXHRcdHRoaXMuX3RhcmdldCA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHR0aGlzLnBvc2l0aW9uRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy50YXJnZXREaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmNvbG9yRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5zaGFkb3dEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmludGVuc2l0eURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX3NoYWRvdyA9IG51bGw7XHJcblx0fVxyXG5cclxuXHRnZXQgcG9zaXRpb24oKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fcG9zaXRpb247XHJcblx0fVxyXG5cclxuXHRzZXQgcG9zaXRpb24odmFsdWUpIHtcclxuXHRcdHRoaXMucG9zaXRpb25EaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9wb3NpdGlvbiA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Z2V0IHRhcmdldCgpIHtcclxuXHRcdHJldHVybiB0aGlzLl90YXJnZXQ7XHJcblx0fVxyXG5cclxuXHRzZXQgdGFyZ2V0KHZhbHVlKSB7XHJcblx0XHR0aGlzLnRhcmdldERpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX3RhcmdldCA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Z2V0IGNvbG9yKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2NvbG9yO1xyXG5cdH1cclxuXHJcblx0c2V0IGNvbG9yKHZhbHVlKSB7XHJcblx0XHR0aGlzLmNvbG9yRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fY29sb3IgPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdHNldCBpbnRlbnNpdHkodmFsdWUpIHtcclxuXHRcdHRoaXMuY29sb3IgPSBWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIodGhpcy5jb2xvciwgdmFsdWUsIG5ldyBWZWN0b3IzKCkpO1xyXG5cdFx0dGhpcy5pbnRlbnNpdHlEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9pbnRlbnNpdHkgPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGdldCBpbnRlbnNpdHkoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5faW50ZW5zaXR5O1xyXG5cdH1cclxuXHJcblx0Z2V0IHNoYWRvdygpIHtcclxuXHRcdHJldHVybiB0aGlzLl9zaGFkb3c7XHJcblx0fVxyXG5cclxuXHRzZXQgc2hhZG93KHZhbHVlKSB7XHJcblx0XHR0aGlzLnNoYWRvd0RpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX3NoYWRvdyA9IHZhbHVlO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IEdNYXRoIGZyb20gXCIuL01hdGhcIjtcclxuLy8gI3JnYmFcclxuY29uc3QgcmdiYU1hdGNoZXIgPSAvXiMoWzAtOWEtZl0pKFswLTlhLWZdKShbMC05YS1mXSkoWzAtOWEtZl0pPyQvaTtcclxuLy8gI3JyZ2diYmFhXHJcbmNvbnN0IHJyZ2diYmFhTWF0Y2hlciA9IC9eIyhbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSk/JC9pO1xyXG4vLyByZ2IoKSwgcmdiYSgpLCBvciByZ2IlKClcclxuY29uc3QgcmdiUGFyZW50aGVzZXNNYXRjaGVyID0gL15yZ2JhP1xcKFxccyooWzAtOS5dKyU/KVxccyosXFxzKihbMC05Ll0rJT8pXFxzKixcXHMqKFswLTkuXSslPykoPzpcXHMqLFxccyooWzAtOS5dKykpP1xccypcXCkkL2k7XHJcbi8vIGhzbCgpIG9yIGhzbGEoKVxyXG5jb25zdCBoc2xQYXJlbnRoZXNlc01hdGNoZXIgPSAvXmhzbGE/XFwoXFxzKihbMC05Ll0rKVxccyosXFxzKihbMC05Ll0rJSlcXHMqLFxccyooWzAtOS5dKyUpKD86XFxzKixcXHMqKFswLTkuXSspKT9cXHMqXFwpJC9pO1xyXG5mdW5jdGlvbiBodWUycmdiKG0xLCBtMiwgaCkge1xyXG5cdGlmIChoIDwgMCkge1xyXG5cdFx0aCArPSAxO1xyXG5cdH1cclxuXHRpZiAoaCA+IDEpIHtcclxuXHRcdGggLT0gMTtcclxuXHR9XHJcblx0aWYgKGggKiA2IDwgMSkge1xyXG5cdFx0cmV0dXJuIG0xICsgKG0yIC0gbTEpICogNiAqIGg7XHJcblx0fVxyXG5cdGlmIChoICogMiA8IDEpIHtcclxuXHRcdHJldHVybiBtMjtcclxuXHR9XHJcblx0aWYgKGggKiAzIDwgMikge1xyXG5cdFx0cmV0dXJuIG0xICsgKG0yIC0gbTEpICogKDIgLyAzIC0gaCkgKiA2O1xyXG5cdH1cclxuXHRyZXR1cm4gbTE7XHJcbn1cclxuXHJcbmNsYXNzIENvbG9yIHtcclxuXHRncmVlbjogbnVtYmVyO1xyXG5cdHJlZDogbnVtYmVyO1xyXG5cdGJsdWU6IG51bWJlcjtcclxuXHRjb25zdHJ1Y3RvcihyZWQgPSAxLjAsIGdyZWVuID0gMS4wLCBibHVlID0gMS4wKSB7XHJcblx0XHQvKipcclxuXHRcdCAqIFRoZSByZWQgY29tcG9uZW50LlxyXG5cdFx0ICogQHR5cGUge051bWJlcn1cclxuXHRcdCAqIEBkZWZhdWx0IDEuMFxyXG5cdFx0ICovXHJcblx0XHR0aGlzLnJlZCA9IHJlZDtcclxuXHRcdC8qKlxyXG5cdFx0ICogVGhlIGdyZWVuIGNvbXBvbmVudC5cclxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XHJcblx0XHQgKiBAZGVmYXVsdCAxLjBcclxuXHRcdCAqL1xyXG5cdFx0dGhpcy5ncmVlbiA9IGdyZWVuO1xyXG5cdFx0LyoqXHJcblx0XHQgKiBUaGUgYmx1ZSBjb21wb25lbnQuXHJcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxyXG5cdFx0ICogQGRlZmF1bHQgMS4wXHJcblx0XHQgKi9cclxuXHRcdHRoaXMuYmx1ZSA9IGJsdWU7XHJcblx0fVxyXG5cdHNldCh2YWx1ZTogc3RyaW5nKTogQ29sb3Ige1xyXG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xyXG5cdFx0XHRDb2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodmFsdWUsIHRoaXMpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdHRvQXJyYXkoKTogbnVtYmVyW10ge1xyXG5cdFx0cmV0dXJuIFt0aGlzLnJlZCwgdGhpcy5ncmVlbiwgdGhpcy5ibHVlXTtcclxuXHR9XHJcblxyXG5cdGNsb25lKHJlc3VsdDogQ29sb3IpOiBDb2xvciB7XHJcblx0XHRyZXR1cm4gQ29sb3IuY2xvbmUodGhpcywgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdGVxdWFscyhvdGhlcjogQ29sb3IpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBDb2xvci5lcXVhbHModGhpcywgb3RoZXIpO1xyXG5cdH1cclxuXHJcblx0dG9Dc3NIZXhTdHJpbmcoKTogc3RyaW5nIHtcclxuXHRcdGxldCByID0gQ29sb3IuZmxvYXRUb0J5dGUodGhpcy5yZWQpLnRvU3RyaW5nKDE2KTtcclxuXHRcdGlmIChyLmxlbmd0aCA8IDIpIHtcclxuXHRcdFx0ciA9IGAwJHtyfWA7XHJcblx0XHR9XHJcblx0XHRsZXQgZyA9IENvbG9yLmZsb2F0VG9CeXRlKHRoaXMuZ3JlZW4pLnRvU3RyaW5nKDE2KTtcclxuXHRcdGlmIChnLmxlbmd0aCA8IDIpIHtcclxuXHRcdFx0ZyA9IGAwJHtnfWA7XHJcblx0XHR9XHJcblx0XHRsZXQgYiA9IENvbG9yLmZsb2F0VG9CeXRlKHRoaXMuYmx1ZSkudG9TdHJpbmcoMTYpO1xyXG5cdFx0aWYgKGIubGVuZ3RoIDwgMikge1xyXG5cdFx0XHRiID0gYDAke2J9YDtcclxuXHRcdH1cclxuXHRcdHJldHVybiBgIyR7cn0ke2d9JHtifWA7XHJcblx0fVxyXG5cclxuXHR0b0J5dGVzKHJlc3VsdDogbnVtYmVyW10pOiBudW1iZXJbXSB7XHJcblx0XHRjb25zdCByZWQgPSBDb2xvci5mbG9hdFRvQnl0ZSh0aGlzLnJlZCk7XHJcblx0XHRjb25zdCBncmVlbiA9IENvbG9yLmZsb2F0VG9CeXRlKHRoaXMuZ3JlZW4pO1xyXG5cdFx0Y29uc3QgYmx1ZSA9IENvbG9yLmZsb2F0VG9CeXRlKHRoaXMuYmx1ZSk7XHJcblxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIFtyZWQsIGdyZWVuLCBibHVlXTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IHJlZDtcclxuXHRcdHJlc3VsdFsxXSA9IGdyZWVuO1xyXG5cdFx0cmVzdWx0WzJdID0gYmx1ZTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbUJ5dGVzKHJlZDogbnVtYmVyLCBncmVlbjogbnVtYmVyLCBibHVlOiBudW1iZXIsIHJlc3VsdDogQ29sb3IpOiBDb2xvciB7XHJcblx0XHRyZWQgPSBDb2xvci5ieXRlVG9GbG9hdChkZWZhdWx0VmFsdWUocmVkLCAyNTUuMCkpO1xyXG5cdFx0Z3JlZW4gPSBDb2xvci5ieXRlVG9GbG9hdChkZWZhdWx0VmFsdWUoZ3JlZW4sIDI1NS4wKSk7XHJcblx0XHRibHVlID0gQ29sb3IuYnl0ZVRvRmxvYXQoZGVmYXVsdFZhbHVlKGJsdWUsIDI1NS4wKSk7XHJcblxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBDb2xvcihyZWQsIGdyZWVuLCBibHVlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQucmVkID0gcmVkO1xyXG5cdFx0cmVzdWx0LmdyZWVuID0gZ3JlZW47XHJcblx0XHRyZXN1bHQuYmx1ZSA9IGJsdWU7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Ic2woaHVlOiBudW1iZXIsIHNhdHVyYXRpb246IG51bWJlciwgbGlnaHRuZXNzOiBudW1iZXIsIHJlc3VsdDogQ29sb3IpOiBDb2xvciB7XHJcblx0XHRodWUgPSBkZWZhdWx0VmFsdWUoaHVlLCAwLjApICUgMS4wO1xyXG5cdFx0c2F0dXJhdGlvbiA9IGRlZmF1bHRWYWx1ZShzYXR1cmF0aW9uLCAwLjApO1xyXG5cdFx0bGlnaHRuZXNzID0gZGVmYXVsdFZhbHVlKGxpZ2h0bmVzcywgMC4wKTtcclxuXHRcdGxldCByZWQgPSBsaWdodG5lc3M7XHJcblx0XHRsZXQgZ3JlZW4gPSBsaWdodG5lc3M7XHJcblx0XHRsZXQgYmx1ZSA9IGxpZ2h0bmVzcztcclxuXHJcblx0XHRpZiAoc2F0dXJhdGlvbiAhPT0gMCkge1xyXG5cdFx0XHRsZXQgbTI7XHJcblx0XHRcdGlmIChsaWdodG5lc3MgPCAwLjUpIHtcclxuXHRcdFx0XHRtMiA9IGxpZ2h0bmVzcyAqICgxICsgc2F0dXJhdGlvbik7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0bTIgPSBsaWdodG5lc3MgKyBzYXR1cmF0aW9uIC0gbGlnaHRuZXNzICogc2F0dXJhdGlvbjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgbTEgPSAyLjAgKiBsaWdodG5lc3MgLSBtMjtcclxuXHRcdFx0cmVkID0gaHVlMnJnYihtMSwgbTIsIGh1ZSArIDEgLyAzKTtcclxuXHRcdFx0Z3JlZW4gPSBodWUycmdiKG0xLCBtMiwgaHVlKTtcclxuXHRcdFx0Ymx1ZSA9IGh1ZTJyZ2IobTEsIG0yLCBodWUgLSAxIC8gMyk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBDb2xvcihyZWQsIGdyZWVuLCBibHVlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQucmVkID0gcmVkO1xyXG5cdFx0cmVzdWx0LmdyZWVuID0gZ3JlZW47XHJcblx0XHRyZXN1bHQuYmx1ZSA9IGJsdWU7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ3JlYXRlcyBhIHJhbmRvbSBjb2xvciB1c2luZyB0aGUgcHJvdmlkZWQgb3B0aW9ucy4gRm9yIHJlcHJvZHVjaWJsZSByYW5kb20gY29sb3JzLCB5b3Ugc2hvdWxkXHJcblx0ICogY2FsbCB7QGxpbmsgR01hdGgjc2V0UmFuZG9tTnVtYmVyU2VlZH0gb25jZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHlvdXIgYXBwbGljYXRpb24uXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMucmVkXSBJZiBzcGVjaWZpZWQsIHRoZSByZWQgY29tcG9uZW50IHRvIHVzZSBpbnN0ZWFkIG9mIGEgcmFuZG9taXplZCB2YWx1ZS5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMubWluaW11bVJlZD0wLjBdIFRoZSBtYXhpbXVtIHJlZCB2YWx1ZSB0byBnZW5lcmF0ZSBpZiBub25lIHdhcyBzcGVjaWZpZWQuXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLm1heGltdW1SZWQ9MS4wXSBUaGUgbWluaW11bSByZWQgdmFsdWUgdG8gZ2VuZXJhdGUgaWYgbm9uZSB3YXMgc3BlY2lmaWVkLlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5ncmVlbl0gSWYgc3BlY2lmaWVkLCB0aGUgZ3JlZW4gY29tcG9uZW50IHRvIHVzZSBpbnN0ZWFkIG9mIGEgcmFuZG9taXplZCB2YWx1ZS5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMubWluaW11bUdyZWVuPTAuMF0gVGhlIG1heGltdW0gZ3JlZW4gdmFsdWUgdG8gZ2VuZXJhdGUgaWYgbm9uZSB3YXMgc3BlY2lmaWVkLlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5tYXhpbXVtR3JlZW49MS4wXSBUaGUgbWluaW11bSBncmVlbiB2YWx1ZSB0byBnZW5lcmF0ZSBpZiBub25lIHdhcyBzcGVjaWZpZWQuXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmJsdWVdIElmIHNwZWNpZmllZCwgdGhlIGJsdWUgY29tcG9uZW50IHRvIHVzZSBpbnN0ZWFkIG9mIGEgcmFuZG9taXplZCB2YWx1ZS5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMubWluaW11bUJsdWU9MC4wXSBUaGUgbWF4aW11bSBibHVlIHZhbHVlIHRvIGdlbmVyYXRlIGlmIG5vbmUgd2FzIHNwZWNpZmllZC5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMubWF4aW11bUJsdWU9MS4wXSBUaGUgbWluaW11bSBibHVlIHZhbHVlIHRvIGdlbmVyYXRlIGlmIG5vbmUgd2FzIHNwZWNpZmllZC5cclxuXHQgKiBAcGFyYW0ge0NvbG9yfSBbcmVzdWx0XSBUaGUgb2JqZWN0IHRvIHN0b3JlIHRoZSByZXN1bHQgaW4sIGlmIHVuZGVmaW5lZCBhIG5ldyBpbnN0YW5jZSB3aWxsIGJlIGNyZWF0ZWQuXHJcblx0ICogQHJldHVybnMge0NvbG9yfSBUaGUgbW9kaWZpZWQgcmVzdWx0IHBhcmFtZXRlciBvciBhIG5ldyBpbnN0YW5jZSBpZiByZXN1bHQgd2FzIHVuZGVmaW5lZC5cclxuXHQgKlxyXG5cdCAqIEBleGFtcGxlXHJcblx0ICogLy9DcmVhdGUgYSBjb21wbGV0ZWx5IHJhbmRvbSBjb2xvclxyXG5cdCAqIGNvbnN0IGNvbG9yID0gQ29sb3IuZnJvbVJhbmRvbSgpO1xyXG5cdCAqXHJcblx0ICogLy9DcmVhdGUgYSByYW5kb20gc2hhZGUgb2YgeWVsbG93LlxyXG5cdCAqIGNvbnN0IGNvbG9yMSA9IENvbG9yLmZyb21SYW5kb20oe1xyXG5cdCAqICAgICByZWQgOiAxLjAsXHJcblx0ICogICAgIGdyZWVuIDogMS4wLFxyXG5cdCAqIH0pO1xyXG5cdCAqXHJcblx0ICogLy9DcmVhdGUgYSByYW5kb20gYnJpZ2h0IGNvbG9yLlxyXG5cdCAqIGNvbnN0IGNvbG9yMiA9IENvbG9yLmZyb21SYW5kb20oe1xyXG5cdCAqICAgICBtaW5pbXVtUmVkIDogMC43NSxcclxuXHQgKiAgICAgbWluaW11bUdyZWVuIDogMC43NSxcclxuXHQgKiAgICAgbWluaW11bUJsdWUgOiAwLjc1LFxyXG5cdCAqIH0pO1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBmcm9tUmFuZG9tKG9wdGlvbnMsIHJlc3VsdDogQ29sb3IpOiBDb2xvciB7XHJcblx0XHRvcHRpb25zID0gZGVmYXVsdFZhbHVlKG9wdGlvbnMsIGRlZmF1bHRWYWx1ZS5FTVBUWV9PQkpFQ1QpO1xyXG5cclxuXHRcdGxldCByZWQgPSBvcHRpb25zLnJlZDtcclxuXHRcdGlmICghZGVmaW5lZChyZWQpKSB7XHJcblx0XHRcdGNvbnN0IG1pbmltdW1SZWQgPSBkZWZhdWx0VmFsdWUob3B0aW9ucy5taW5pbXVtUmVkLCAwKTtcclxuXHRcdFx0Y29uc3QgbWF4aW11bVJlZCA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLm1heGltdW1SZWQsIDEuMCk7XHJcblxyXG5cdFx0XHRyZWQgPSBtaW5pbXVtUmVkICsgR01hdGgubmV4dFJhbmRvbU51bWJlcigpICogKG1heGltdW1SZWQgLSBtaW5pbXVtUmVkKTtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZ3JlZW4gPSBvcHRpb25zLmdyZWVuO1xyXG5cdFx0aWYgKCFkZWZpbmVkKGdyZWVuKSkge1xyXG5cdFx0XHRjb25zdCBtaW5pbXVtR3JlZW4gPSBkZWZhdWx0VmFsdWUob3B0aW9ucy5taW5pbXVtR3JlZW4sIDApO1xyXG5cdFx0XHRjb25zdCBtYXhpbXVtR3JlZW4gPSBkZWZhdWx0VmFsdWUob3B0aW9ucy5tYXhpbXVtR3JlZW4sIDEuMCk7XHJcblxyXG5cdFx0XHRncmVlbiA9IG1pbmltdW1HcmVlbiArIEdNYXRoLm5leHRSYW5kb21OdW1iZXIoKSAqIChtYXhpbXVtR3JlZW4gLSBtaW5pbXVtR3JlZW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBibHVlID0gb3B0aW9ucy5ibHVlO1xyXG5cdFx0aWYgKCFkZWZpbmVkKGJsdWUpKSB7XHJcblx0XHRcdGNvbnN0IG1pbmltdW1CbHVlID0gZGVmYXVsdFZhbHVlKG9wdGlvbnMubWluaW11bUJsdWUsIDApO1xyXG5cdFx0XHRjb25zdCBtYXhpbXVtQmx1ZSA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLm1heGltdW1CbHVlLCAxLjApO1xyXG5cclxuXHRcdFx0Ymx1ZSA9IG1pbmltdW1CbHVlICsgR01hdGgubmV4dFJhbmRvbU51bWJlcigpICogKG1heGltdW1CbHVlIC0gbWluaW11bUJsdWUpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBDb2xvcihyZWQsIGdyZWVuLCBibHVlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQucmVkID0gcmVkO1xyXG5cdFx0cmVzdWx0LmdyZWVuID0gZ3JlZW47XHJcblx0XHRyZXN1bHQuYmx1ZSA9IGJsdWU7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Dc3NDb2xvclN0cmluZyhjb2xvcjogc3RyaW5nLCByZXN1bHQ6IENvbG9yID0gbmV3IENvbG9yKCkpOiBDb2xvciB7XHJcblx0XHQvLyBSZW1vdmUgYWxsIHdoaXRlc3BhY2VzIGZyb20gdGhlIGNvbG9yIHN0cmluZ1xyXG5cdFx0Y29sb3IgPSBjb2xvci5yZXBsYWNlKC9cXHMvZywgXCJcIik7XHJcblxyXG5cdFx0Y29uc3QgbmFtZWRDb2xvciA9IENvbG9yW2NvbG9yLnRvVXBwZXJDYXNlKCldO1xyXG5cdFx0aWYgKGRlZmluZWQobmFtZWRDb2xvcikpIHtcclxuXHRcdFx0Q29sb3IuY2xvbmUobmFtZWRDb2xvciwgcmVzdWx0KTtcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgbWF0Y2hlcyA9IHJnYmFNYXRjaGVyLmV4ZWMoY29sb3IpO1xyXG5cdFx0aWYgKG1hdGNoZXMgIT09IG51bGwpIHtcclxuXHRcdFx0cmVzdWx0LnJlZCA9IHBhcnNlSW50KG1hdGNoZXNbMV0sIDE2KSAvIDE1O1xyXG5cdFx0XHRyZXN1bHQuZ3JlZW4gPSBwYXJzZUludChtYXRjaGVzWzJdLCAxNikgLyAxNS4wO1xyXG5cdFx0XHRyZXN1bHQuYmx1ZSA9IHBhcnNlSW50KG1hdGNoZXNbM10sIDE2KSAvIDE1LjA7XHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0bWF0Y2hlcyA9IHJyZ2diYmFhTWF0Y2hlci5leGVjKGNvbG9yKTtcclxuXHRcdGlmIChtYXRjaGVzICE9PSBudWxsKSB7XHJcblx0XHRcdHJlc3VsdC5yZWQgPSBwYXJzZUludChtYXRjaGVzWzFdLCAxNikgLyAyNTUuMDtcclxuXHRcdFx0cmVzdWx0LmdyZWVuID0gcGFyc2VJbnQobWF0Y2hlc1syXSwgMTYpIC8gMjU1LjA7XHJcblx0XHRcdHJlc3VsdC5ibHVlID0gcGFyc2VJbnQobWF0Y2hlc1szXSwgMTYpIC8gMjU1LjA7XHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0bWF0Y2hlcyA9IHJnYlBhcmVudGhlc2VzTWF0Y2hlci5leGVjKGNvbG9yKTtcclxuXHRcdGlmIChtYXRjaGVzICE9PSBudWxsKSB7XHJcblx0XHRcdHJlc3VsdC5yZWQgPSBwYXJzZUZsb2F0KG1hdGNoZXNbMV0pIC8gKFwiJVwiID09PSBtYXRjaGVzWzFdLnN1YnN0cigtMSkgPyAxMDAuMCA6IDI1NS4wKTtcclxuXHRcdFx0cmVzdWx0LmdyZWVuID0gcGFyc2VGbG9hdChtYXRjaGVzWzJdKSAvIChcIiVcIiA9PT0gbWF0Y2hlc1syXS5zdWJzdHIoLTEpID8gMTAwLjAgOiAyNTUuMCk7XHJcblx0XHRcdHJlc3VsdC5ibHVlID0gcGFyc2VGbG9hdChtYXRjaGVzWzNdKSAvIChcIiVcIiA9PT0gbWF0Y2hlc1szXS5zdWJzdHIoLTEpID8gMTAwLjAgOiAyNTUuMCk7XHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0bWF0Y2hlcyA9IGhzbFBhcmVudGhlc2VzTWF0Y2hlci5leGVjKGNvbG9yKTtcclxuXHRcdGlmIChtYXRjaGVzICE9PSBudWxsKSB7XHJcblx0XHRcdHJldHVybiBDb2xvci5mcm9tSHNsKFxyXG5cdFx0XHRcdHBhcnNlRmxvYXQobWF0Y2hlc1sxXSkgLyAzNjAuMCxcclxuXHRcdFx0XHRwYXJzZUZsb2F0KG1hdGNoZXNbMl0pIC8gMTAwLjAsXHJcblx0XHRcdFx0cGFyc2VGbG9hdChtYXRjaGVzWzNdKSAvIDEwMC4wLFxyXG5cdFx0XHRcdHJlc3VsdFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdCA9IHVuZGVmaW5lZDtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYnl0ZVRvRmxvYXQodmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdmFsdWUgLyAyNTUuMDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmbG9hdFRvQnl0ZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB2YWx1ZSA9PT0gMS4wID8gMjU1LjAgOiAodmFsdWUgKiAyNTYuMCkgfCAwO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNsb25lKGNvbG9yOiBDb2xvciwgcmVzdWx0OiBDb2xvcik6IENvbG9yIHtcclxuXHRcdGlmICghZGVmaW5lZChjb2xvcikpIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgQ29sb3IoY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSk7XHJcblx0XHR9XHJcblx0XHRyZXN1bHQucmVkID0gY29sb3IucmVkO1xyXG5cdFx0cmVzdWx0LmdyZWVuID0gY29sb3IuZ3JlZW47XHJcblx0XHRyZXN1bHQuYmx1ZSA9IGNvbG9yLmJsdWU7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBDb2xvciwgcmlnaHQ6IENvbG9yKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRsZWZ0ID09PSByaWdodCB8fCAvL1xyXG5cdFx0XHQoZGVmaW5lZChsZWZ0KSAmJiAvL1xyXG5cdFx0XHRcdGRlZmluZWQocmlnaHQpICYmIC8vXHJcblx0XHRcdFx0bGVmdC5yZWQgPT09IHJpZ2h0LnJlZCAmJiAvL1xyXG5cdFx0XHRcdGxlZnQuZ3JlZW4gPT09IHJpZ2h0LmdyZWVuICYmIC8vXHJcblx0XHRcdFx0bGVmdC5ibHVlID09PSByaWdodC5ibHVlKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0c3RhdGljIGVxdWFsc0FycmF5KGNvbG9yOiBDb2xvciwgYXJyYXk6IG51bWJlcltdLCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIGNvbG9yLnJlZCA9PT0gYXJyYXlbb2Zmc2V0XSAmJiBjb2xvci5ncmVlbiA9PT0gYXJyYXlbb2Zmc2V0ICsgMV0gJiYgY29sb3IuYmx1ZSA9PT0gYXJyYXlbb2Zmc2V0ICsgMl07XHJcblx0fVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IENvbG9yO1xyXG4iLCJpbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4vVmVjdG9yMlwiO1xyXG5cclxuLyoqXHJcbiAqIEEgMngyIG1hdHJpeCwgaW5kZXhhYmxlIGFzIGEgY29sdW1uLW1ham9yIG9yZGVyIGFycmF5LlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjBSb3cwPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMCwgcm93IDAuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMVJvdzA9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAxLCByb3cgMC5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93MT0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAxLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3cxPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDEuXHJcbiAqL1xyXG5jbGFzcyBNYXRyaXgyIHtcclxuXHRjb25zdHJ1Y3Rvcihjb2x1bW4wUm93MCA9IDAsIGNvbHVtbjFSb3cwID0gMCwgY29sdW1uMFJvdzEgPSAwLCBjb2x1bW4xUm93MSA9IDApIHtcclxuXHRcdHRoaXNbMF0gPSBjb2x1bW4wUm93MDtcclxuXHRcdHRoaXNbMV0gPSBjb2x1bW4wUm93MTtcclxuXHRcdHRoaXNbMl0gPSBjb2x1bW4xUm93MDtcclxuXHRcdHRoaXNbM10gPSBjb2x1bW4xUm93MTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjbG9uZShtYXRyaXg6IE1hdHJpeDIgfCBudW1iZXJbXSwgcmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRpZiAoIWRlZmluZWQobWF0cml4KSkge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBNYXRyaXgyKG1hdHJpeFswXSwgbWF0cml4WzJdLCBtYXRyaXhbMV0sIG1hdHJpeFszXSk7XHJcblx0XHR9XHJcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF07XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV07XHJcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl07XHJcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Db2x1bW5NYWpvckFycmF5KHZhbHVlczogbnVtYmVyW10sIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0cmV0dXJuIE1hdHJpeDIuY2xvbmUodmFsdWVzLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Sb3dNYWpvckFycmF5KHZhbHVlczogbnVtYmVyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgTWF0cml4Mih2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCB2YWx1ZXNbM10pO1xyXG5cdFx0fVxyXG5cdFx0cmVzdWx0WzBdID0gdmFsdWVzWzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gdmFsdWVzWzJdO1xyXG5cdFx0cmVzdWx0WzJdID0gdmFsdWVzWzFdO1xyXG5cdFx0cmVzdWx0WzNdID0gdmFsdWVzWzNdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tU2NhbGUoc2NhbGU6IFZlY3RvcjIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBNYXRyaXgyKHNjYWxlLngsIDAuMCwgMC4wLCBzY2FsZS55KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHRbMF0gPSBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzFdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzJdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzNdID0gc2NhbGUueTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVJvdGF0aW9uKGFuZ2xlOiBudW1iZXIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0Y29uc3QgY29zQW5nbGUgPSBNYXRoLmNvcyhhbmdsZSk7XHJcblx0XHRjb25zdCBzaW5BbmdsZSA9IE1hdGguc2luKGFuZ2xlKTtcclxuXHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDIoY29zQW5nbGUsIC1zaW5BbmdsZSwgc2luQW5nbGUsIGNvc0FuZ2xlKTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IGNvc0FuZ2xlO1xyXG5cdFx0cmVzdWx0WzFdID0gc2luQW5nbGU7XHJcblx0XHRyZXN1bHRbMl0gPSAtc2luQW5nbGU7XHJcblx0XHRyZXN1bHRbM10gPSBjb3NBbmdsZTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cdHRvQXJyYXkoKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcclxuXHRcdE1hdHJpeDIudG9BcnJheSh0aGlzLCByZXN1bHQpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyB0b0FycmF5KG1hdHJpeDogTWF0cml4MiwgcmVzdWx0OiBudW1iZXJbXSk6IG51bWJlcltdIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBbbWF0cml4WzBdLCBtYXRyaXhbMV0sIG1hdHJpeFsyXSwgbWF0cml4WzNdXTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXTtcclxuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXTtcclxuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0RWxlbWVudEluZGV4KGNvbHVtbjogbnVtYmVyLCByb3c6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gY29sdW1uICogMiArIHJvdztcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRDb2x1bW4obWF0cml4OiBNYXRyaXgyLCBpbmRleDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCAqIDI7XHJcblx0XHRjb25zdCB4ID0gbWF0cml4W3N0YXJ0SW5kZXhdO1xyXG5cdFx0Y29uc3QgeSA9IG1hdHJpeFtzdGFydEluZGV4ICsgMV07XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzZXRDb2x1bW4obWF0cml4OiBNYXRyaXgyLCBpbmRleDogbnVtYmVyLCBjYXJ0ZXNpYW46IFZlY3RvcjIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0cmVzdWx0ID0gTWF0cml4Mi5jbG9uZShtYXRyaXgsIHJlc3VsdCk7XHJcblx0XHRjb25zdCBzdGFydEluZGV4ID0gaW5kZXggKiAyO1xyXG5cdFx0cmVzdWx0W3N0YXJ0SW5kZXhdID0gY2FydGVzaWFuLng7XHJcblx0XHRyZXN1bHRbc3RhcnRJbmRleCArIDFdID0gY2FydGVzaWFuLnk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldFJvdyhtYXRyaXg6IE1hdHJpeDIsIGluZGV4OiBudW1iZXIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0Y29uc3QgeCA9IG1hdHJpeFtpbmRleF07XHJcblx0XHRjb25zdCB5ID0gbWF0cml4W2luZGV4ICsgMl07XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzZXRSb3cobWF0cml4OiBNYXRyaXgyLCBpbmRleDogbnVtYmVyLCBjYXJ0ZXNpYW46IFZlY3RvcjIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0cmVzdWx0ID0gTWF0cml4Mi5jbG9uZShtYXRyaXgsIHJlc3VsdCk7XHJcblx0XHRyZXN1bHRbaW5kZXhdID0gY2FydGVzaWFuLng7XHJcblx0XHRyZXN1bHRbaW5kZXggKyAyXSA9IGNhcnRlc2lhbi55O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzZXRTY2FsZShtYXRyaXg6IE1hdHJpeDIsIHNjYWxlOiBWZWN0b3IyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nU2NhbGUgPSBNYXRyaXgyLmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoMSk7XHJcblx0XHRjb25zdCBzY2FsZVJhdGlvWCA9IHNjYWxlLnggLyBleGlzdGluZ1NjYWxlLng7XHJcblx0XHRjb25zdCBzY2FsZVJhdGlvWSA9IHNjYWxlLnkgLyBleGlzdGluZ1NjYWxlLnk7XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdICogc2NhbGVSYXRpb1g7XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsZVJhdGlvWDtcclxuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXSAqIHNjYWxlUmF0aW9ZO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdICogc2NhbGVSYXRpb1k7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRTY2FsZShtYXRyaXg6IE1hdHJpeDIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0cmVzdWx0LnggPSBWZWN0b3IyLm1hZ25pdHVkZShWZWN0b3IyLmZyb21FbGVtZW50cyhtYXRyaXhbMF0sIG1hdHJpeFsxXSwgc2NyYXRjaENvbHVtbikpO1xyXG5cdFx0cmVzdWx0LnkgPSBWZWN0b3IyLm1hZ25pdHVkZShWZWN0b3IyLmZyb21FbGVtZW50cyhtYXRyaXhbMl0sIG1hdHJpeFszXSwgc2NyYXRjaENvbHVtbikpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRNYXhpbXVtU2NhbGUobWF0cml4OiBNYXRyaXgyKTogbnVtYmVyIHtcclxuXHRcdE1hdHJpeDIuZ2V0U2NhbGUobWF0cml4LCBzY2FsZVNjcmF0Y2gzKTtcclxuXHRcdHJldHVybiBWZWN0b3IyLm1heGltdW1Db21wb25lbnQoc2NhbGVTY3JhdGNoMyk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc2V0Um90YXRpb24obWF0cml4OiBNYXRyaXgyLCByb3RhdGlvbjogTWF0cml4MiwgcmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRjb25zdCBzY2FsZSA9IE1hdHJpeDIuZ2V0U2NhbGUobWF0cml4LCBzY2FsZVNjcmF0Y2g0KTtcclxuXHJcblx0XHRyZXN1bHRbMF0gPSByb3RhdGlvblswXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMV0gPSByb3RhdGlvblsxXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMl0gPSByb3RhdGlvblsyXSAqIHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbM10gPSByb3RhdGlvblszXSAqIHNjYWxlLnk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRSb3RhdGlvbihtYXRyaXg6IE1hdHJpeDIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0Y29uc3Qgc2NhbGUgPSBNYXRyaXgyLmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoNSk7XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdIC8gc2NhbGUueDtcclxuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXSAvIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl0gLyBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdIC8gc2NhbGUueTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5KGxlZnQ6IE1hdHJpeDIsIHJpZ2h0OiBNYXRyaXgyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdGNvbnN0IGNvbHVtbjBSb3cwID0gbGVmdFswXSAqIHJpZ2h0WzBdICsgbGVmdFsyXSAqIHJpZ2h0WzFdO1xyXG5cdFx0Y29uc3QgY29sdW1uMVJvdzAgPSBsZWZ0WzBdICogcmlnaHRbMl0gKyBsZWZ0WzJdICogcmlnaHRbM107XHJcblx0XHRjb25zdCBjb2x1bW4wUm93MSA9IGxlZnRbMV0gKiByaWdodFswXSArIGxlZnRbM10gKiByaWdodFsxXTtcclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cxID0gbGVmdFsxXSAqIHJpZ2h0WzJdICsgbGVmdFszXSAqIHJpZ2h0WzNdO1xyXG5cclxuXHRcdHJlc3VsdFswXSA9IGNvbHVtbjBSb3cwO1xyXG5cdFx0cmVzdWx0WzFdID0gY29sdW1uMFJvdzE7XHJcblx0XHRyZXN1bHRbMl0gPSBjb2x1bW4xUm93MDtcclxuXHRcdHJlc3VsdFszXSA9IGNvbHVtbjFSb3cxO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhZGQobGVmdDogTWF0cml4MiwgcmlnaHQ6IE1hdHJpeDIsIHJlc3VsdDogTWF0cml4Mikge1xyXG5cdFx0cmVzdWx0WzBdID0gbGVmdFswXSArIHJpZ2h0WzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gbGVmdFsxXSArIHJpZ2h0WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gbGVmdFsyXSArIHJpZ2h0WzJdO1xyXG5cdFx0cmVzdWx0WzNdID0gbGVmdFszXSArIHJpZ2h0WzNdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzdWJ0cmFjdChsZWZ0OiBNYXRyaXgyLCByaWdodDogTWF0cml4MiwgcmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRyZXN1bHRbMF0gPSBsZWZ0WzBdIC0gcmlnaHRbMF07XHJcblx0XHRyZXN1bHRbMV0gPSBsZWZ0WzFdIC0gcmlnaHRbMV07XHJcblx0XHRyZXN1bHRbMl0gPSBsZWZ0WzJdIC0gcmlnaHRbMl07XHJcblx0XHRyZXN1bHRbM10gPSBsZWZ0WzNdIC0gcmlnaHRbM107XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlWZWN0b3IobWF0cml4OiBNYXRyaXgyLCBjYXJ0ZXNpYW46IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0Y29uc3QgeCA9IG1hdHJpeFswXSAqIGNhcnRlc2lhbi54ICsgbWF0cml4WzJdICogY2FydGVzaWFuLnk7XHJcblx0XHRjb25zdCB5ID0gbWF0cml4WzFdICogY2FydGVzaWFuLnggKyBtYXRyaXhbM10gKiBjYXJ0ZXNpYW4ueTtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlTY2FsYXIobWF0cml4OiBNYXRyaXgyLCBzY2FsYXI6IG51bWJlciwgcmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF0gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl0gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM10gKiBzY2FsYXI7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlTY2FsZShtYXRyaXg6IE1hdHJpeDIsIHNjYWxlOiBWZWN0b3IyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdICogc2NhbGUueTtcclxuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXSAqIHNjYWxlLnk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBuZWdhdGUobWF0cml4OiBNYXRyaXgyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdHJlc3VsdFswXSA9IC1tYXRyaXhbMF07XHJcblx0XHRyZXN1bHRbMV0gPSAtbWF0cml4WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gLW1hdHJpeFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IC1tYXRyaXhbM107XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHRyYW5zcG9zZShtYXRyaXg6IE1hdHJpeDIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0Y29uc3QgY29sdW1uMFJvdzAgPSBtYXRyaXhbMF07XHJcblx0XHRjb25zdCBjb2x1bW4wUm93MSA9IG1hdHJpeFsyXTtcclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cwID0gbWF0cml4WzFdO1xyXG5cdFx0Y29uc3QgY29sdW1uMVJvdzEgPSBtYXRyaXhbM107XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gY29sdW1uMFJvdzA7XHJcblx0XHRyZXN1bHRbMV0gPSBjb2x1bW4wUm93MTtcclxuXHRcdHJlc3VsdFsyXSA9IGNvbHVtbjFSb3cwO1xyXG5cdFx0cmVzdWx0WzNdID0gY29sdW1uMVJvdzE7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFicyhtYXRyaXg6IE1hdHJpeDIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0cmVzdWx0WzBdID0gTWF0aC5hYnMobWF0cml4WzBdKTtcclxuXHRcdHJlc3VsdFsxXSA9IE1hdGguYWJzKG1hdHJpeFsxXSk7XHJcblx0XHRyZXN1bHRbMl0gPSBNYXRoLmFicyhtYXRyaXhbMl0pO1xyXG5cdFx0cmVzdWx0WzNdID0gTWF0aC5hYnMobWF0cml4WzNdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBNYXRyaXgyLCByaWdodDogTWF0cml4Mik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdGxlZnRbMF0gPT09IHJpZ2h0WzBdICYmXHJcblx0XHRcdFx0bGVmdFsxXSA9PT0gcmlnaHRbMV0gJiZcclxuXHRcdFx0XHRsZWZ0WzJdID09PSByaWdodFsyXSAmJlxyXG5cdFx0XHRcdGxlZnRbM10gPT09IHJpZ2h0WzNdKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0c3RhdGljIGVxdWFsc0FycmF5KG1hdHJpeDogTWF0cml4MiwgYXJyYXk6IG51bWJlcltdLCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bWF0cml4WzBdID09PSBhcnJheVtvZmZzZXRdICYmXHJcblx0XHRcdG1hdHJpeFsxXSA9PT0gYXJyYXlbb2Zmc2V0ICsgMV0gJiZcclxuXHRcdFx0bWF0cml4WzJdID09PSBhcnJheVtvZmZzZXQgKyAyXSAmJlxyXG5cdFx0XHRtYXRyaXhbM10gPT09IGFycmF5W29mZnNldCArIDNdXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFsc0Vwc2lsb24obGVmdDogTWF0cml4MiwgcmlnaHQ6IE1hdHJpeDIsIGVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRlcHNpbG9uID0gZGVmYXVsdFZhbHVlKGVwc2lsb24sIDApO1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMF0gLSByaWdodFswXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMV0gLSByaWdodFsxXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMl0gLSByaWdodFsyXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbM10gLSByaWdodFszXSkgPD0gZXBzaWxvbilcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc3RhdGljIElERU5USVRZID0gT2JqZWN0LmZyZWV6ZShuZXcgTWF0cml4MigxLjAsIDAuMCwgMC4wLCAxLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBaRVJPID0gT2JqZWN0LmZyZWV6ZShuZXcgTWF0cml4MigwLjAsIDAuMCwgMC4wLCAwLjApKTtcclxuXHJcblx0Y2xvbmUocmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRyZXR1cm4gTWF0cml4Mi5jbG9uZSh0aGlzLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0ZXF1YWxzKHJpZ2h0OiBNYXRyaXgyKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gTWF0cml4Mi5lcXVhbHModGhpcywgcmlnaHQpO1xyXG5cdH1cclxuXHJcblx0ZXF1YWxzRXBzaWxvbihyaWdodDogTWF0cml4MiwgZXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBNYXRyaXgyLmVxdWFsc0Vwc2lsb24odGhpcywgcmlnaHQsIGVwc2lsb24pO1xyXG5cdH1cclxuXHJcblx0dG9TdHJpbmcoKSB7XHJcblx0XHRyZXR1cm4gYCgke3RoaXNbMF19LCAke3RoaXNbMl19KVxcbmAgKyBgKCR7dGhpc1sxXX0sICR7dGhpc1szXX0pYDtcclxuXHR9XHJcbn1cclxuY29uc3Qgc2NhbGVTY3JhdGNoMSA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IHNjYWxlU2NyYXRjaDIgPSBuZXcgVmVjdG9yMigpO1xyXG5jb25zdCBzY2FsZVNjcmF0Y2gzID0gbmV3IFZlY3RvcjIoKTtcclxuY29uc3Qgc2NhbGVTY3JhdGNoNCA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IHNjcmF0Y2hDb2x1bW4gPSBuZXcgVmVjdG9yMigpO1xyXG5jb25zdCBzY2FsZVNjcmF0Y2g1ID0gbmV3IFZlY3RvcjIoKTtcclxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MjtcclxuIiwiaW1wb3J0IHsgU2hhZGVyU3RhZ2UgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb25hbExpZ2h0IH0gZnJvbSBcIi4uL2xpZ2h0L0RpcmVjdGlvbmFsTGlnaHRcIjtcclxuaW1wb3J0IHsgUG9pbnRMaWdodCB9IGZyb20gXCIuLi9saWdodC9Qb2ludExpZ2h0XCI7XHJcbmltcG9ydCB7IFNwb3RMaWdodCB9IGZyb20gXCIuLi9saWdodC9TcG90TGlnaHRcIjtcclxuaW1wb3J0IENvbG9yIGZyb20gXCIuLi9tYXRoL0NvbG9yXCI7XHJcbmltcG9ydCBNYXRyaXgyIGZyb20gXCIuLi9tYXRoL01hdHJpeDJcIjtcclxuaW1wb3J0IE1hdHJpeDMgZnJvbSBcIi4uL21hdGgvTWF0cml4M1wiO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tIFwiLi4vbWF0aC9NYXRyaXg0XCI7XHJcbmltcG9ydCBWZWN0b3IyIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjJcIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xyXG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi4vbWF0aC9WZWN0b3I0XCI7XHJcbmltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xyXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi9Db250ZXh0XCI7XHJcbmltcG9ydCBTYW1wbGVyIGZyb20gXCIuL1NhbXBsZXJcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4vVGV4dHVyZVwiO1xyXG5pbXBvcnQgVW5pZm9ybUJ1ZmZlciBmcm9tIFwiLi9Vbmlmb3JtQnVmZmVyXCI7XHJcbmV4cG9ydCBjbGFzcyBVbmlmb3JtPFQ+IHtcclxuXHRfdmFsdWU6IFQ7XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdHZhbHVlOiBUO1xyXG5cdG9mZnNldDogbnVtYmVyO1xyXG5cdGJ1ZmZlcjogRmxvYXQzMkFycmF5IHwgVWludDE2QXJyYXkgfCBVaW50MzJBcnJheSB8IFVpbnQ4QXJyYXkgfCBGbG9hdDY0QXJyYXkgfCBVbmlmb3JtQnVmZmVyO1xyXG5cdGNiOiBGdW5jdGlvbiB8IG51bWJlciB8IE9iamVjdDtcclxuXHRieXRlU2l6ZTogbnVtYmVyO1xyXG5cdHZpc2liaWxpdHk/OiBudW1iZXI7XHJcblx0dHlwZT86IHN0cmluZztcclxuXHRkaXJ0eT86IGJvb2xlYW47XHJcblxyXG5cdGNvbnN0cnVjdG9yKHVuaWZvcm1OYW1lOiBzdHJpbmcsIGNiPzogRnVuY3Rpb24gfCBudW1iZXIgfCBPYmplY3QsIG9mZnNldD86IG51bWJlcikge1xyXG5cdFx0dGhpcy5uYW1lID0gdW5pZm9ybU5hbWU7XHJcblx0XHR0aGlzLmNiID0gY2I7XHJcblx0XHR0aGlzLm9mZnNldCA9IGRlZmF1bHRWYWx1ZShvZmZzZXQsIDApO1xyXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0gU2hhZGVyU3RhZ2UuVmVydGV4IHwgU2hhZGVyU3RhZ2UuRnJhZ21lbnQ7XHJcblx0XHR0aGlzLnR5cGUgPSBcIm51bWJlclwiO1xyXG5cdH1cclxuXHRzZXRCdWZmZXIoYXJyYXk6IEFycmF5PG51bWJlcj4sIG9mZnNldCA9IDApIHtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dGhpcy5idWZmZXJbaSArIG9mZnNldF0gPSBhcnJheVtpXTtcclxuXHRcdH1cclxuXHR9XHJcblx0c2V0KCkge1xyXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHR9XHJcblx0Z2V0VmFsdWUoKSB7XHJcblx0XHRsZXQgcmVzdWx0O1xyXG5cdFx0Y29uc3QgY2JUeXBlID0gdHlwZW9mIHRoaXMuY2I7XHJcblx0XHRzd2l0Y2ggKGNiVHlwZSkge1xyXG5cdFx0XHRjYXNlIFwib2JqZWN0XCI6XHJcblx0XHRcdFx0cmVzdWx0ID0gdGhpcy5jYlt0aGlzLm5hbWVdIHx8IHRoaXMuY2I7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgXCJmdW5jdGlvblwiOlxyXG5cdFx0XHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdFx0XHRyZXN1bHQgPSB0aGlzLmNiKCk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgXCJudW1iZXJcIjpcclxuXHRcdFx0XHRyZXN1bHQgPSB0aGlzLmNiO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgaXMgZXJyb3JcIik7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1VaW50IGV4dGVuZHMgVW5pZm9ybTxudW1iZXI+IHtcclxuXHRzdGF0aWMgYWxpZ24gPSA0O1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XHJcblx0XHR0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5fdmFsdWUgPSAwO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IDQ7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBVaW50MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCAxKTtcclxuXHRcdHRoaXMudHlwZSA9IFwidWludFwiO1xyXG5cdH1cclxuXHRzZXQoKSB7XHJcblx0XHRpZiAodGhpcy5jYiAhPSB1bmRlZmluZWQpIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRpZiAodGhpcy52YWx1ZSAhPT0gdGhpcy5fdmFsdWUpIHtcclxuXHRcdFx0dGhpcy5fdmFsdWUgPSB0aGlzLnZhbHVlO1xyXG5cdFx0XHR0aGlzLmJ1ZmZlclswXSA9IHRoaXMudmFsdWU7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1GbG9hdCBleHRlbmRzIFVuaWZvcm08bnVtYmVyPiB7XHJcblx0c3RhdGljIGFsaWduID0gNDtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBGdW5jdGlvbiB8IG51bWJlciB8IE9iamVjdCxcclxuXHRcdG9mZnNldD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0dGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX3ZhbHVlID0gMDtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSA0O1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIDEpO1xyXG5cdFx0dGhpcy50eXBlID0gXCJ2ZWMxXCI7XHJcblx0fVxyXG5cdHNldCgpIHtcclxuXHRcdGlmICh0aGlzLmNiICE9IHVuZGVmaW5lZCkgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdGlmICh0aGlzLnZhbHVlICE9PSB0aGlzLl92YWx1ZSkge1xyXG5cdFx0XHR0aGlzLl92YWx1ZSA9IHRoaXMudmFsdWU7XHJcblx0XHRcdHRoaXMuYnVmZmVyWzBdID0gdGhpcy52YWx1ZTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBVbmlmb3JtRmxvYXRWZWMyIGV4dGVuZHMgVW5pZm9ybTxWZWN0b3IyPiB7XHJcblx0c3RhdGljIGFsaWduID0gODtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBGdW5jdGlvbiB8IG51bWJlciB8IE9iamVjdCxcclxuXHRcdG9mZnNldD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0dGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX3ZhbHVlID0gbmV3IFZlY3RvcjIoKTtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCAyKTtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSA4O1xyXG5cdFx0dGhpcy50eXBlID0gXCJ2ZWMyXCI7XHJcblx0fVxyXG5cdHNldCgpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLmNiICE9IHVuZGVmaW5lZCkgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdGNvbnN0IHYgPSB0aGlzLnZhbHVlO1xyXG5cdFx0aWYgKCFWZWN0b3IyLmVxdWFscyh2LCB0aGlzLl92YWx1ZSkpIHtcclxuXHRcdFx0VmVjdG9yMi5jbG9uZSh2LCB0aGlzLl92YWx1ZSk7XHJcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHRoaXMuX3ZhbHVlLnRvQXJyYXkoKSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybUZsb2F0VmVjMyBleHRlbmRzIFVuaWZvcm08VmVjdG9yMz4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XHJcblx0XHR0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5fdmFsdWUgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIDMpO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IDEyO1xyXG5cdFx0dGhpcy50eXBlID0gXCJ2ZWMzXCI7XHJcblx0fVxyXG5cdHNldCgpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLmNiICE9IHVuZGVmaW5lZCkgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdGNvbnN0IHYgPSB0aGlzLnZhbHVlO1xyXG5cdFx0aWYgKCFWZWN0b3IzLmVxdWFscyh2LCB0aGlzLl92YWx1ZSkpIHtcclxuXHRcdFx0VmVjdG9yMy5jbG9uZSh2LCB0aGlzLl92YWx1ZSk7XHJcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHRoaXMuX3ZhbHVlLnRvQXJyYXkoKSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybUZsb2F0VmVjNCBleHRlbmRzIFVuaWZvcm08VmVjdG9yND4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XHJcblx0XHR0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5fdmFsdWUgPSBuZXcgVmVjdG9yNCgpO1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIDQpO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IDE2O1xyXG5cdFx0dGhpcy50eXBlID0gXCJ2ZWM0XCI7XHJcblx0fVxyXG5cdHNldCgpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLmNiICE9IHVuZGVmaW5lZCkgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdGNvbnN0IHYgPSB0aGlzLnZhbHVlO1xyXG5cdFx0aWYgKCFWZWN0b3I0LmVxdWFscyh2LCB0aGlzLl92YWx1ZSkpIHtcclxuXHRcdFx0VmVjdG9yNC5jbG9uZSh2LCB0aGlzLl92YWx1ZSk7XHJcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHRoaXMuX3ZhbHVlLnRvQXJyYXkoKSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybUNvbG9yIGV4dGVuZHMgVW5pZm9ybTxDb2xvcj4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XHJcblx0XHR0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5fdmFsdWUgPSBuZXcgQ29sb3IoKTtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCAzKTtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSAxMjtcclxuXHRcdHRoaXMudHlwZSA9IFwidmVjM1wiO1xyXG5cdH1cclxuXHRzZXQoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAodGhpcy5jYiAhPSB1bmRlZmluZWQpIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRjb25zdCB2ID0gdGhpcy52YWx1ZTtcclxuXHRcdGlmICghQ29sb3IuZXF1YWxzKHYsIHRoaXMuX3ZhbHVlKSkge1xyXG5cdFx0XHRDb2xvci5jbG9uZSh2LCB0aGlzLl92YWx1ZSk7XHJcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHRoaXMuX3ZhbHVlLnRvQXJyYXkoKSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1NYXQyIGV4dGVuZHMgVW5pZm9ybTxNYXRyaXgyPiB7XHJcblx0c3RhdGljIGFsaWduID0gODtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBGdW5jdGlvbiB8IG51bWJlciB8IE9iamVjdCxcclxuXHRcdG9mZnNldD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0dGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX3ZhbHVlID0gbmV3IE1hdHJpeDIoKTtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCA0KTtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSAxNjtcclxuXHRcdHRoaXMudHlwZSA9IFwibWF0MlwiO1xyXG5cdH1cclxuXHRzZXQoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAodGhpcy5jYiAhPSB1bmRlZmluZWQpIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRjb25zdCB2ID0gdGhpcy52YWx1ZTtcclxuXHRcdGlmICghTWF0cml4Mi5lcXVhbHModiwgdGhpcy5fdmFsdWUpKSB7XHJcblx0XHRcdE1hdHJpeDIuY2xvbmUodiwgdGhpcy5fdmFsdWUpO1xyXG5cdFx0XHR0aGlzLnNldEJ1ZmZlcih0aGlzLl92YWx1ZS50b0FycmF5KCkpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1NYXQzIGV4dGVuZHMgVW5pZm9ybTxNYXRyaXgzPiB7XHJcblx0c3RhdGljIGFsaWduID0gMTY7XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxyXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXHJcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXHJcblx0XHRjYjogRnVuY3Rpb24gfCBudW1iZXIgfCBPYmplY3QsXHJcblx0XHRvZmZzZXQ/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgb2Zmc2V0KTtcclxuXHRcdHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLl92YWx1ZSA9IG5ldyBNYXRyaXgzKCk7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgOSk7XHJcblx0XHR0aGlzLmJ5dGVTaXplID0gNDg7XHJcblx0XHR0aGlzLnR5cGUgPSBcIm1hdDNcIjtcclxuXHR9XHJcblx0c2V0KCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKHRoaXMuY2IgIT0gdW5kZWZpbmVkKSB0aGlzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgdiA9IHRoaXMudmFsdWU7XHJcblx0XHRpZiAoIU1hdHJpeDMuZXF1YWxzKHYsIHRoaXMuX3ZhbHVlKSkge1xyXG5cdFx0XHRNYXRyaXgzLmNsb25lKHYsIHRoaXMuX3ZhbHVlKTtcclxuXHRcdFx0dGhpcy5zZXRCdWZmZXIodGhpcy5fdmFsdWUudG9BcnJheSgpKTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBVbmlmb3JtTWF0NCBleHRlbmRzIFVuaWZvcm08TWF0cml4ND4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XHJcblx0XHR0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5fdmFsdWUgPSBuZXcgTWF0cml4NCgpO1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIDE2KTtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSA2NDtcclxuXHRcdHRoaXMudHlwZSA9IFwibWF0NFwiO1xyXG5cdH1cclxuXHRzZXQoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAodGhpcy5jYiAhPSB1bmRlZmluZWQpIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRjb25zdCB2ID0gdGhpcy52YWx1ZTtcclxuXHRcdGlmICghTWF0cml4NC5lcXVhbHModiwgdGhpcy5fdmFsdWUpKSB7XHJcblx0XHRcdE1hdHJpeDQuY2xvbmUodiwgdGhpcy5fdmFsdWUpO1xyXG5cdFx0XHR0aGlzLnNldEJ1ZmZlcih0aGlzLl92YWx1ZS50b0FycmF5KCkpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1NYXRyaXg0QXJyYXkgZXh0ZW5kcyBVbmlmb3JtPEFycmF5PE1hdHJpeDQ+PiB7XHJcblx0c3RhdGljIGFsaWduID0gMTY7XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxyXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXHJcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXHJcblx0XHRjYjogRnVuY3Rpb24gfCBudW1iZXIgfCBPYmplY3QsXHJcblx0XHRvZmZzZXQ/OiBudW1iZXIsXHJcblx0XHRjb3VudD86IG51bWJlcixcclxuXHRcdHNpemUgPSA2NFxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0gU2hhZGVyU3RhZ2UuVmVydGV4IHwgU2hhZGVyU3RhZ2UuRnJhZ21lbnQ7XHJcblx0XHR0aGlzLmJ5dGVTaXplID0gY291bnQgKiBzaXplO1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIHRoaXMuYnl0ZVNpemUgLyA0KTtcclxuXHRcdHRoaXMudHlwZSA9IFwibWF0NC1hcnJheVwiO1xyXG5cdH1cclxuXHRzZXQoKTogYm9vbGVhbiB7XHJcblx0XHR0aGlzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xyXG5cdFx0aWYgKCF0aGlzLnZhbHVlKSByZXR1cm4gZmFsc2U7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dGhpcy5zZXRCdWZmZXIodGhpcy52YWx1ZVtpXS50b0FycmF5KCksIGkgKiAxNik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1GbG9hdEFycmF5IGV4dGVuZHMgVW5pZm9ybTxBcnJheTxudW1iZXI+PiB7XHJcblx0c3RhdGljIGFsaWduID0gNDtcclxuXHQvLyBjYjogRnVuY3Rpb247XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxyXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXHJcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXHJcblx0XHRjYjogRnVuY3Rpb24gfCBudW1iZXIgfCBPYmplY3QsXHJcblx0XHRvZmZzZXQ/OiBudW1iZXIsXHJcblx0XHRjb3VudD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0gU2hhZGVyU3RhZ2UuVmVydGV4IHwgU2hhZGVyU3RhZ2UuRnJhZ21lbnQ7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgY291bnQpO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IDQgKiBjb3VudDtcclxuXHRcdHRoaXMudHlwZSA9IFwiZmxvYXQtYXJyYXlcIjtcclxuXHR9XHJcblx0c2V0KCk6IGJvb2xlYW4ge1xyXG5cdFx0dGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHR0aGlzLmJ1ZmZlcltpXSA9IHRoaXMudmFsdWVbaV07XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1WZWMyQXJyYXkgZXh0ZW5kcyBVbmlmb3JtPEFycmF5PFZlY3RvcjI+PiB7XHJcblx0c3RhdGljIGFsaWduID0gODtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBGdW5jdGlvbiB8IG51bWJlciB8IE9iamVjdCxcclxuXHRcdG9mZnNldD86IG51bWJlcixcclxuXHRcdGNvdW50PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XHJcblx0XHR0aGlzLnZpc2liaWxpdHkgPSBTaGFkZXJTdGFnZS5WZXJ0ZXggfCBTaGFkZXJTdGFnZS5GcmFnbWVudDtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSBjb3VudCAqIDg7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgdGhpcy5ieXRlU2l6ZSAvIDQpO1xyXG5cdFx0dGhpcy50eXBlID0gXCJ2ZWMyLWFycmF5XCI7XHJcblx0fVxyXG5cdHNldCgpOiBib29sZWFuIHtcclxuXHRcdC8vIHRoaXMudmFsdWUgPSB0aGlzLmNiKCk7XHJcblx0XHR0aGlzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xyXG5cdFx0bGV0IGogPSAwO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHRoaXMuYnVmZmVyW2pdID0gdGhpcy52YWx1ZVtpXS54O1xyXG5cdFx0XHR0aGlzLmJ1ZmZlcltqICsgMV0gPSB0aGlzLnZhbHVlW2ldLnk7XHJcblx0XHRcdGogKz0gMjtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybVZlYzNBcnJheSBleHRlbmRzIFVuaWZvcm08QXJyYXk8VmVjdG9yMz4+IHtcclxuXHRzdGF0aWMgYWxpZ24gPSAxNjtcclxuXHQvLyBjYjogRnVuY3Rpb247XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxyXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXHJcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXHJcblx0XHRjYjogRnVuY3Rpb24gfCBudW1iZXIgfCBPYmplY3QsXHJcblx0XHRvZmZzZXQ/OiBudW1iZXIsXHJcblx0XHRjb3VudD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0gU2hhZGVyU3RhZ2UuVmVydGV4IHwgU2hhZGVyU3RhZ2UuRnJhZ21lbnQ7XHJcblx0XHR0aGlzLmJ5dGVTaXplID0gY291bnQgKiAxNjtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCB0aGlzLmJ5dGVTaXplIC8gNCk7XHJcblx0XHR0aGlzLnR5cGUgPSBcInZlYzMtYXJyYXlcIjtcclxuXHR9XHJcblx0c2V0KCk6IGJvb2xlYW4ge1xyXG5cdFx0Ly8gdGhpcy52YWx1ZSA9IHRoaXMuY2IoKTtcclxuXHRcdHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRsZXQgaiA9IDA7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dGhpcy5idWZmZXJbal0gPSB0aGlzLnZhbHVlW2ldLng7XHJcblx0XHRcdHRoaXMuYnVmZmVyW2ogKyAxXSA9IHRoaXMudmFsdWVbaV0ueTtcclxuXHRcdFx0dGhpcy5idWZmZXJbaiArIDJdID0gdGhpcy52YWx1ZVtpXS56O1xyXG5cdFx0XHR0aGlzLmJ1ZmZlcltqICsgM10gPSAwO1xyXG5cdFx0XHRqICs9IDQ7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1WZWM0QXJyYXkgZXh0ZW5kcyBVbmlmb3JtPEFycmF5PFZlY3RvcjQ+PiB7XHJcblx0c3RhdGljIGFsaWduID0gMTY7XHJcblx0Ly8gY2I6IEZ1bmN0aW9uO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyLFxyXG5cdFx0Y291bnQ/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgb2Zmc2V0KTtcclxuXHRcdHRoaXMudmlzaWJpbGl0eSA9IFNoYWRlclN0YWdlLlZlcnRleCB8IFNoYWRlclN0YWdlLkZyYWdtZW50O1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IGNvdW50ICogMTY7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgdGhpcy5ieXRlU2l6ZSAvIDQpO1xyXG5cdFx0dGhpcy50eXBlID0gXCJ2ZWM0LWFycmF5XCI7XHJcblx0fVxyXG5cdHNldCgpOiBib29sZWFuIHtcclxuXHRcdHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRsZXQgaiA9IDA7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dGhpcy5idWZmZXJbal0gPSB0aGlzLnZhbHVlW2ldLng7XHJcblx0XHRcdHRoaXMuYnVmZmVyW2ogKyAxXSA9IHRoaXMudmFsdWVbaV0ueTtcclxuXHRcdFx0dGhpcy5idWZmZXJbaiArIDJdID0gdGhpcy52YWx1ZVtpXS56O1xyXG5cdFx0XHR0aGlzLmJ1ZmZlcltqICsgM10gPSB0aGlzLnZhbHVlW2ldLnc7XHJcblx0XHRcdGogKz0gNDtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybVRleHR1cmUgZXh0ZW5kcyBVbmlmb3JtPFRleHR1cmU+IHtcclxuXHRwdWJsaWMgYmluZGluZzogbnVtYmVyO1xyXG5cdHB1YmxpYyB0eXBlOiBzdHJpbmc7XHJcblx0cHVibGljIHZpc2liaWxpdHk6IFNoYWRlclN0YWdlO1xyXG5cdHB1YmxpYyBuYW1lOiBzdHJpbmc7XHJcblx0cHVibGljIHRleHR1cmU6IFRleHR1cmU7XHJcblx0cHVibGljIGlzVGV4dHVyZTogYm9vbGVhbjtcclxuXHRwcml2YXRlIF90ZXh0dXJlOiBGdW5jdGlvbiB8IFRleHR1cmU7XHJcblx0Y29uc3RydWN0b3IodW5pZm9ybU5hbWU6IHN0cmluZywgYmluZGluZzogbnVtYmVyLCB0ZXh0dXJlOiBGdW5jdGlvbiB8IFRleHR1cmUpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lKTtcclxuXHRcdHRoaXMuYmluZGluZyA9IGJpbmRpbmc7XHJcblx0XHR0aGlzLnR5cGUgPSBcInRleHR1cmVcIjtcclxuXHRcdHRoaXMuaXNUZXh0dXJlID0gdHJ1ZTtcclxuXHRcdHRoaXMudmlzaWJpbGl0eSA9IFNoYWRlclN0YWdlLkZyYWdtZW50O1xyXG5cdFx0dGhpcy5fdGV4dHVyZSA9IHRleHR1cmU7XHJcblx0fVxyXG5cdGdldCBsYXlvdXRUeXBlKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMudGV4dHVyZT8ubGF5b3V0VHlwZSB8fCBcIm5vdCB5ZXQgYmluZFwiO1xyXG5cdH1cclxuXHRiaW5kKGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdHRoaXMudGV4dHVyZSA9IHRoaXMuX3RleHR1cmUgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IHRoaXMuX3RleHR1cmUoKSA6IHRoaXMuX3RleHR1cmU7XHJcblx0XHR0aGlzLnRleHR1cmUudXBkYXRlKGNvbnRleHQpO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybVNhbXBsZXIgZXh0ZW5kcyBVbmlmb3JtPFNhbXBsZXI+IHtcclxuXHRwdWJsaWMgYmluZGluZzogbnVtYmVyO1xyXG5cdHB1YmxpYyB0eXBlOiBzdHJpbmc7XHJcblx0cHVibGljIHZpc2liaWxpdHk6IFNoYWRlclN0YWdlO1xyXG5cdHB1YmxpYyBuYW1lOiBzdHJpbmc7XHJcblx0cHVibGljIHNhbXBsZXI6IFNhbXBsZXI7XHJcblx0cHVibGljIGlzU2FtcGxlcjogYm9vbGVhbjtcclxuXHRwcml2YXRlIF9zYW1wbGVyOiBGdW5jdGlvbiB8IFNhbXBsZXI7XHJcblx0Y29uc3RydWN0b3IodW5pZm9ybU5hbWU6IHN0cmluZywgYmluZGluZzogbnVtYmVyLCBzYW1wbGVyOiBGdW5jdGlvbiB8IFNhbXBsZXIpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lKTtcclxuXHRcdHRoaXMubmFtZSA9IHVuaWZvcm1OYW1lO1xyXG5cdFx0dGhpcy5iaW5kaW5nID0gYmluZGluZztcclxuXHRcdHRoaXMudHlwZSA9IFwic2FtcGxlclwiO1xyXG5cdFx0dGhpcy5pc1NhbXBsZXIgPSB0cnVlO1xyXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0gU2hhZGVyU3RhZ2UuRnJhZ21lbnQ7XHJcblx0XHR0aGlzLl9zYW1wbGVyID0gc2FtcGxlcjtcclxuXHR9XHJcblx0Z2V0IGxheW91dFR5cGUoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5zYW1wbGVyPy5sYXlvdXRUeXBlIHx8IFwibm90IHlldCBiaW5kXCI7XHJcblx0fVxyXG5cdGJpbmQoY29udGV4dDogQ29udGV4dCkge1xyXG5cdFx0dGhpcy5zYW1wbGVyID0gdGhpcy5fc2FtcGxlciBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gdGhpcy5fc2FtcGxlcigpIDogdGhpcy5fc2FtcGxlcjtcclxuXHRcdHRoaXMuc2FtcGxlci51cGRhdGUoY29udGV4dCk7XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBVbmlmb3JtU3BvdExpZ2h0cyBleHRlbmRzIFVuaWZvcm08U3BvdExpZ2h0PiB7XHJcblx0c3RhdGljIGFsaWduID0gMTY7XHJcblx0bGlnaHRzOiBBcnJheTxTcG90TGlnaHQ+O1xyXG5cdC8vIGNiOiBGdW5jdGlvbjtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBGdW5jdGlvbiB8IG51bWJlciB8IE9iamVjdCxcclxuXHRcdG9mZnNldD86IG51bWJlcixcclxuXHRcdGNvdW50PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XHJcblx0XHR0aGlzLmNiID0gY2I7XHJcblx0XHR0aGlzLmJ5dGVTaXplID0gY291bnQgKiA2NDtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCB0aGlzLmJ5dGVTaXplIC8gNCk7XHJcblx0XHR0aGlzLnR5cGUgPSBcInNwb3RzTGlnaHRcIjtcclxuXHRcdHRoaXMudmlzaWJpbGl0eSA9IFNoYWRlclN0YWdlLkZyYWdtZW50O1xyXG5cdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG5cdH1cclxuXHRzZXQoKSB7XHJcblx0XHR0aGlzLmxpZ2h0cyA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdHRoaXMubGlnaHRzLmZvckVhY2goKHNwb3RMaWdodCwgaW5kZXgpID0+IHtcclxuXHRcdFx0dGhpcy5zZXRTdWJEYXRhKHNwb3RMaWdodCwgaW5kZXgpO1xyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gdGhpcy5kaXJ0eTtcclxuXHR9XHJcblx0cHJpdmF0ZSBzZXRTdWJEYXRhKHNwb3RMaWdodDogU3BvdExpZ2h0LCBpbmRleDogbnVtYmVyKSB7XHJcblx0XHRjb25zdCBvZmZzZXQgPSBpbmRleCAqIDE2O1xyXG5cdFx0aWYgKHNwb3RMaWdodC5wb3NpdGlvbkRpcnR5KSB7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHNwb3RMaWdodC5wb3NpdGlvbi50b0FycmF5KCksIG9mZnNldCArIDApOyAvLyBieXRlT2Zmc2V0PTA7XHJcblx0XHR9XHJcblx0XHRpZiAoc3BvdExpZ2h0LmRpc3RhbmNlRGlydHkpIHtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgc3BvdExpZ2h0LmRpc3RhbmNlLCBvZmZzZXQgKyAzKTsgLy8gYnl0ZU9mZnNldD0xMjtcclxuXHRcdH1cclxuXHRcdGlmIChzcG90TGlnaHQuZGlydGVjdERpcnR5KSB7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHNwb3RMaWdodC5kaXJlY3Rpb25hbC50b0FycmF5KCksIG9mZnNldCArIDQpOyAvLyBieXRlT2Zmc2V0PTE2O1xyXG5cdFx0fVxyXG5cdFx0aWYgKHNwb3RMaWdodC5jb25lQ29zRGlydHkpIHtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgc3BvdExpZ2h0LmNvbmVDb3MsIG9mZnNldCArIDcpOyAvLyBieXRlT2Zmc2V0PTI4O1xyXG5cdFx0fVxyXG5cdFx0aWYgKHNwb3RMaWdodC5jb2xvckRpcnR5KSB7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHNwb3RMaWdodC5jb2xvci50b0FycmF5KCksIG9mZnNldCArIDgpOyAvLyBieXRlT2Zmc2V0PTMyO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHNwb3RMaWdodC5wZW51bWJyYUNvc0RpcnR5KSB7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHNwb3RMaWdodC5wZW51bWJyYUNvcywgb2Zmc2V0ICsgMTEpOyAvLyBieXRlT2Zmc2V0PTQ0O1xyXG5cdFx0fVxyXG5cdFx0aWYgKHNwb3RMaWdodC5kZWNheURpcnR5KSB7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHNwb3RMaWdodC5kZWNheSwgb2Zmc2V0ICsgMTIpOyAvLyBieXRlT2Zmc2V0PTQ4O1xyXG5cdFx0fVxyXG5cclxuXHRcdHNwb3RMaWdodC5wb3NpdGlvbkRpcnR5ID0gZmFsc2U7XHJcblx0XHRzcG90TGlnaHQuZGlzdGFuY2VEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0c3BvdExpZ2h0LmRpcnRlY3REaXJ0eSA9IGZhbHNlO1xyXG5cdFx0c3BvdExpZ2h0LmNvbmVDb3NEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0c3BvdExpZ2h0LmNvbG9yRGlydHkgPSBmYWxzZTtcclxuXHRcdHNwb3RMaWdodC5wZW51bWJyYUNvc0RpcnR5ID0gZmFsc2U7XHJcblx0XHRzcG90TGlnaHQuZGVjYXlEaXJ0eSA9IGZhbHNlO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1TcG90TGlnaHRTaGFkb3dzIGV4dGVuZHMgVW5pZm9ybTxTcG90TGlnaHQ+IHtcclxuXHRzdGF0aWMgYWxpZ24gPSAxNjtcclxuXHRzdGF0aWMgdW5pZm9ybVNpemUgPSAxODtcclxuXHRsaWdodHM6IEFycmF5PFNwb3RMaWdodD47XHJcblx0Ly8gY2I6IEZ1bmN0aW9uO1xyXG5cdHByaXZhdGUgX25lYXJWYWx1ZTogbnVtYmVyO1xyXG5cdHByaXZhdGUgX2ZhclZhbHVlOiBudW1iZXI7XHJcblx0cHJpdmF0ZSBfc3ViRGF0YVNpemU6IG51bWJlcjtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxyXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXHJcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXHJcblx0XHRjYjogRnVuY3Rpb24gfCBudW1iZXIgfCBPYmplY3QsXHJcblx0XHRvZmZzZXQ/OiBudW1iZXIsXHJcblx0XHRjb3VudD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0Y29uc3QgYnl0ZXNQZXJFbGVtZW50ID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO1xyXG5cdFx0dGhpcy5fc3ViRGF0YVNpemUgPSBVbmlmb3JtU3BvdExpZ2h0U2hhZG93cy51bmlmb3JtU2l6ZTtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSBjb3VudCAqIHRoaXMuX3N1YkRhdGFTaXplICogYnl0ZXNQZXJFbGVtZW50O1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIHRoaXMuYnl0ZVNpemUgLyA0KTtcclxuXHRcdHRoaXMudHlwZSA9IFwic3BvdExpZ2h0U2hhZG93c1wiO1xyXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0gU2hhZGVyU3RhZ2UuRnJhZ21lbnQ7XHJcblx0XHR0aGlzLl9uZWFyVmFsdWUgPSBudWxsO1xyXG5cdFx0dGhpcy5fZmFyVmFsdWUgPSBudWxsO1xyXG5cdH1cclxuXHRzZXQoKSB7XHJcblx0XHR0aGlzLmxpZ2h0cyA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdHRoaXMubGlnaHRzLmZvckVhY2goKHNwb3RMaWdodCwgaW5kZXgpID0+IHtcclxuXHRcdFx0dGhpcy5zZXRTdWJEYXRhKHNwb3RMaWdodCwgaW5kZXgpO1xyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gdGhpcy5kaXJ0eTtcclxuXHR9XHJcblx0cHJpdmF0ZSBzZXRTdWJEYXRhKHNwb3RMaWdodDogU3BvdExpZ2h0LCBpbmRleDogbnVtYmVyKSB7XHJcblx0XHRjb25zdCBvZmZzZXQgPSBpbmRleCAqIHRoaXMuX3N1YkRhdGFTaXplO1xyXG5cdFx0aWYgKHNwb3RMaWdodC5zaGFkb3cudnBNYXRyaXhEaXJ0eSkge1xyXG5cdFx0XHRzcG90TGlnaHQuc2hhZG93LnZwTWF0cml4RGlydHkgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgc3BvdExpZ2h0LnNoYWRvdy5jYW1lcmEudnBNYXRyaXgudG9BcnJheSgpLCBvZmZzZXQgKyAwKTsgLy8gYnl0ZU9mZnNldD0wO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgbmVhclZhbHVlID0gc3BvdExpZ2h0LnNoYWRvdy5jYW1lcmEubmVhcjtcclxuXHRcdGlmIChuZWFyVmFsdWUgIT0gdGhpcy5fbmVhclZhbHVlKSB7XHJcblx0XHRcdHRoaXMuX25lYXJWYWx1ZSA9IG5lYXJWYWx1ZTtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgdGhpcy5fbmVhclZhbHVlLCBvZmZzZXQgKyAxNik7IC8vIGJ5dGVPZmZzZXQ9MDtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZhclZhbHVlID0gc3BvdExpZ2h0LnNoYWRvdy5jYW1lcmEuZmFyO1xyXG5cdFx0aWYgKGZhclZhbHVlICE9IHRoaXMuX2ZhclZhbHVlKSB7XHJcblx0XHRcdHRoaXMuX2ZhclZhbHVlID0gZmFyVmFsdWU7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHRoaXMuX2ZhclZhbHVlLCBvZmZzZXQgKyAxNyk7IC8vIGJ5dGVPZmZzZXQ9MDtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1Qb2ludExpZ2h0cyBleHRlbmRzIFVuaWZvcm08UG9pbnRMaWdodD4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xyXG5cdGxpZ2h0czogQXJyYXk8UG9pbnRMaWdodD47XHJcblx0Ly8gY2I6IEZ1bmN0aW9uO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyLFxyXG5cdFx0Y291bnQ/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgb2Zmc2V0KTtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSBjb3VudCAqIDMyO1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIHRoaXMuYnl0ZVNpemUgLyA0KTtcclxuXHRcdHRoaXMudHlwZSA9IFwicG9pbnRzTGlnaHRcIjtcclxuXHRcdHRoaXMudmlzaWJpbGl0eSA9IFNoYWRlclN0YWdlLkZyYWdtZW50O1xyXG5cdH1cclxuXHRzZXQoKSB7XHJcblx0XHR0aGlzLmxpZ2h0cyA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdHRoaXMubGlnaHRzLmZvckVhY2goKHBvaW50TGlnaHQsIGluZGV4KSA9PiB7XHJcblx0XHRcdHRoaXMuc2V0U3ViRGF0YShwb2ludExpZ2h0LCBpbmRleCk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiB0aGlzLmRpcnR5O1xyXG5cdH1cclxuXHRwcml2YXRlIHNldFN1YkRhdGEocG9pbnRMaWdodDogUG9pbnRMaWdodCwgaW5kZXg6IG51bWJlcikge1xyXG5cdFx0Y29uc3Qgb2Zmc2V0ID0gaW5kZXggKiA4O1xyXG5cdFx0aWYgKHBvaW50TGlnaHQucG9zaXRpb25EaXJ0eSkge1xyXG5cdFx0XHRwb2ludExpZ2h0LnBvc2l0aW9uRGlydHkgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgcG9pbnRMaWdodC5wb3NpdGlvbi50b0FycmF5KCksIG9mZnNldCArIDApOyAvLyBieXRlT2Zmc2V0PTA7XHJcblx0XHR9XHJcblx0XHRpZiAocG9pbnRMaWdodC5kaXN0YW5jZURpcnR5KSB7XHJcblx0XHRcdHBvaW50TGlnaHQuZGlzdGFuY2VEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCBwb2ludExpZ2h0LmRpc3RhbmNlLCBvZmZzZXQgKyAzKTsgLy8gYnl0ZU9mZnNldD0xMjtcclxuXHRcdH1cclxuXHRcdGlmIChwb2ludExpZ2h0LmNvbG9yRGlydHkpIHtcclxuXHRcdFx0cG9pbnRMaWdodC5jb2xvckRpcnR5ID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHBvaW50TGlnaHQuY29sb3IudG9BcnJheSgpLCBvZmZzZXQgKyA0KTsgLy8gYnl0ZU9mZnNldD0zMjtcclxuXHRcdH1cclxuXHRcdGlmIChwb2ludExpZ2h0LmRlY2F5RGlydHkpIHtcclxuXHRcdFx0cG9pbnRMaWdodC5kZWNheURpcnR5ID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHBvaW50TGlnaHQuZGVjYXksIG9mZnNldCArIDcpOyAvLyBieXRlT2Zmc2V0PTEyO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1Qb2ludExpZ2h0U2hhZG93cyBleHRlbmRzIFVuaWZvcm08UG9pbnRMaWdodD4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xyXG5cdHN0YXRpYyB1bmlmb3JtU2l6ZSA9IDEyMjtcclxuXHRsaWdodHM6IEFycmF5PFBvaW50TGlnaHQ+O1xyXG5cdC8vIGNiOiBGdW5jdGlvbjtcclxuXHRwcml2YXRlIF9uZWFyVmFsdWU6IG51bWJlcjtcclxuXHRwcml2YXRlIF9mYXJWYWx1ZTogbnVtYmVyO1xyXG5cdHByaXZhdGUgX3N1YkRhdGFTaXplOiBudW1iZXI7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyLFxyXG5cdFx0Y291bnQ/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgb2Zmc2V0KTtcclxuXHRcdGNvbnN0IGJ5dGVzUGVyRWxlbWVudCA9IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtcclxuXHRcdHRoaXMuX3N1YkRhdGFTaXplID0gVW5pZm9ybVBvaW50TGlnaHRTaGFkb3dzLnVuaWZvcm1TaXplO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IGNvdW50ICogYnl0ZXNQZXJFbGVtZW50ICogdGhpcy5fc3ViRGF0YVNpemU7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgdGhpcy5ieXRlU2l6ZSAvIDQpO1xyXG5cdFx0dGhpcy50eXBlID0gXCJwb2ludExpZ2h0U2hhZG93c1wiO1xyXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0gU2hhZGVyU3RhZ2UuRnJhZ21lbnQ7XHJcblx0XHR0aGlzLl9uZWFyVmFsdWUgPSBudWxsO1xyXG5cdFx0dGhpcy5fZmFyVmFsdWUgPSBudWxsO1xyXG5cdH1cclxuXHRzZXQoKSB7XHJcblx0XHR0aGlzLmxpZ2h0cyA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdHRoaXMubGlnaHRzLmZvckVhY2goKHBvaW50TGlnaHQsIGluZGV4KSA9PiB7XHJcblx0XHRcdHRoaXMuc2V0U3ViRGF0YShwb2ludExpZ2h0LCBpbmRleCk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiB0aGlzLmRpcnR5O1xyXG5cdH1cclxuXHRwcml2YXRlIHNldFN1YkRhdGEocG9pbnRMaWdodDogUG9pbnRMaWdodCwgaW5kZXg6IG51bWJlcikge1xyXG5cdFx0Y29uc3Qgb2Zmc2V0ID0gaW5kZXggKiB0aGlzLl9zdWJEYXRhU2l6ZTtcclxuXHJcblx0XHRpZiAocG9pbnRMaWdodC5zaGFkb3cudnBNYXRyaXhBcnJheURpcnR5KSB7XHJcblx0XHRcdHBvaW50TGlnaHQuc2hhZG93LnZwTWF0cml4QXJyYXlEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHRjb25zdCB2cE1hdHJpeEFycmF5ID0gcG9pbnRMaWdodC5zaGFkb3cuY2FtZXJhLnZwTWF0cml4QXJyYXk7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdnBNYXRyaXhBcnJheS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGNvbnN0IHZwTWF0cml4ID0gdnBNYXRyaXhBcnJheVtpXTtcclxuXHRcdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCB2cE1hdHJpeC50b0FycmF5KCksIG9mZnNldCArIDAgKyAxNiAqIGkpOyAvLyBieXRlT2Zmc2V0PTk4ICogNDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChwb2ludExpZ2h0LnNoYWRvdy52aWV3UG9ydERpcnR5KSB7XHJcblx0XHRcdHBvaW50TGlnaHQuc2hhZG93LnZpZXdQb3J0RGlydHkgPSBmYWxzZTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuXHRcdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KFxyXG5cdFx0XHRcdFx0dGhpcy5idWZmZXIsXHJcblx0XHRcdFx0XHRwb2ludExpZ2h0LnNoYWRvdy52aWV3cG9ydHNbaV0udG9BcnJheSgpLFxyXG5cdFx0XHRcdFx0b2Zmc2V0ICsgOTYgKyA0ICogaVxyXG5cdFx0XHRcdCk7IC8vIGJ5dGVPZmZzZXQ9MDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IG5lYXJWYWx1ZSA9IHBvaW50TGlnaHQuc2hhZG93LmNhbWVyYS5uZWFyO1xyXG5cdFx0aWYgKG5lYXJWYWx1ZSAhPSB0aGlzLl9uZWFyVmFsdWUpIHtcclxuXHRcdFx0dGhpcy5fbmVhclZhbHVlID0gbmVhclZhbHVlO1xyXG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCB0aGlzLl9uZWFyVmFsdWUsIG9mZnNldCArIDEyMCk7IC8vIGJ5dGVPZmZzZXQ9MDtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZhclZhbHVlID0gcG9pbnRMaWdodC5zaGFkb3cuY2FtZXJhLmZhcjtcclxuXHRcdGlmIChmYXJWYWx1ZSAhPSB0aGlzLl9mYXJWYWx1ZSkge1xyXG5cdFx0XHR0aGlzLl9mYXJWYWx1ZSA9IGZhclZhbHVlO1xyXG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCB0aGlzLl9mYXJWYWx1ZSwgb2Zmc2V0ICsgMTIxKTsgLy8gYnl0ZU9mZnNldD0xO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybURpcnRlY3RMaWdodHMgZXh0ZW5kcyBVbmlmb3JtPERpcmVjdGlvbmFsTGlnaHQ+IHtcclxuXHRzdGF0aWMgYWxpZ24gPSAxNjtcclxuXHRsaWdodHM6IEFycmF5PERpcmVjdGlvbmFsTGlnaHQ+O1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyLFxyXG5cdFx0Y291bnQ/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgb2Zmc2V0KTtcclxuXHRcdHRoaXMuY2IgPSBjYjtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSBjb3VudCAqIDMyO1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIHRoaXMuYnl0ZVNpemUgLyA0KTtcclxuXHRcdHRoaXMudHlwZSA9IFwiZGlydGVjdExpZ2h0c1wiO1xyXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0gU2hhZGVyU3RhZ2UuRnJhZ21lbnQ7XHJcblx0fVxyXG5cdHNldCgpIHtcclxuXHRcdHRoaXMubGlnaHRzID0gdGhpcy5nZXRWYWx1ZSgpO1xyXG5cdFx0dGhpcy5saWdodHMuZm9yRWFjaCgoZGlyZWN0aW9uYWxMaWdodCwgaW5kZXgpID0+IHtcclxuXHRcdFx0dGhpcy5zZXRTdWJEYXRhKGRpcmVjdGlvbmFsTGlnaHQsIGluZGV4KTtcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHRoaXMuZGlydHk7XHJcblx0fVxyXG5cdHByaXZhdGUgc2V0U3ViRGF0YShkaXJlY3Rpb25hbExpZ2h0OiBEaXJlY3Rpb25hbExpZ2h0LCBpbmRleDogbnVtYmVyKSB7XHJcblx0XHRjb25zdCBvZmZzZXQgPSBpbmRleCAqIDg7XHJcblx0XHRpZiAoZGlyZWN0aW9uYWxMaWdodC5kaXJ0ZWN0RGlydHkpIHtcclxuXHRcdFx0ZGlyZWN0aW9uYWxMaWdodC5kaXJ0ZWN0RGlydHkgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb25hbC50b0FycmF5KCksIG9mZnNldCArIDApOyAvLyBieXRlT2Zmc2V0PTE2O1xyXG5cdFx0fVxyXG5cdFx0aWYgKGRpcmVjdGlvbmFsTGlnaHQuY29sb3JEaXJ0eSkge1xyXG5cdFx0XHRkaXJlY3Rpb25hbExpZ2h0LmNvbG9yRGlydHkgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgZGlyZWN0aW9uYWxMaWdodC5jb2xvci50b0FycmF5KCksIG9mZnNldCArIDQpOyAvLyBieXRlT2Zmc2V0PTMyO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1EaXJ0ZWN0TGlnaHRTaGFkb3dzIGV4dGVuZHMgVW5pZm9ybTxEaXJlY3Rpb25hbExpZ2h0PiB7XHJcblx0c3RhdGljIGFsaWduID0gMTY7XHJcblx0c3RhdGljIHVuaWZvcm1TaXplID0gMTY7XHJcblx0bGlnaHRzOiBBcnJheTxEaXJlY3Rpb25hbExpZ2h0PjtcclxuXHRwcml2YXRlIF9zdWJEYXRhU2l6ZTogbnVtYmVyO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBGdW5jdGlvbiB8IG51bWJlciB8IE9iamVjdCxcclxuXHRcdG9mZnNldD86IG51bWJlcixcclxuXHRcdGNvdW50PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XHJcblx0XHRjb25zdCBieXRlc1BlckVsZW1lbnQgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7XHJcblx0XHR0aGlzLl9zdWJEYXRhU2l6ZSA9IFVuaWZvcm1EaXJ0ZWN0TGlnaHRTaGFkb3dzLnVuaWZvcm1TaXplO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IGNvdW50ICogYnl0ZXNQZXJFbGVtZW50ICogdGhpcy5fc3ViRGF0YVNpemU7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgdGhpcy5ieXRlU2l6ZSAvIDQpO1xyXG5cdFx0dGhpcy50eXBlID0gXCJkaXJ0ZWN0TGlnaHRTaGFkb3dzXCI7XHJcblx0XHR0aGlzLnZpc2liaWxpdHkgPSBTaGFkZXJTdGFnZS5GcmFnbWVudDtcclxuXHR9XHJcblx0c2V0KCkge1xyXG5cdFx0dGhpcy5saWdodHMgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHR0aGlzLmxpZ2h0cy5mb3JFYWNoKChkaXJlY3Rpb25hbExpZ2h0LCBpbmRleCkgPT4ge1xyXG5cdFx0XHR0aGlzLnNldFN1YkRhdGEoZGlyZWN0aW9uYWxMaWdodCwgaW5kZXgpO1xyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gdGhpcy5kaXJ0eTtcclxuXHR9XHJcblx0cHJpdmF0ZSBzZXRTdWJEYXRhKGRpcmVjdGlvbmFsTGlnaHQ6IERpcmVjdGlvbmFsTGlnaHQsIGluZGV4OiBudW1iZXIpIHtcclxuXHRcdGNvbnN0IG9mZnNldCA9IGluZGV4ICogdGhpcy5fc3ViRGF0YVNpemU7XHJcblx0XHRpZiAoZGlyZWN0aW9uYWxMaWdodC5zaGFkb3cudnBNYXRyaXhEaXJ0eSkge1xyXG5cdFx0XHRkaXJlY3Rpb25hbExpZ2h0LnNoYWRvdy52cE1hdHJpeERpcnR5ID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93LmNhbWVyYS52cE1hdHJpeC50b0FycmF5KCksIG9mZnNldCArIDApOyAvLyBieXRlT2Zmc2V0PTE2O1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5leHBvcnQgZW51bSBVbmlmb3JtRW51bSB7XHJcblx0RmxvYXQgPSAwLFxyXG5cdEZsb2F0VmVjMiA9IDEsXHJcblx0RmxvYXRWZWMzID0gMixcclxuXHRGbG9hdFZlYzQgPSAzLFxyXG5cdEZsb2F0QXJyYXkgPSA0LFxyXG5cdE1hdDIgPSA1LFxyXG5cdE1hdDMgPSA2LFxyXG5cdE1hdDQgPSA3LFxyXG5cdENvbG9yID0gOCxcclxuXHRNYXQ0QXJyYXkgPSA5LFxyXG5cdFBvaW50TGlnaHRzID0gMTAsXHJcblx0UG9pbnRMaWdodFNoYWRvd3MgPSAxMSxcclxuXHRTcG90TGlnaHRzID0gMTIsXHJcblx0U3BvdExpZ2h0U2hhZG93cyA9IDEzLFxyXG5cdERpcnRlY3RMaWdodHMgPSAxNCxcclxuXHREaXJ0ZWN0TGlnaHRTaGFkb3dzID0gMTUsXHJcblx0VmVjMkFycmF5ID0gMTYsXHJcblx0VmVjM0FycmF5ID0gMTcsXHJcblx0VmVjNEFycmF5ID0gMTgsXHJcblx0VW5pZm9ybVVpbnQgPSAxOVxyXG59XHJcbmZ1bmN0aW9uIHNldERhdGFUb1R5cGVBcnJheShidWZmZXIsIGRhdGEsIG9mZnNldCkge1xyXG5cdGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcblx0XHRkYXRhLmZvckVhY2goKHZhbHVlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRidWZmZXJbaW5kZXggKyBvZmZzZXRdID0gdmFsdWU7XHJcblx0XHR9KTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0YnVmZmVyW29mZnNldF0gPSBkYXRhO1xyXG5cdH1cclxuXHRyZXR1cm4gdHJ1ZTtcclxufVxyXG4iLCJpbXBvcnQgeyBCdWZmZXJVc2FnZSwgU2hhZGVyU3RhZ2UgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xyXG5pbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IEJ1ZmZlciBmcm9tIFwiLi9CdWZmZXJcIjtcclxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4vQ29udGV4dFwiO1xyXG5cclxuaW1wb3J0IHtcclxuXHRVbmlmb3JtLFxyXG5cdFVuaWZvcm1Db2xvcixcclxuXHRVbmlmb3JtRGlydGVjdExpZ2h0cyxcclxuXHRVbmlmb3JtRGlydGVjdExpZ2h0U2hhZG93cyxcclxuXHRVbmlmb3JtRmxvYXQsXHJcblx0VW5pZm9ybUZsb2F0QXJyYXksXHJcblx0VW5pZm9ybUZsb2F0VmVjMixcclxuXHRVbmlmb3JtRmxvYXRWZWMzLFxyXG5cdFVuaWZvcm1GbG9hdFZlYzQsXHJcblx0VW5pZm9ybU1hdDIsXHJcblx0VW5pZm9ybU1hdDMsXHJcblx0VW5pZm9ybU1hdDQsXHJcblx0VW5pZm9ybU1hdHJpeDRBcnJheSxcclxuXHRVbmlmb3JtUG9pbnRMaWdodHMsXHJcblx0VW5pZm9ybVBvaW50TGlnaHRTaGFkb3dzLFxyXG5cdFVuaWZvcm1TcG90TGlnaHRzLFxyXG5cdFVuaWZvcm1TcG90TGlnaHRTaGFkb3dzLFxyXG5cdFVuaWZvcm1VaW50LFxyXG5cdFVuaWZvcm1WZWMyQXJyYXksXHJcblx0VW5pZm9ybVZlYzNBcnJheSxcclxuXHRVbmlmb3JtVmVjNEFycmF5LFxyXG5cdFVuaWZvcm1FbnVtXHJcbn0gZnJvbSBcIi4vVW5pZm9ybXNcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVW5pZm9ybUJ1ZmZlciB7XHJcblx0cHVibGljIHR5cGU6IHN0cmluZztcclxuXHRwdWJsaWMgaGFzRHluYW1pY09mZnNldDogYm9vbGVhbjtcclxuXHRwdWJsaWMgbWluQmluZGluZ1NpemU6IG51bWJlcjtcclxuXHRwcml2YXRlIF91bmlmb3JtU3RydWN0OiBNYXA8c3RyaW5nLCBVbmlmb3JtPGFueT4+O1xyXG5cdHByaXZhdGUgX2J1ZmZlclNpemU6IG51bWJlcjtcclxuXHRwcml2YXRlIGxhYmVsOiBzdHJpbmc7XHJcblx0Ynl0ZU9mZnNldDogbnVtYmVyO1xyXG5cdHVuaWZvcm1EaXJ0eTogYm9vbGVhbjtcclxuXHRiaW5kaW5nOiBudW1iZXI7XHJcblx0dmlzaWJpbGl0eTogU2hhZGVyU3RhZ2U7XHJcblx0dXNhZ2U6IEJ1ZmZlclVzYWdlO1xyXG5cdGJ1ZmZlcjogQnVmZmVyO1xyXG5cdGRhdGFCdWZmZXI6IEZsb2F0MzJBcnJheTtcclxuXHRvZmZzZXQ6IG51bWJlcjtcclxuXHRtYXhPZmZzZXQ6IG51bWJlcjtcclxuXHRpc1VuaWZvcm1CdWZmZXI6IGJvb2xlYW47XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdHByaXZhdGUgc3RhdGljIFVuaWZvcm1UeXBlID0ge1xyXG5cdFx0W1VuaWZvcm1FbnVtLlVuaWZvcm1VaW50XTogVW5pZm9ybVVpbnQsXHJcblx0XHRbVW5pZm9ybUVudW0uRmxvYXRdOiBVbmlmb3JtRmxvYXQsXHJcblx0XHRbVW5pZm9ybUVudW0uRmxvYXRWZWMyXTogVW5pZm9ybUZsb2F0VmVjMixcclxuXHRcdFtVbmlmb3JtRW51bS5GbG9hdFZlYzNdOiBVbmlmb3JtRmxvYXRWZWMzLFxyXG5cdFx0W1VuaWZvcm1FbnVtLkZsb2F0VmVjNF06IFVuaWZvcm1GbG9hdFZlYzQsXHJcblx0XHRbVW5pZm9ybUVudW0uTWF0Ml06IFVuaWZvcm1NYXQyLFxyXG5cdFx0W1VuaWZvcm1FbnVtLk1hdDNdOiBVbmlmb3JtTWF0MyxcclxuXHRcdFtVbmlmb3JtRW51bS5NYXQ0XTogVW5pZm9ybU1hdDQsXHJcblx0XHRbVW5pZm9ybUVudW0uQ29sb3JdOiBVbmlmb3JtQ29sb3IsXHJcblx0XHRbVW5pZm9ybUVudW0uRmxvYXRBcnJheV06IFVuaWZvcm1GbG9hdEFycmF5LFxyXG5cdFx0W1VuaWZvcm1FbnVtLlZlYzJBcnJheV06IFVuaWZvcm1WZWMyQXJyYXksXHJcblx0XHRbVW5pZm9ybUVudW0uVmVjM0FycmF5XTogVW5pZm9ybVZlYzNBcnJheSxcclxuXHRcdFtVbmlmb3JtRW51bS5WZWM0QXJyYXldOiBVbmlmb3JtVmVjNEFycmF5LFxyXG5cdFx0W1VuaWZvcm1FbnVtLk1hdDRBcnJheV06IFVuaWZvcm1NYXRyaXg0QXJyYXksXHJcblx0XHRbVW5pZm9ybUVudW0uUG9pbnRMaWdodHNdOiBVbmlmb3JtUG9pbnRMaWdodHMsXHJcblx0XHRbVW5pZm9ybUVudW0uU3BvdExpZ2h0c106IFVuaWZvcm1TcG90TGlnaHRzLFxyXG5cdFx0W1VuaWZvcm1FbnVtLkRpcnRlY3RMaWdodHNdOiBVbmlmb3JtRGlydGVjdExpZ2h0cyxcclxuXHRcdFtVbmlmb3JtRW51bS5Qb2ludExpZ2h0U2hhZG93c106IFVuaWZvcm1Qb2ludExpZ2h0U2hhZG93cyxcclxuXHRcdFtVbmlmb3JtRW51bS5TcG90TGlnaHRTaGFkb3dzXTogVW5pZm9ybVNwb3RMaWdodFNoYWRvd3MsXHJcblx0XHRbVW5pZm9ybUVudW0uRGlydGVjdExpZ2h0U2hhZG93c106IFVuaWZvcm1EaXJ0ZWN0TGlnaHRTaGFkb3dzXHJcblx0fTtcclxuXHRjb25zdHJ1Y3RvcihvcHRpb25zOiBVbmlmb3JtQnVmZmVyVHlwZSkge1xyXG5cdFx0dGhpcy50eXBlID0gZGVmYXVsdFZhbHVlKG9wdGlvbnMudHlwZSwgXCJ1bmlmb3JtXCIpO1xyXG5cdFx0dGhpcy5sYWJlbCA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLmxhYmVsLCBcIlwiKTtcclxuXHRcdHRoaXMubmFtZSA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLmxhYmVsLCBcIlwiKTtcclxuXHRcdHRoaXMuaGFzRHluYW1pY09mZnNldCA9IG9wdGlvbnMuaGFzRHluYW1pY09mZnNldCA/PyBmYWxzZTtcclxuXHRcdHRoaXMubWluQmluZGluZ1NpemUgPSBvcHRpb25zLm1pbkJpbmRpbmdTaXplID8/IDA7XHJcblx0XHR0aGlzLmJpbmRpbmcgPSBvcHRpb25zLmJpbmRpbmcgPz8gMDtcclxuXHRcdHRoaXMudmlzaWJpbGl0eSA9IFNoYWRlclN0YWdlLkZyYWdtZW50IHwgU2hhZGVyU3RhZ2UuVmVydGV4O1xyXG5cdFx0dGhpcy51c2FnZSA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLnVzYWdlLCBCdWZmZXJVc2FnZS5Vbmlmb3JtIHwgQnVmZmVyVXNhZ2UuQ29weURzdCk7XHJcblx0XHR0aGlzLl91bmlmb3JtU3RydWN0ID0gbmV3IE1hcCgpO1xyXG5cdFx0dGhpcy51bmlmb3JtRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fYnVmZmVyU2l6ZSA9IG9wdGlvbnMuc2l6ZTtcclxuXHRcdHRoaXMub2Zmc2V0ID0gMDtcclxuXHRcdHRoaXMuZGF0YUJ1ZmZlciA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLmRhdGFCdWZmZXIsIG5ldyBGbG9hdDMyQXJyYXkoZGVmYXVsdFZhbHVlKHRoaXMuX2J1ZmZlclNpemUsIDQwMCkpKTtcclxuXHRcdHRoaXMuYnl0ZU9mZnNldCA9IDA7XHJcblx0XHR0aGlzLmlzVW5pZm9ybUJ1ZmZlciA9IHRydWU7XHJcblx0XHR0aGlzLm1heE9mZnNldCA9IG9wdGlvbnMubWF4T2Zmc2V0ID8/IDA7XHJcblx0fVxyXG5cdGdldCBsYXlvdXRUeXBlKCkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0dHlwZTogdGhpcy50eXBlLFxyXG5cdFx0XHRoYXNEeW5hbWljT2Zmc2V0OiB0aGlzLmhhc0R5bmFtaWNPZmZzZXQsXHJcblx0XHRcdG1pbkJpbmRpbmdTaXplOiB0aGlzLm1pbkJpbmRpbmdTaXplXHJcblx0XHR9O1xyXG5cdH1cclxuXHRnZXQgYnVmZmVyU2l6ZSgpIHtcclxuXHRcdHJldHVybiB0aGlzLnVuaWZvcm1zU2l6ZSAqIDQ7XHJcblx0fVxyXG5cdGdldCB1bmlmb3Jtc1NpemUoKSB7XHJcblx0XHQvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViL3dnc2wvI2FkZHJlc3Mtc3BhY2UtbGF5b3V0LWNvbnN0cmFpbnRzXHJcblx0XHRyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYnl0ZU9mZnNldCAvIDE2KSAqIDE2O1xyXG5cdH1cclxuXHRiaW5kKGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdHRoaXMuX3VuaWZvcm1TdHJ1Y3QuZm9yRWFjaCgodW5pZm9ybSkgPT4ge1xyXG5cdFx0XHRjb25zdCByZXN1bHQgPSB1bmlmb3JtLnNldCgpO1xyXG5cdFx0XHRpZiAodW5pZm9ybT8uZGlydHkgIT0gdW5kZWZpbmVkKSB1bmlmb3JtLmRpcnR5ID0gZmFsc2U7XHJcblx0XHRcdGlmIChyZXN1bHQgIT0gdW5kZWZpbmVkICYmIHRoaXMudW5pZm9ybURpcnR5ID09IGZhbHNlKSB0aGlzLnVuaWZvcm1EaXJ0eSA9IHJlc3VsdDtcclxuXHRcdH0pO1xyXG5cdFx0aWYgKHRoaXMudW5pZm9ybURpcnR5KSB7XHJcblx0XHRcdHRoaXMudW5pZm9ybURpcnR5ID0gZmFsc2U7XHJcblx0XHRcdGlmICghdGhpcy5idWZmZXIpXHJcblx0XHRcdFx0dGhpcy5idWZmZXIgPSBCdWZmZXIuY3JlYXRlVW5pZm9ybUJ1ZmZlcih0aGlzLmxhYmVsLCBjb250ZXh0LmRldmljZSwgdGhpcy5idWZmZXJTaXplLCB0aGlzLnVzYWdlKTtcclxuXHRcdFx0dGhpcy5idWZmZXIuc2V0U3ViRGF0YSgwLCB0aGlzLmRhdGFCdWZmZXIuc2xpY2UoMCwgZGVmYXVsdFZhbHVlKHRoaXM/LmJ1ZmZlclNpemUgLyA0LCB0aGlzLnVuaWZvcm1zU2l6ZSkpKTtcclxuXHRcdH1cclxuXHR9XHJcblx0cHVibGljIGdldFVuaWZvcm1CdWZmZXJTdHJ1Y3QoKSB7XHJcblx0XHRsZXQgdW5pZm9ybVN0cnVjdCA9IGBzdHJ1Y3QgTWF0ZXJpYWxVbmlmb3JtIHtcXG4gYDtcclxuXHRcdHRoaXMuX3VuaWZvcm1TdHJ1Y3QuZm9yRWFjaCgodW5pZm9ybSkgPT4ge1xyXG5cdFx0XHR1bmlmb3JtU3RydWN0ICs9IHRoaXMuY3JlYXRlVW5pZm9ybVN0cmluZyh1bmlmb3JtKTtcclxuXHRcdH0pO1xyXG5cdFx0dW5pZm9ybVN0cnVjdCArPSBgfVxcbmA7XHJcblx0XHRyZXR1cm4gdW5pZm9ybVN0cnVjdDtcclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVhdGVVbmlmb3JtU3RyaW5nKHVuaWZvcm0pIHtcclxuXHRcdGxldCByZXN1bHQgPSBgYDtcclxuXHRcdHN3aXRjaCAodW5pZm9ybS50eXBlKSB7XHJcblx0XHRcdGNhc2UgXCJ2ZWMxXCI6XHJcblx0XHRcdFx0cmVzdWx0ID0gYCR7dW5pZm9ybS5uYW1lfSA6ZjMyLFxcbmA7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgXCJ2ZWMyXCI6XHJcblx0XHRcdFx0cmVzdWx0ID0gYCR7dW5pZm9ybS5uYW1lfSA6dmVjMjxmMzI+LFxcbmA7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgXCJ2ZWMzXCI6XHJcblx0XHRcdFx0cmVzdWx0ID0gYCR7dW5pZm9ybS5uYW1lfSA6dmVjMzxmMzI+LFxcbmA7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgXCJ2ZWM0XCI6XHJcblx0XHRcdFx0cmVzdWx0ID0gYCR7dW5pZm9ybS5uYW1lfSA6dmVjNDxmMzI+LFxcbmA7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgXCJtYXQyXCI6XHJcblx0XHRcdFx0cmVzdWx0ID0gYCR7dW5pZm9ybS5uYW1lfSA6bWF0MngyPGYzMj4sXFxuYDtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSBcIm1hdDNcIjpcclxuXHRcdFx0XHRyZXN1bHQgPSBgJHt1bmlmb3JtLm5hbWV9IDptYXQzeDM8ZjMyPixcXG5gO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIFwibWF0NFwiOlxyXG5cdFx0XHRcdHJlc3VsdCA9IGAke3VuaWZvcm0ubmFtZX0gOm1hdDR4NDxmMzI+LFxcbmA7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHRjb250YWlucyhuYW1lOiBzdHJpbmcpOiBVbmlmb3JtPGFueT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuX3VuaWZvcm1TdHJ1Y3QuZ2V0KG5hbWUpO1xyXG5cdH1cclxuXHRyZXBsYWNlVW5pZm9ybVZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IEZ1bmN0aW9uIHwgbnVtYmVyIHwgT2JqZWN0KSB7XHJcblx0XHRjb25zdCB1bmlmb3JtID0gdGhpcy5fdW5pZm9ybVN0cnVjdC5nZXQobmFtZSk7XHJcblx0XHRpZiAoIXVuaWZvcm0pIHJldHVybjtcclxuXHRcdHVuaWZvcm0uY2IgPSB2YWx1ZTtcclxuXHR9XHJcblx0Ly8gdW5pZm9ybUJ1ZmZlci5zZXRWZWMzQXJyYXkoJ3Rlc3QnLCgpPT57cmV0dXJuIFtuZXcgVmVjdG9yMygxLDAsMCksbmV3IFZlY3RvcjMoMSwwLjgsMC41KV19LDIpO1xyXG5cdC8vIHVuaWZvcm1CdWZmZXIuc2V0RmxvYXRBcnJheSgndGVzdDEnLCgpPT57cmV0dXJuIFswLjUsMC41LDEuMF19LDMpO1xyXG5cdC8vIHVuaWZvcm1CdWZmZXIuc2V0VmVjNEFycmF5KCd0ZXN0NCcsKCk9PntyZXR1cm4gW25ldyBWZWN0b3I0KDAuNSwwLjYsMC4yLDEuMCksbmV3IFZlY3RvcjQoMC41LDAuOCwwLjgsMS4wKV19LDIpO1xyXG5cdC8vIHVuaWZvcm1CdWZmZXIuc2V0VmVjMkFycmF5KCd0ZXN0MicsKCk9PntyZXR1cm4gW25ldyBWZWN0b3IyKDAuNSwwLjYpLG5ldyBWZWN0b3IyKDAuNSwwLjgsKV19LDIpO1xyXG5cdHNldFVuaWZvcm0obmFtZTogc3RyaW5nLCB2YWx1ZTogRnVuY3Rpb24gfCBudW1iZXIgfCBPYmplY3QsIHVuaWZvcm1UeXBlOiBVbmlmb3JtRW51bSwgY291bnQ/OiBudW1iZXIpIHtcclxuXHRcdGlmICh0aGlzLl91bmlmb3JtU3RydWN0LmdldChuYW1lKSkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgVHlwZVVuaWZvcm0gPSBVbmlmb3JtQnVmZmVyLlVuaWZvcm1UeXBlW3VuaWZvcm1UeXBlXTtcclxuXHRcdHRoaXMuYnl0ZU9mZnNldCArPSB0aGlzLmNoZWNrVW5pZm9ybU9mZnNldCh0aGlzLmJ5dGVPZmZzZXQsIFR5cGVVbmlmb3JtLmFsaWduKTtcclxuXHRcdGNvbnN0IHVuaWZvcm0gPVxyXG5cdFx0XHRjb3VudCAhPSB1bmRlZmluZWRcclxuXHRcdFx0XHQ/IG5ldyBUeXBlVW5pZm9ybShuYW1lLCB0aGlzLmRhdGFCdWZmZXIsIHRoaXMuYnl0ZU9mZnNldCwgdmFsdWUsIDAsIGNvdW50KVxyXG5cdFx0XHRcdDogbmV3IFR5cGVVbmlmb3JtKG5hbWUsIHRoaXMuZGF0YUJ1ZmZlciwgdGhpcy5ieXRlT2Zmc2V0LCB2YWx1ZSk7XHJcblx0XHR0aGlzLl91bmlmb3JtU3RydWN0LnNldChuYW1lLCB1bmlmb3JtKTtcclxuXHRcdHRoaXMuYnl0ZU9mZnNldCArPSB1bmlmb3JtLmJ5dGVTaXplO1xyXG5cdH1cclxuXHRwcml2YXRlIGNoZWNrVW5pZm9ybU9mZnNldChieXRlU2l6ZTogbnVtYmVyLCBBbGlnbjogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdC8vIGZyb20gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi93Z3NsLyNhZGRyZXNzLXNwYWNlLWxheW91dC1jb25zdHJhaW50c1xyXG5cdFx0Ly8gcmV0dXJuIHRoaXMuaGFzRHluYW1pY09mZnNldFxyXG5cdFx0Ly8gXHQ/IE1hdGguY2VpbChieXRlU2l6ZSAvIDI1NikgKiAyNTYgLSBieXRlU2l6ZVxyXG5cdFx0Ly8gXHQ6IE1hdGguY2VpbChieXRlU2l6ZSAvIEFsaWduKSAqIEFsaWduIC0gYnl0ZVNpemU7XHJcblx0XHRyZXR1cm4gTWF0aC5jZWlsKGJ5dGVTaXplIC8gQWxpZ24pICogQWxpZ24gLSBieXRlU2l6ZTtcclxuXHR9XHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXM/LmJ1ZmZlcj8uZGVzdHJveSgpO1xyXG5cdH1cclxufVxyXG50eXBlIFVuaWZvcm1CdWZmZXJUeXBlID0ge1xyXG5cdGxhYmVsOiBzdHJpbmc7XHJcblx0dHlwZT86IHN0cmluZztcclxuXHR1c2FnZT86IEJ1ZmZlclVzYWdlO1xyXG5cdHNpemU/OiBudW1iZXI7XHJcblx0ZGF0YUJ1ZmZlcj86IEZsb2F0MzJBcnJheTtcclxuXHRiaW5kaW5nPzogbnVtYmVyO1xyXG5cdGhhc0R5bmFtaWNPZmZzZXQ/OiBib29sZWFuO1xyXG5cdG1pbkJpbmRpbmdTaXplPzogbnVtYmVyO1xyXG5cdG1heE9mZnNldD86IG51bWJlcjtcclxufTtcclxuIiwiZXhwb3J0IGZ1bmN0aW9uIGJpbGxib2FyZF9mcyhkZWZpbmVzKXtcbiAgcmV0dXJuIGBcbiAgc3RydWN0IFNlbGZVbmlmb3JtIHtcbiAgICBtb2RlbE1hdHJpeDogbWF0NHg0PGYzMj4sXG4gICAgY29sb3I6dmVjMzxmMzI+LFxuICAgIHJvdGF0aW9uOmYzMixcbiAgICBjZW50ZXI6dmVjMjxmMzI+LFxuICAgIG9wYWNpdHk6ZjMyLFxuICB9XG4gIEBiaW5kaW5nKCR7ZGVmaW5lcy5iaWxsYm9hcmRCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjx1bmlmb3JtPiBzZWxmVW5pZm9ybSA6IFNlbGZVbmlmb3JtO1xuICAjaWYke2RlZmluZXMuVVNFX0NPTE9SVEVYVFVSRX1cbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmJhc2VDb2xvclNhbXBsZXJCaW5kaW5nfSkgdmFyIGJhc2VDb2xvclNhbXBsZXI6IHNhbXBsZXI7XG4gICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5iYXNlQ29sb3JUZXh0dXJlQmluZGluZ30pIHZhciBiYXNlQ29sb3JUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XG4gICNlbmRpZlxuICBAZnJhZ21lbnRcbiAgZm4gbWFpbihpbnB1dDpWZXJ0ZXhPdXRwdXQpIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4ge1xuICAgICNpZiR7ZGVmaW5lcy5VU0VfQ09MT1JURVhUVVJFfVxuICAgICAgcmV0dXJuIHRleHR1cmVTYW1wbGUoYmFzZUNvbG9yVGV4dHVyZSwgYmFzZUNvbG9yU2FtcGxlciwgaW5wdXQudXYpO1xuICAgICNlbHNlXG4gICAgICByZXR1cm4gdmVjNDxmMzI+KHNlbGZVbmlmb3JtLmNvbG9yLHNlbGZVbmlmb3JtLm9wYWNpdHkpO1xuICAgICNlbmRpZlxuICB9XG4gIGBcbn0iLCJjb25zdCBwcmVwcm9jZXNzb3JTeW1ib2xzID0gLyMoW15cXHNdKikoXFxzKikvZ207XG4vLyBUZW1wbGF0ZSBsaXRlcmFsIHRhZyB0aGF0IGhhbmRsZXMgc2ltcGxlIHByZXByb2Nlc3NvciBzeW1ib2xzIGZvciBXR1NMXG4vLyBzaGFkZXJzLiBTdXBwb3J0cyAjaWYvZWxpZi9lbHNlL2VuZGlmIHN0YXRlbWVudHMuXG5leHBvcnQgZnVuY3Rpb24gd2dzbFBhcnNlRGVmaW5lcyhzdHJpbmdzLCAuLi52YWx1ZXMpIHtcblx0Y29uc3Qgc3RhdGVTdGFjayA9IFtdO1xuXHRsZXQgc3RhdGUgPSB7IGZyYWc6IFwiXCIsIGVsc2VJc1ZhbGlkOiBmYWxzZSwgZXhwcmVzc2lvbjogdHJ1ZSB9O1xuXHRsZXQgZGVwdGggPSAxO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5ncy5sZW5ndGg7ICsraSkge1xuXHRcdGNvbnN0IGZyYWcgPSBzdHJpbmdzW2ldO1xuXHRcdGNvbnN0IG1hdGNoZWRTeW1ib2xzID0gZnJhZy5tYXRjaEFsbChwcmVwcm9jZXNzb3JTeW1ib2xzKTtcblxuXHRcdGxldCBsYXN0SW5kZXggPSAwO1xuXHRcdGxldCB2YWx1ZUNvbnN1bWVkID0gZmFsc2U7XG5cblx0XHRmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZWRTeW1ib2xzKSB7XG5cdFx0XHRzdGF0ZS5mcmFnICs9IGZyYWcuc3Vic3RyaW5nKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpO1xuXG5cdFx0XHRzd2l0Y2ggKG1hdGNoWzFdKSB7XG5cdFx0XHRcdGNhc2UgXCJpZlwiOlxuXHRcdFx0XHRcdGlmIChtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCAhPSBmcmFnLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiI2lmIG11c3QgYmUgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSB0ZW1wbGF0ZSBleHByZXNzaW9uIChpZTogJHt2YWx1ZX0pXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR2YWx1ZUNvbnN1bWVkID0gdHJ1ZTtcblx0XHRcdFx0XHRzdGF0ZVN0YWNrLnB1c2goc3RhdGUpO1xuXHRcdFx0XHRcdGRlcHRoKys7XG5cdFx0XHRcdFx0c3RhdGUgPSB7IGZyYWc6IFwiXCIsIGVsc2VJc1ZhbGlkOiB0cnVlLCBleHByZXNzaW9uOiAhIXZhbHVlc1tpXSB9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiZWxpZlwiOlxuXHRcdFx0XHRcdGlmIChtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCAhPSBmcmFnLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiI2VsaWYgbXVzdCBiZSBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHRlbXBsYXRlIGV4cHJlc3Npb24gKGllOiAke3ZhbHVlfSlcIik7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICghc3RhdGUuZWxzZUlzVmFsaWQpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIiNlbGlmIG5vdCBwcmVjZWVkZWQgYnkgYW4gI2lmIG9yICNlbGlmXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR2YWx1ZUNvbnN1bWVkID0gdHJ1ZTtcblx0XHRcdFx0XHRpZiAoc3RhdGUuZXhwcmVzc2lvbiAmJiBzdGF0ZVN0YWNrLmxlbmd0aCAhPSBkZXB0aCkge1xuXHRcdFx0XHRcdFx0c3RhdGVTdGFjay5wdXNoKHN0YXRlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c3RhdGUgPSB7IGZyYWc6IFwiXCIsIGVsc2VJc1ZhbGlkOiB0cnVlLCBleHByZXNzaW9uOiAhIXZhbHVlc1tpXSB9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiZWxzZVwiOlxuXHRcdFx0XHRcdGlmICghc3RhdGUuZWxzZUlzVmFsaWQpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIiNlbHNlIG5vdCBwcmVjZWVkZWQgYnkgYW4gI2lmIG9yICNlbGlmXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoc3RhdGUuZXhwcmVzc2lvbiAmJiBzdGF0ZVN0YWNrLmxlbmd0aCAhPSBkZXB0aCkge1xuXHRcdFx0XHRcdFx0c3RhdGVTdGFjay5wdXNoKHN0YXRlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c3RhdGUgPSB7IGZyYWc6IG1hdGNoWzJdLCBlbHNlSXNWYWxpZDogZmFsc2UsIGV4cHJlc3Npb246IHRydWUgfTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImVuZGlmXCI6XG5cdFx0XHRcdFx0aWYgKCFzdGF0ZVN0YWNrLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiI2VuZGlmIG5vdCBwcmVjZWVkZWQgYnkgYW4gI2lmXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBicmFuY2hTdGF0ZSA9IHN0YXRlU3RhY2subGVuZ3RoID09IGRlcHRoID8gc3RhdGVTdGFjay5wb3AoKSA6IHN0YXRlO1xuXHRcdFx0XHRcdHN0YXRlID0gc3RhdGVTdGFjay5wb3AoKTtcblx0XHRcdFx0XHRkZXB0aC0tO1xuXHRcdFx0XHRcdGlmIChicmFuY2hTdGF0ZS5leHByZXNzaW9uKSB7XG5cdFx0XHRcdFx0XHRzdGF0ZS5mcmFnICs9IGJyYW5jaFN0YXRlLmZyYWc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHN0YXRlLmZyYWcgKz0gbWF0Y2hbMl07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Ly8gVW5rbm93biBwcmVwcm9jZXNzb3Igc3ltYm9sLiBFbWl0IGl0IGJhY2sgaW50byB0aGUgb3V0cHV0IGZyYWcgdW5jaGFuZ2VkLlxuXHRcdFx0XHRcdHN0YXRlLmZyYWcgKz0gbWF0Y2hbMF07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZSBmcmFnIGRpZG4ndCBlbmQgb24gb25lIG9mIHRoZSBwcmVwcm9jZXNzb3Igc3ltYm9scyBhcHBlbmQgdGhlIHJlc3Qgb2YgaXQgaGVyZS5cblx0XHRpZiAobGFzdEluZGV4ICE9IGZyYWcubGVuZ3RoKSB7XG5cdFx0XHRzdGF0ZS5mcmFnICs9IGZyYWcuc3Vic3RyaW5nKGxhc3RJbmRleCwgZnJhZy5sZW5ndGgpO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZSBuZXh0IHZhbHVlIHdhc24ndCBjb25zdW1lZCBieSB0aGUgcHJlcHJvY2Vzc29yIHN5bWJvbCwgYXBwZW5kIGl0IGhlcmUuXG5cdFx0aWYgKCF2YWx1ZUNvbnN1bWVkICYmIHZhbHVlcy5sZW5ndGggPiBpKSB7XG5cdFx0XHRzdGF0ZS5mcmFnICs9IHZhbHVlc1tpXTtcblx0XHR9XG5cdH1cblxuXHRpZiAoc3RhdGVTdGFjay5sZW5ndGgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJNaXNtYXRjaGVkICNpZi8jZW5kaWYgY291bnRcIik7XG5cdH1cblxuXHRyZXR1cm4gc3RhdGUuZnJhZztcbn1cbiIsIlxuaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XG5leHBvcnQgZnVuY3Rpb24gYmlsbGJvYXJkX3ZzKGRlZmluZXMpe1xuICByZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcblxuICAjaW5jbHVkZSA8VmVydGV4SW5wdXQ+XG4gICNpbmNsdWRlIDxWZXJ0ZXhPdXRwdXQ+XG4gICNpbmNsdWRlIDxTeXN0ZW1Vbmlmb3JtPlxuICBzdHJ1Y3QgU2VsZlVuaWZvcm0ge1xuICAgIG1vZGVsTWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgICBjb2xvcjp2ZWMzPGYzMj4sXG4gICAgcm90YXRpb246ZjMyLFxuICAgIGNlbnRlcjp2ZWMyPGYzMj4sXG4gICAgb3BhY2l0eTpmMzIsXG4gIH1cbiAgQGJpbmRpbmcoJHtkZWZpbmVzLmJpbGxib2FyZEJpbmRpbmd9KSBAZ3JvdXAoMCkgdmFyPHVuaWZvcm0+IHNlbGZVbmlmb3JtIDogU2VsZlVuaWZvcm07XG4gIEBiaW5kaW5nKCR7ZGVmaW5lcy5jYW1lcmFCaW5kaW5nfSkgQGdyb3VwKDEpIHZhcjx1bmlmb3JtPiBzeXN0ZW1Vbmlmb3JtIDogU3lzdGVtVW5pZm9ybTtcbiAgQHZlcnRleFxuICAgIGZuIG1haW4oaW5wdXQ6IFZlcnRleElucHV0KSAtPiBWZXJ0ZXhPdXRwdXQge1xuICAgIHZhciBvdXRwdXQ6VmVydGV4T3V0cHV0O1xuICAgIGxldCBtdlBvc2l0aW9uOnZlYzQ8ZjMyPj0geXN0ZW1Vbmlmb3JtLnZpZXdNYXRyaXggKnNlbGZVbmlmb3JtLm1vZGVsTWF0cml4KnZlYzQ8ZjMyPigwLjAsMC4wLDAuMCwgMS4wICk7XG4gICAgI2lmICR7ZGVmaW5lcy5IQVNfVVZ9XG4gICAgICAgb3V0cHV0LnV2PWlucHV0LnV2O1xuICAgICNlbmRpZlxuICAgIHZhciBzY2FsZTp2ZWMyPGYzMj47XG4gICAgc2NhbGUueCA9IGxlbmd0aCggdmVjMzxmMzI+KCBzZWxmVW5pZm9ybS5tb2RlbE1hdHJpeFsgMCBdLngsIHNlbGZVbmlmb3JtLm1vZGVsTWF0cml4WyAwIF0ueSwgc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXhbIDAgXS56ICkgKTtcbiAgICBzY2FsZS55ID0gbGVuZ3RoKCB2ZWMzPGYzMj4oIHNlbGZVbmlmb3JtLm1vZGVsTWF0cml4WyAxIF0ueCwgc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXhbIDEgXS55LCBzZWxmVW5pZm9ybS5tb2RlbE1hdHJpeFsgMSBdLnogKSApO1xuXG4gICAgdmVjMiBhbGlnbmVkUG9zaXRpb24gPSAoIGlucHV0LnBvc2l0aW9uLnh5IC0gKCBzZWxmVW5pZm9ybS5jZW50ZXIgLSB2ZWMyPGYzMj4oIDAuNSApICkgKSAqIHNjYWxlO1xuICAgIHZlYzIgcm90YXRlZFBvc2l0aW9uO1xuICAgIHJvdGF0ZWRQb3NpdGlvbi54ID0gY29zKCBzZWxmVW5pZm9ybS5yb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggLSBzaW4oIHNlbGZVbmlmb3JtLnJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcbiAgICByb3RhdGVkUG9zaXRpb24ueSA9IHNpbiggc2VsZlVuaWZvcm0ucm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54ICsgY29zKCBzZWxmVW5pZm9ybS5yb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XG4gICAgbXZQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247XG4gICAgb3V0cHV0LnBvc2l0aW9uID0gc3lzdGVtVW5pZm9ybS5wcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcbiAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbiAgYFxufSIsIi8vIGltcG9ydCBDb2xvciBmcm9tIFwiLi4vLi4vbWF0aC9Db2xvclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3JGcmFnKGRlZmluZXMpIHtcclxuICByZXR1cm4gYFxyXG4gICAgc3RydWN0IFZlcnRleE91dHB1dCB7XHJcbiAgICAgICAgQGJ1aWx0aW4ocG9zaXRpb24pIHBvc2l0aW9uOiB2ZWM0PGYzMj4sXHJcbiAgICAgICAgQGxvY2F0aW9uKDApIGNvbG9yOiB2ZWM0PGYzMj4sXHJcbiAgICB9O1xyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OlZlcnRleE91dHB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcbiAgICAgIHJldHVybiBpbnB1dC5jb2xvcjtcclxuICAgIH1cclxuICAgIGA7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3JWZXJ0KGRlZmluZXMpIHtcblx0cmV0dXJuIGBcbiAgIHN0cnVjdCBWZXJ0ZXhJbnB1dCB7XG4gICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMucG9zaXRpb25Mb2NhdGlvbn0pIHBvc2l0aW9uOiB2ZWMzPGYzMj4sICAgICAgIFxuICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLmNvbG9yTG9jYXRpb259KSBjb2xvcjogdmVjNDxmMzI+LFxuICAgfVxuICAgc3RydWN0IFZlcnRleE91dHB1dCB7XG4gICAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxuICAgICAgICBAbG9jYXRpb24oMCkgY29sb3I6IHZlYzQ8ZjMyPixcbiAgICB9O1xuICAgc3RydWN0IFNlbGZVbmlmb3JtIHtcbiAgICAgIG1vZGVsTWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgIH1cbiAgIHN0cnVjdCBTeXN0ZW1Vbmlmb3JtIHtcbiAgICAgIHByb2plY3Rpb25NYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgdmlld01hdHJpeDogbWF0NHg0PGYzMj4sXG4gICAgICBpbnZlcnNlVmlld01hdHJpeDogbWF0NHg0PGYzMj4sXG4gICAgICBjYW1lcmFQb3NpdGlvbjogdmVjMzxmMzI+LFxuICAgfTsgXG4gICBAYmluZGluZygke2RlZmluZXMuY29sb3JCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjx1bmlmb3JtPiBzZWxmVW5pZm9ybSA6IFNlbGZVbmlmb3JtO1xuICAgQGJpbmRpbmcoJHtkZWZpbmVzLmNhbWVyYUJpbmRpbmd9KSBAZ3JvdXAoMSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xuICAgQHZlcnRleFxuICAgZm4gbWFpbihpbnB1dDogVmVydGV4SW5wdXQpIC0+IFZlcnRleE91dHB1dCB7XG4gICAgdmFyIG91dHB1dDpWZXJ0ZXhPdXRwdXQ7XG4gICAgb3V0cHV0LmNvbG9yPWlucHV0LmNvbG9yO1xuICAgIG91dHB1dC5wb3NpdGlvbiA9IHN5c3RlbVVuaWZvcm0ucHJvamVjdGlvbk1hdHJpeCAqIHN5c3RlbVVuaWZvcm0udmlld01hdHJpeCAqc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXgqdmVjNDxmMzI+KGlucHV0LnBvc2l0aW9uLDEuMCk7XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgIH1cbiAgIGA7XG59XG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBicl9mcyhkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgICAgICAvLyByZWZlcmVuY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi1XZWJHTC1QQlIvYmxvYi9tYXN0ZXIvc2hhZGVycy9wYnItZnJhZy5nbHNsXG4gICAgICAgICNpbmNsdWRlIDxwYnJVdGlscz5cbiAgICAgICAgI2luY2x1ZGUgPGxpZ2h0PlxuICAgICAgICAjaW5jbHVkZSA8YnJkZj5cbiAgICAgICAgI2luY2x1ZGUgPFBick1hdGVyaWFsU3RydWN0PlxuICAgICAgICAjaW5jbHVkZSA8U3lzdGVtVW5pZm9ybT4gXG4gICAgICAgICNpbmNsdWRlIDxGcmFnSW5wdXQ+ICAgXG4gICAgICAgIHN0cnVjdCBQaHlzaWNhbE1hdGVyaWFsIHtcbiAgICAgICAgICAgIGRpZmZ1c2VDb2xvcjp2ZWMzPGYzMj4sXG4gICAgICAgICAgICByb3VnaG5lc3M6ZjMyLFxuICAgICAgICAgICAgc3BlY3VsYXJDb2xvcjp2ZWMzPGYzMj4sXG4gICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVH1cbiAgICAgICAgICAgICAgIGNsZWFyY29hdDpmMzIsXG4gICAgICAgICAgICAgICBjbGVhcmNvYXRSb3VnaG5lc3M6ZjMyLFxuICAgICAgICAgICAgICAgY2xlYXJjb2F0RjA6dmVjMzxmMzI+LFxuICAgICAgICAgICAgICAgY2xlYXJjb2F0RjkwOmYzMixcbiAgICAgICAgICAgI2VuZGlmXG5cbiAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0V9XG4gICAgICAgICAgICAgICBpcmlkZXNjZW5jZTpmMzIsXG4gICAgICAgICAgICAgICBpcmlkZXNjZW5jZUlPUjpmMzIsXG4gICAgICAgICAgICAgICBpcmlkZXNjZW5jZVRoaWNrbmVzczpmMzIsXG4gICAgICAgICAgICAgICBpcmlkZXNjZW5jZUZyZXNuZWw6dmVjMzxmMzI+LFxuICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VGMDp2ZWMzPGYzMj4sXG4gICAgICAgICAgICNlbmRpZlxuXG4gICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NIRUVOfVxuICAgICAgICAgICAgICAgc2hlZW5Db2xvcjp2ZWMzPGYzMj4sXG4gICAgICAgICAgICAgICBzaGVlblJvdWdobmVzczpmMzIsXG4gICAgICAgICAgICNlbmRpZlxuXG4gICAgICAgICAgICNpZiAke2RlZmluZXMuSU9SfVxuICAgICAgICAgICAgICAgIGlvcjpmMzIsXG4gICAgICAgICAgICNlbmRpZlxuXG4gICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RSQU5TTUlTU0lPTn1cbiAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbjpmMzIsXG4gICAgICAgICAgICAgICB0cmFuc21pc3Npb25BbHBoYTpmMzIsXG4gICAgICAgICAgICAgICB0aGlja25lc3M6ZjMyLFxuICAgICAgICAgICAgICAgYXR0ZW51YXRpb25EaXN0YW5jZTpmMzIsXG4gICAgICAgICAgICAgICBhdHRlbnVhdGlvbkNvbG9yOnZlYzM8ZjMyPixcbiAgICAgICAgICAgI2VuZGlmXG4gICAgICAgfTtcbiAgICAgICAgY29uc3QgTV9QSTpmMzIgPSAzLjE0MTU5MjY1MzU4OTc5MztcbiAgICAgICAgY29uc3QgY19NaW5Sb3VnaG5lc3M6ZjMyID0gMC4wNDtcbiAgICAgICAgI2luY2x1ZGUgPFRleHR1cmVBbmRTYW1wbGVyRGVmaW5lPlxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JQkx9XG4gICAgICAgICAgICAjaW5jbHVkZSA8aWJsPlxuICAgICAgICAjZW5kaWZcbiAgICAgICAgQGJpbmRpbmcoJHtkZWZpbmVzLnBickJpbmRpbmd9KSBAZ3JvdXAoMCkgdmFyPHVuaWZvcm0+IG1hdGVyaWFsVW5pZm9ybSA6IE1hdGVyaWFsVW5pZm9ybTtcbiAgICAgICAgQGJpbmRpbmcoJHtkZWZpbmVzLmNhbWVyYUJpbmRpbmd9KSBAZ3JvdXAoMSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xuICAgICAgICBAZnJhZ21lbnRcbiAgICAgICAgZm4gbWFpbihpbnB1dDpGcmFnSW5wdXQpIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4gXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBwZXJjZXB0dWFsUm91Z2huZXNzOmYzMiA9IG1hdGVyaWFsVW5pZm9ybS5yb3VnaG5lc3M7XG4gICAgICAgICAgICB2YXIgbWV0YWxsaWM6ZjMyID0gbWF0ZXJpYWxVbmlmb3JtLm1ldGFsbGljO1xuXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9NRVRBTE5FU1NURVhUVVJFfVxuICAgICAgICAgICAgICAgIGxldCBtclNhbXBsZTp2ZWM0PGYzMj4gPSB0ZXh0dXJlU2FtcGxlKG1ldGFsbmVzc1JvdWdobmVzc1RleHR1cmUsbWV0YWxuZXNzUm91Z2huZXNzU2FtcGxlciwgaW5wdXQudXYpO1xuICAgICAgICAgICAgICAgIHBlcmNlcHR1YWxSb3VnaG5lc3MgPSBtclNhbXBsZS5nICogcGVyY2VwdHVhbFJvdWdobmVzcztcbiAgICAgICAgICAgICAgICBtZXRhbGxpYyA9IG1yU2FtcGxlLmIgKiBtZXRhbGxpYztcbiAgICAgICAgICAgICNlbmRpZlxuICAgICAgICAgICAgcGVyY2VwdHVhbFJvdWdobmVzcyA9IGNsYW1wKHBlcmNlcHR1YWxSb3VnaG5lc3MsIGNfTWluUm91Z2huZXNzLCAxLjApO1xuICAgICAgICAgICAgbWV0YWxsaWMgPSBjbGFtcChtZXRhbGxpYywgMC4wLCAxLjApO1xuICAgICAgICAgICAgbGV0IGFscGhhUm91Z2huZXNzOmYzMiA9IHBlcmNlcHR1YWxSb3VnaG5lc3MgKiBwZXJjZXB0dWFsUm91Z2huZXNzO1xuXG5cbiAgICAgICAgICAgIC8vIFRoZSBhbGJlZG8gbWF5IGJlIGRlZmluZWQgZnJvbSBhIGJhc2UgdGV4dHVyZSBvciBhIGZsYXQgY29sb3JcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RFWFRVUkV9XG4gICAgICAgICAgICAgICAgbGV0IGJhc2VDb2xvcjp2ZWM0PGYzMj4gPSB0ZXh0dXJlU2FtcGxlKGJhc2VDb2xvclRleHR1cmUsYmFzZUNvbG9yU2FtcGxlciwgaW5wdXQudXYpIDtcbiAgICAgICAgICAgICNlbHNlXG4gICAgICAgICAgICAgICAgbGV0IGJhc2VDb2xvcjp2ZWM0PGYzMj4gPSB2ZWM0PGYzMj4obWF0ZXJpYWxVbmlmb3JtLmNvbG9yLDEuMCk7XG4gICAgICAgICAgICAjZW5kaWZcblxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTk9STUFMVEVYVFVSRX1cbiAgICAgICAgICAgICAgICBsZXQgbjp2ZWMzPGYzMj4gPSBnZXROb3JtYWxCeU5vcm1hbFRleHR1cmUoaW5wdXQpOyAgXG4gICAgICAgICAgICAjZWxzZVxuICAgICAgICAgICAgICAgIGxldCBuOnZlYzM8ZjMyPiA9IGdldE5vcm1hbChpbnB1dCk7XG4gICAgICAgICAgICAjZW5kaWZcbiAgICAgICAgICAgIHZhciBtYXRlcmlhbDpQaHlzaWNhbE1hdGVyaWFsO1xuICAgICAgICAgICAgbWF0ZXJpYWwuZGlmZnVzZUNvbG9yPWJhc2VDb2xvci5yZ2IqKCAxLjAgLSBtZXRhbGxpYyApO1xuICAgICAgICAgICAgbWF0ZXJpYWwucm91Z2huZXNzPXBlcmNlcHR1YWxSb3VnaG5lc3M7XG4gICAgICAgICAgICBtYXRlcmlhbC5zcGVjdWxhckNvbG9yPW1peCggdmVjMzxmMzI+KCAwLjA0KSwgYmFzZUNvbG9yLnJnYiwgbWV0YWxsaWMgKTtcbiAgICAgICAgICAgIHZhciBnZW9tZXRyeTpHZW9tZXRyeTtcbiAgICAgICAgICAgIGdlb21ldHJ5Lm5vcm1hbD1uO1xuICAgICAgICAgICAgZ2VvbWV0cnkudmlld0Rpcj1ub3JtYWxpemUoc3lzdGVtVW5pZm9ybS5jYW1lcmFQb3NpdGlvbiAtIGlucHV0LndvcmxkUG9zKTtcbiAgICAgICAgICAgIGdlb21ldHJ5LnBvc2l0aW9uPWlucHV0LndvcmxkUG9zO1xuICAgICAgICAgICAgZ2VvbWV0cnkuZG90TlYgPSBzYXR1cmF0ZShkb3QoZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyKSApO1xuICAgICAgICAgICAgLy9saWdodCBzaGFkaW5nXG4gICAgICAgICAgICB2YXIgcmVmbGVjdGVkTGlnaHQ9cGFyc2VMaWdodHMoZ2VvbWV0cnksbWF0ZXJpYWwpO1xuICAgICAgICAgICAgdmFyIGNvbG9yPXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UrcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXI7XG4gICAgICAgICAgICAvL0lCTFxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSUJMICYmIGRlZmluZXMuSEFTX1VWfVxuICAgICAgICAgICAgICAgIHZhciByZWZsZWN0ZWRMaWdodERpZmZ1c2U9aW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKGdlb21ldHJ5LG1hdGVyaWFsKTtcbiAgICAgICAgICAgICAgICB2YXIgcmVmbGVjdGVkTGlnaHRTcGVjdWxhcj1pbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKGdlb21ldHJ5LG1hdGVyaWFsKTtcbiAgICAgICAgICAgICAgICBjb2xvcis9cmVmbGVjdGVkTGlnaHREaWZmdXNlLmluZGlyZWN0RGlmZnVzZTtcbiAgICAgICAgICAgICAgICBjb2xvcis9cmVmbGVjdGVkTGlnaHRTcGVjdWxhci5pbmRpcmVjdFNwZWN1bGFyO1xuICAgICAgICAgICAgI2VuZGlmXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9BT1RFWFRVUkV9XG4gICAgICAgICAgICAgICAgbGV0IGFvOmYzMiA9IHRleHR1cmVTYW1wbGUoYW9UZXh0dXJlLGFvU2FtcGxlciwgaW5wdXQudXYpLnI7XG4gICAgICAgICAgICAgICAgY29sb3IgPSBtaXgoY29sb3IsIGNvbG9yICogYW8sIG1hdGVyaWFsVW5pZm9ybS5vY2NsdXNpb25TdHJlbmd0aCk7XG4gICAgICAgICAgICAjZW5kaWZcblxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfRU1JU1NJVkVURVhUVVJFfVxuICAgICAgICAgICAgICAgIGxldCBlbWlzc2l2ZTp2ZWMzPGYzMj4gPSB0ZXh0dXJlU2FtcGxlKGVtaXNzaXZlVGV4dHVyZSwgZW1pc3NpdmVTYW1wbGVyLGlucHV0LnV2KS5yZ2IgO1xuICAgICAgICAgICAgICAgIGNvbG9yICs9IGVtaXNzaXZlO1xuICAgICAgICAgICAgI2VuZGlmXG4gICAgICAgcmV0dXJuIHZlYzQ8ZjMyPihjb2xvciwgYmFzZUNvbG9yLmEpO1xuICAgIH1cbiAgIGA7XG59XG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBicl92cyhkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgICNpbmNsdWRlIDxQYnJNYXRlcmlhbFN0cnVjdD5cbiAgICAjaW5jbHVkZSA8U3lzdGVtVW5pZm9ybT5cbiAgICAjaW5jbHVkZSA8VmVydGV4SW5wdXQ+XG4gICAgI2luY2x1ZGUgPFZlcnRleE91dHB1dD4gXG4gICAgI2luY2x1ZGUgPHNraW5WZXJ0SGVhZGVyPlxuICAgICNpbmNsdWRlIDxpbnN0YW5jZVZlcnRIZWFkZXI+XG4gICAgQGJpbmRpbmcoJHtkZWZpbmVzLnBickJpbmRpbmd9KSBAZ3JvdXAoMCkgdmFyPHVuaWZvcm0+IG1hdGVyaWFsVW5pZm9ybSA6IE1hdGVyaWFsVW5pZm9ybTtcbiAgICBAYmluZGluZygke2RlZmluZXMuY2FtZXJhQmluZGluZ30pIEBncm91cCgxKSB2YXI8dW5pZm9ybT4gc3lzdGVtVW5pZm9ybSA6IFN5c3RlbVVuaWZvcm07XG4gICAgQHZlcnRleFxuICAgIGZuIG1haW4oaW5wdXQ6IFZlcnRleElucHV0KS0+IFZlcnRleE91dHB1dFxuICAge1xuICAgICAgICB2YXIgb3V0cHV0OiBWZXJ0ZXhPdXRwdXQ7XG4gICAgICAgICNpZiAke2RlZmluZXMuSEFTX1VWfVxuICAgICAgICAgICAgb3V0cHV0LnV2ID0gaW5wdXQudXY7XG4gICAgICAgICNlbmRpZlxuICAgICAgICB2YXIgbW9kZWxNYXRyaXg6bWF0NHg0PGYzMj47XG4gICAgICAgIHZhciB2Tm9ybWFsVmlldzp2ZWMzPGYzMj47XG4gICAgICAgIHZOb3JtYWxWaWV3ID0gbm9ybWFsaXplKG1hdGVyaWFsVW5pZm9ybS5ub3JtYWxNYXRyaXggKiB2ZWM0PGYzMj4oaW5wdXQubm9ybWFsLDAuMCkpLnh5ejtcbiAgICAgICAgbW9kZWxNYXRyaXg9bWF0ZXJpYWxVbmlmb3JtLm1vZGVsTWF0cml4OyAgIFxuICAgICAgICAjaW5jbHVkZSA8c2tpblZlcnRNYWluPlxuICAgICAgICAjaW5jbHVkZSA8aW5zdGFuY2VWZXJ0TWFpbj4gIFxuICAgICAgICBvdXRwdXQubm9ybWFsID0gdk5vcm1hbFZpZXcueHl6O1xuICAgICAgICBvdXRwdXQucG9zaXRpb24gPSBzeXN0ZW1Vbmlmb3JtLnByb2plY3Rpb25NYXRyaXggKiBzeXN0ZW1Vbmlmb3JtLnZpZXdNYXRyaXggKm1vZGVsTWF0cml4KiB2ZWM0PGYzMj4oaW5wdXQucG9zaXRpb24sIDEuMCk7XG4gICAgICAgIGxldCBtb2RlbFBvcz1tb2RlbE1hdHJpeCAqdmVjNDxmMzI+KGlucHV0LnBvc2l0aW9uLDEuMCk7XG4gICAgICAgIG91dHB1dC53b3JsZFBvcyA9IG1vZGVsUG9zLnh5ei9tb2RlbFBvcy53O1xuICAgICAgICByZXR1cm4gb3V0cHV0OyAgIFxuICAgfVxuICAgYDtcbn1cbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGJyRnJhZyhkZWZpbmVzKSB7XHJcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXHJcbiAgICAjaW5jbHVkZSA8bGlnaHRDb21tb24+XHJcbiAgICAjaW5jbHVkZSA8bGlnaHQ+XHJcbiAgICAjaW5jbHVkZSA8YnJkZj5cclxuICAgICNpbmNsdWRlIDxwYnJTdHJ1Y3Q+XHJcbiAgICAjaW5jbHVkZSA8cGJyVXRpbHM+XHJcbiAgICAjaW5jbHVkZSA8cGJyRnVuY3Rpb24+XHJcbiAgICAjaW5jbHVkZSA8cGJyVGV4dHVyZT5cclxuICAgICNpbmNsdWRlIDxlbnZpcm9ubWVudD5cclxuICAgIHN0cnVjdCBTeXN0ZW1Vbmlmb3JtIHtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgICB2aWV3TWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgICBpbnZlcnNlVmlld01hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgICAgY2FtZXJhUG9zaXRpb246IHZlYzM8ZjMyPixcclxuICAgIH07IFxyXG4gICAgLy8gdW5pZm9ybSB2ZWMzIGxpZ2h0UHJvYmVbOV0sXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5zdHJ1Y3QgVmVydGV4T3V0cHV0IHtcclxuICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxyXG4gICAgQGJ1aWx0aW4oZnJvbnRfZmFjaW5nKSBpc19mcm9udDogYm9vbCxcclxuICAgIEBsb2NhdGlvbigwKSB2VXY6IHZlYzI8ZjMyPixcclxuICAgIEBsb2NhdGlvbigxKSB2Vmlld1Bvc2l0aW9uOiB2ZWMzPGYzMj4sIC8vIFZlY3RvciBmcm9tIHZlcnRleCB0byBjYW1lcmEuXHJcbiAgICBAbG9jYXRpb24oMikgdldvcmxkUG9zaXRpb246IHZlYzM8ZjMyPixcclxuICAgIEBsb2NhdGlvbigzKSB2Tm9ybWFsOiB2ZWMzPGYzMj4sXHJcbiAgICAvLyDlj6/pgIlcclxuICAgICNpZiAke2RlZmluZXMuVVNFX0xJR0hUVEVYVFVSRSB8fCBkZWZpbmVzLlVTRV9BT1RFWFRVUkV9XHJcbiAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy52VXYyT3V0TG9jYXRpb259KSB2VXYyOiB2ZWMyPGYzMj4sXHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9DT0xPUl9BTFBIQX1cclxuICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnZDb2xvck91dExvY2F0aW9ufSkgdkNvbG9yOiB2ZWM0PGYzMj4sXHJcbiAgICAjZWxpZiAke2RlZmluZXMuVVNFX0NPTE9SIHx8IGRlZmluZXMuVVNFX0lOU1RBTkNJTkdfQ09MT1J9XHJcbiAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy52Q29sb3JPdXRMb2NhdGlvbn0pIHZDb2xvcjogdmVjMzxmMzI+LFxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfVEFOR0VOVH1cclxuICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnZUYW5nZW50T3V0TG9jYXRpb259KSB2VGFuZ2VudDogdmVjMzxmMzI+LFxyXG4gICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMudkJpdGFuZ2VudE91dExvY2F0aW9ufSkgdkJpdGFuZ2VudDogdmVjMzxmMzI+LFxyXG4gICAgI2VuZGlmXHJcbn07XHJcbiAgICAgICAgc3RydWN0IFBoeXNpY2FsTWF0ZXJpYWwge1xyXG4gICAgICAgICAgICAgZGlmZnVzZUNvbG9yOnZlYzM8ZjMyPixcclxuICAgICAgICAgICAgIHJvdWdobmVzczpmMzIsXHJcbiAgICAgICAgICAgICBzcGVjdWxhckNvbG9yOnZlYzM8ZjMyPixcclxuICAgICAgICAgICAgIHNwZWN1bGFyRjkwOmYzMixcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUfVxyXG4gICAgICAgICAgICAgICAgY2xlYXJjb2F0OmYzMixcclxuICAgICAgICAgICAgICAgIGNsZWFyY29hdFJvdWdobmVzczpmMzIsXHJcbiAgICAgICAgICAgICAgICBjbGVhcmNvYXRGMDp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgICAgICBjbGVhcmNvYXRGOTA6ZjMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAgICAgICAgICAgICAgaXJpZGVzY2VuY2U6ZjMyLFxyXG4gICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VJT1I6ZjMyLFxyXG4gICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VUaGlja25lc3M6ZjMyLFxyXG4gICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VGcmVzbmVsOnZlYzM8ZjMyPixcclxuICAgICAgICAgICAgICAgIGlyaWRlc2NlbmNlRjA6dmVjMzxmMzI+LFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NIRUVOfVxyXG4gICAgICAgICAgICAgICAgc2hlZW5Db2xvcjp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgICAgICBzaGVlblJvdWdobmVzczpmMzIsXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5JT1J9XHJcbiAgICAgICAgICAgICAgICAgaW9yOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UUkFOU01JU1NJT059XHJcbiAgICAgICAgICAgICAgICB0cmFuc21pc3Npb246ZjMyLFxyXG4gICAgICAgICAgICAgICAgdHJhbnNtaXNzaW9uQWxwaGE6ZjMyLFxyXG4gICAgICAgICAgICAgICAgdGhpY2tuZXNzOmYzMixcclxuICAgICAgICAgICAgICAgIGF0dGVudWF0aW9uRGlzdGFuY2U6ZjMyLFxyXG4gICAgICAgICAgICAgICAgYXR0ZW51YXRpb25Db2xvcjp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgIH07XHJcbkBiaW5kaW5nKDApIEBncm91cCgwKSB2YXI8dW5pZm9ybT4gbWF0ZXJpYWxVbmlmb3JtIDogTWF0ZXJpYWxVbmlmb3JtO1xyXG5AYmluZGluZygwKSBAZ3JvdXAoMSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xyXG5AZnJhZ21lbnRcclxuZm4gbWFpbihpbnB1dDpWZXJ0ZXhPdXRwdXQpLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgdmFyIGRpZmZ1c2VDb2xvcjp2ZWM0PGYzMj4gPSB2ZWM0KG1hdGVyaWFsVW5pZm9ybS5kaWZmdXNlLCBtYXRlcmlhbFVuaWZvcm0ub3BhY2l0eSApO1xyXG4gICAgICAgLy8gUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcclxuICAgICAgICB2YXIgcmVmbGVjdGVkTGlnaHQ6UmVmbGVjdGVkTGlnaHQ7XHJcbiAgICAgICAgdmFyIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTp2ZWMzPGYzMj4gPSBtYXRlcmlhbFVuaWZvcm0uZW1pc3NpdmU7XHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEVYVFVSRX1cclxuICAgICAgICAgICAgdmFyIHNhbXBsZWREaWZmdXNlQ29sb3I6dmVjNDxmMzI+ID10ZXh0dXJlU2FtcGxlKGJhc2VUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KTtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5ERUNPREVfVklERU9fVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIHNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0PGYzMj4oIG1peCggcG93KCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzM8ZjMyPiggMC4wNTIxMzI3MDE0ICksIHZlYzM8ZjMyPiggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzM8ZjMyPiggbGVzc1RoYW5FcXVhbCggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IsIHZlYzM8ZjMyPiggMC4wNDA0NSApICkgKSApLCBzYW1wbGVkRGlmZnVzZUNvbG9yLncgKTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICBkaWZmdXNlQ29sb3IgKj0gc2FtcGxlZERpZmZ1c2VDb2xvcjtcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgdmFyIHJvdWdobmVzc0ZhY3RvcjpmMzIgPSBtYXRlcmlhbFVuaWZvcm0ucm91Z2huZXNzO1xyXG4gICAgXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfUk9VR0hORVNTVEVYVFVSRX1cclxuICAgICAgICAgICAgbGV0IHRleGVsUm91Z2huZXNzOnZlYzQ8ZjMyPj10ZXh0dXJlU2FtcGxlKHJvdWdobmVzc1RleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpO1xyXG4gICAgICAgICAgICByb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZztcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgdmFyIG1ldGFsbmVzc0ZhY3RvcjpmMzIgPSBtYXRlcmlhbFVuaWZvcm0ubWV0YWxuZXNzO1xyXG4gICAgXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTUVUQUxORVNTVEVYVFVSRX1cclxuICAgICAgICAgICAgbGV0IHRleGVsTWV0YWxuZXNzOnZlYzQ8ZjMyPiA9dGV4dHVyZVNhbXBsZShtZXRhbG5lc3NUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KTtcclxuICAgICAgICAgICAgbWV0YWxuZXNzRmFjdG9yICo9IHRleGVsTWV0YWxuZXNzLmI7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgIGxldCBmYWNlRGlyZWN0aW9uOmYzMiA9c2VsZWN0KC0xLjAsMS4wLGlucHV0LmlzX2Zyb250KTtcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLkZMQVRfU0hBREVEfVxyXG4gICAgICAgICAgICBsZXQgZmR4OnZlYzM8ZjMyPiA9IGRwZHgoIGlucHV0LnZWaWV3UG9zaXRpb24gKTtcclxuICAgICAgICAgICAgbGV0IGZkeTp2ZWMzPGYzMj4gPSBkcGR5KCBpbnB1dC52Vmlld1Bvc2l0aW9uICk7XHJcbiAgICAgICAgICAgIGxldCBub3JtYWw6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBjcm9zcyggZmR5LCBmZHggKSApO1xyXG4gICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgIGxldCBub3JtYWw6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBpbnB1dC52Tm9ybWFsICk7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuRE9VQkxFX1NJREVEfVxyXG4gICAgICAgICAgICAgICAgbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RBTkdFTlR9XHJcbiAgICAgICAgICAgICAgICBsZXQgdGFuZ2VudDp2ZWMzPGYzMj4gPSBub3JtYWxpemUoIGlucHV0LnZUYW5nZW50ICk7XHJcbiAgICAgICAgICAgICAgICBsZXQgYml0YW5nZW50OnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggaW5wdXQudkJpdGFuZ2VudCApO1xyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5ET1VCTEVfU0lERUR9XHJcbiAgICAgICAgICAgICAgICAgICAgdGFuZ2VudCA9IHRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGJpdGFuZ2VudCA9IGJpdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuVEFOR0VOVFNQQUNFX05PUk1BTFRFWFRVUkUgfHwgZGVmaW5lcy5VU0VfQ0xFQVJDT0FUX05PUk1BTFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZUQk46bWF0M3gzPGYzMj4gPSBtYXQzeDM8ZjMyPiggdGFuZ2VudCwgYml0YW5nZW50LCBub3JtYWwgKTtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuICAgIFxyXG4gICAgICAgIGxldCBnZW9tZXRyeU5vcm1hbDp2ZWMzPGYzMj4gPSBub3JtYWw7XHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuT0JKRUNUU1BBQ0VfTk9STUFMVEVYVFVSRX1cclxuICAgICAgICAgICAgbm9ybWFsID10ZXh0dXJlU2FtcGxlKG5vcm1hbFRleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpLnh5eiAqIDIuMCAtIDEuMDtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5GTElQX1NJREVEfVxyXG4gICAgICAgICAgICAgICAgbm9ybWFsID0gLSBub3JtYWw7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLkRPVUJMRV9TSURFRH1cclxuICAgICAgICAgICAgICAgIG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgbm9ybWFsID0gbm9ybWFsaXplKG1hdGVyaWFsVW5pZm9ybS5ub3JtYWxNYXRyaXggKiBub3JtYWwgKTtcclxuXHJcbiAgICAgICAgICAgICNlbGlmICR7ZGVmaW5lcy5UQU5HRU5UU1BBQ0VfTk9STUFMVEVYVFVSRX1cclxuICAgICAgICAgICAgbGV0IHRlbXBNYXBOOnZlYzM8ZjMyPiA9dGV4dHVyZVNhbXBsZShub3JtYWxUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KS54eXogKiAyLjAgLSAxLjA7XHJcbiAgICAgICAgICAgIGxldCBtYXBOOnZlYzM8ZjMyPiA9dGVtcE1hcE4ueHkgKj0gbWF0ZXJpYWxVbmlmb3JtLm5vcm1hbFNjYWxlO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UQU5HRU5UfVxyXG4gICAgICAgICAgICAgICAgbm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogbWFwTiApO1xyXG4gICAgICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAgICAgbm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gaW5wdXQudlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2VsaWYgJHtkZWZpbmVzLlVTRV9CVU1QVEVYVFVSRX1cclxuXHJcbiAgICAgICAgICAgICAgICBub3JtYWwgPSBwZXJ0dXJiTm9ybWFsQXJiKCAtIGlucHV0LnZWaWV3UG9zaXRpb24sIG5vcm1hbCwgZEhkeHlfZndkKCksIGZhY2VEaXJlY3Rpb24gKTtcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUfVxyXG4gICAgICAgICAgICB2YXIgY2xlYXJjb2F0Tm9ybWFsOnZlYzM8ZjMyPiA9IGdlb21ldHJ5Tm9ybWFsO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVF9OT1JNQUxURVhUVVJFfVxyXG4gICAgICAgICAgICB2YXIgY2xlYXJjb2F0TWFwTjp2ZWMzPGYzMj4gPXRleHR1cmVTYW1wbGUoY2xlYXJjb2F0Tm9ybWFsVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdikueHl6ICogMi4wIC0gMS4wO1xyXG4gICAgICAgICAgICBjbGVhcmNvYXRNYXBOLnh5ICo9IG1hdGVyaWFsVW5pZm9ybS5jbGVhcmNvYXROb3JtYWxTY2FsZTtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEFOR0VOVH1cclxuICAgICAgICAgICAgICAgIGNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTtcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIGNsZWFyY29hdE5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIGlucHV0LnZWaWV3UG9zaXRpb24sIGNsZWFyY29hdE5vcm1hbCwgY2xlYXJjb2F0TWFwTiwgZmFjZURpcmVjdGlvbiApO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9FTUlTU0lWRVRFWFRVUkV9XHJcbiAgICAgICAgICAgIGxldCBlbWlzc2l2ZUNvbG9yOnZlYzQ8ZjMyPiA9dGV4dHVyZVNhbXBsZShlbWlzc2l2ZVRleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpO1xyXG4gICAgICAgICAgICB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgKj0gZW1pc3NpdmVDb2xvci5yZ2I7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgIHZhciBtYXRlcmlhbDpQaHlzaWNhbE1hdGVyaWFsO1xyXG4gICAgICAgIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xyXG4gICAgICAgIGxldCBkeHk6dmVjMzxmMzI+ID0gbWF4KCBhYnMoIGRwZHgoIGdlb21ldHJ5Tm9ybWFsICkgKSwgYWJzKCBkcGR5KCBnZW9tZXRyeU5vcm1hbCApICkgKTtcclxuICAgICAgICBsZXQgZ2VvbWV0cnlSb3VnaG5lc3M6ZjMyID0gbWF4KCBtYXgoIGR4eS54LCBkeHkueSApLCBkeHkueiApO1xyXG4gICAgICAgIG1hdGVyaWFsLnJvdWdobmVzcyA9IG1heCggcm91Z2huZXNzRmFjdG9yLCAwLjA1MjUgKTtcclxuICAgICAgICBtYXRlcmlhbC5yb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7XHJcbiAgICAgICAgbWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApO1xyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLklPUn1cclxuICAgICAgICAgICAgbWF0ZXJpYWwuaW9yID0gbWF0ZXJpYWxVbmlmb3JtLmlvcjtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5TUEVDVUxBUn1cclxuICAgICAgICAgICAgICAgIGxldCBzcGVjdWxhckludGVuc2l0eUZhY3RvcjpmMzIgPSBtYXRlcmlhbFVuaWZvcm0uc3BlY3VsYXJJbnRlbnNpdHk7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3BlY3VsYXJDb2xvckZhY3Rvcjp2ZWMzPGYzMj4gPSBtYXRlcmlhbFVuaWZvcm0uc3BlY3VsYXJDb2xvcjtcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NQRUNVTEFSSU5URU5TSVRZVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBzcGVjdWxhckludGVuc2l0eUZhY3RvciAqPXRleHR1cmVTYW1wbGUoc3BlY3VsYXJJbnRlbnNpdHlUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KS5hO1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU1BFQ1VMQVJDT0xPUlRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXJDb2xvckZhY3RvciAqPXRleHR1cmVTYW1wbGUoc3BlY3VsYXJDb2xvclRleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpLnJnYjtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gbWl4KCBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgMS4wLCBtZXRhbG5lc3NGYWN0b3IgKTtcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIGxldCBzcGVjdWxhckludGVuc2l0eUZhY3RvcjpmMzIgPSAxLjA7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3BlY3VsYXJDb2xvckZhY3Rvcjp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIDEuMCApO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICBtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCBtaW4oIHBvdzIoICggbWF0ZXJpYWwuaW9yIC0gMS4wICkgLyAoIG1hdGVyaWFsLmlvciArIDEuMCApICkgKiBzcGVjdWxhckNvbG9yRmFjdG9yLCB2ZWMzKCAxLjAgKSApICogc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xyXG4gICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzM8ZjMyPiggMC4wNCApLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUfVxyXG4gICAgICAgICAgICBtYXRlcmlhbC5jbGVhcmNvYXQgPSBtYXRlcmlhbFVuaWZvcm0uY2xlYXJjb2F0O1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXRlcmlhbFVuaWZvcm0uY2xlYXJjb2F0Um91Z2huZXNzO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5jbGVhcmNvYXRGMCA9IHZlYzM8ZjMyPiggMC4wNCApO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5jbGVhcmNvYXRGOTAgPSAxLjA7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5jbGVhcmNvYXQgKj10ZXh0dXJlU2FtcGxlKGNsZWFyY29hdFRleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpLng7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVRfUk9VR0hORVNTVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyAqPXRleHR1cmVTYW1wbGUoY2xlYXJjb2F0Um91Z2huZXNzVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdikueTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmNsZWFyY29hdCA9IHNhdHVyYXRlKCBtYXRlcmlhbC5jbGVhcmNvYXQgKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWF4KCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDAuMDUyNSApO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAxLjAgKTtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JUklERVNDRU5DRX1cclxuICAgICAgICAgICAgbWF0ZXJpYWwuaXJpZGVzY2VuY2UgPSBtYXRlcmlhbFVuaWZvcm0uaXJpZGVzY2VuY2U7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmlyaWRlc2NlbmNlSU9SID0gbWF0ZXJpYWxVbmlmb3JtLmlyaWRlc2NlbmNlSU9SO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JUklERVNDRU5DRVRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5pcmlkZXNjZW5jZSAqPXRleHR1cmVTYW1wbGUoaXJpZGVzY2VuY2VUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KS5yO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0VfVEhJQ0tORVNTVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmlyaWRlc2NlbmNlVGhpY2tuZXNzID0gKG1hdGVyaWFsVW5pZm9ybS5pcmlkZXNjZW5jZVRoaWNrbmVzc01heGltdW0gLSBtYXRlcmlhbFVuaWZvcm0uaXJpZGVzY2VuY2VUaGlja25lc3NNaW5pbXVtKSAqIHRleHR1cmVTYW1wbGUoaXJpZGVzY2VuY2VUaGlja25lc3NUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KS5nICsgbWF0ZXJpYWxVbmlmb3JtLmlyaWRlc2NlbmNlVGhpY2tuZXNzTWluaW11bTtcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmlyaWRlc2NlbmNlVGhpY2tuZXNzID0gbWF0ZXJpYWxVbmlmb3JtLmlyaWRlc2NlbmNlVGhpY2tuZXNzTWF4aW11bTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0hFRU59XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNoZWVuQ29sb3IgPSBtYXRlcmlhbFVuaWZvcm0uc2hlZW5Db2xvcjtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0hFRU5DT0xPUlRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zaGVlbkNvbG9yICo9dGV4dHVyZVNhbXBsZShzaGVlbkNvbG9yVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdikucmdiO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggbWF0ZXJpYWxVbmlmb3JtLnNoZWVuUm91Z2huZXNzLCAwLjA3LCAxLjAgKTtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0hFRU5ST1VHSE5FU1NURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKj10ZXh0dXJlU2FtcGxlKHNoZWVuUm91Z2huZXNzVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdikuYTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIGdlb21ldHJ5Okdlb21ldHJpY0NvbnRleHQ7XHJcbiAgICAgICAgZ2VvbWV0cnkucG9zaXRpb24gPSAtIGlucHV0LnZWaWV3UG9zaXRpb247XHJcbiAgICAgICAgZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsO1xyXG4gICAgICAgLy8gZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggaW5wdXQudlZpZXdQb3NpdGlvbiApO1xyXG4gICAgICAgIGdlb21ldHJ5LnZpZXdEaXIgPSBub3JtYWxpemUoIGlucHV0LnZWaWV3UG9zaXRpb24pOyBcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUfVxyXG4gICAgICAgICAgICBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwgPSBjbGVhcmNvYXROb3JtYWw7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAgICAgICAgICBsZXQgZG90TlZpOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XHJcbiAgICAgICAgICAgIGlmICggbWF0ZXJpYWwuaXJpZGVzY2VuY2VUaGlja25lc3MgPT0gMC4wICkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuaXJpZGVzY2VuY2UgPSAwLjA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5pcmlkZXNjZW5jZSA9IHNhdHVyYXRlKCBtYXRlcmlhbC5pcmlkZXNjZW5jZSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICggbWF0ZXJpYWwuaXJpZGVzY2VuY2UgPiAwLjAgKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5pcmlkZXNjZW5jZUZyZXNuZWwgPSBldmFsSXJpZGVzY2VuY2UoIDEuMCwgbWF0ZXJpYWwuaXJpZGVzY2VuY2VJT1IsIGRvdE5WaSwgbWF0ZXJpYWwuaXJpZGVzY2VuY2VUaGlja25lc3MsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmlyaWRlc2NlbmNlRjAgPSBTY2hsaWNrX3RvX0YwKCBtYXRlcmlhbC5pcmlkZXNjZW5jZUZyZXNuZWwsIDEuMCwgZG90TlZpICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgdmFyIGlibElycmFkaWFuY2U6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KCAwLjAgKTtcclxuICAgICAgICB2YXIgaXJyYWRpYW5jZTp2ZWMzPGYzMj4gPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKGNvbW1vbkxpZ2h0c1Bhcm1zLmFtYmllbnQpO1xyXG4gICAgICAgIC8vaXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsLHN5c3RlbVVuaWZvcm0udmlld01hdHJpeCApO1xyXG5cclxuICAgICAgICB2YXIgcmFkaWFuY2U6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KCAwLjAgKTtcclxuICAgICAgICB2YXIgY2xlYXJjb2F0UmFkaWFuY2U6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KCAwLjAgKTtcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTElHSFRURVhUVVJFfVxyXG4gICAgICAgICAgICBsZXQgbGlnaHRNYXBUZXhlbDp2ZWM0PGYzMj4gPXRleHR1cmVTYW1wbGUobGlnaHRUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2Mik7XHJcbiAgICAgICAgICAgIGxldCBsaWdodE1hcElycmFkaWFuY2U6dmVjMzxmMzI+ID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBtYXRlcmlhbFVuaWZvcm0ubGlnaHRUZXh0dXJlSW50ZW5zaXR5O1xyXG4gICAgICAgICAgICBpcnJhZGlhbmNlICs9IGxpZ2h0TWFwSXJyYWRpYW5jZTtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAvLyYmIGRlZmluZXMuU1RBTkRBUkQmJmRlZmluZXMuRU5WVEVYVFVSRV9UWVBFX0NVQkVfVVZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9FTlZURVhUVVJFfSBcclxuICAgICAgICAgICAgaWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwsYmFzZVNhbXBsZXIsc3lzdGVtVW5pZm9ybS52aWV3TWF0cml4ICk7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfRU5WVEVYVFVSRX1cclxuICAgICAgICAgICAgcmFkaWFuY2UgKz0gZ2V0SUJMUmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsYmFzZVNhbXBsZXIsc3lzdGVtVW5pZm9ybS52aWV3TWF0cml4LCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsVW5pZm9ybS5yb3VnaG5lc3MgKTtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUfVxyXG4gICAgICAgICAgICAgICAgY2xlYXJjb2F0UmFkaWFuY2UgKz0gZ2V0SUJMUmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsYmFzZVNhbXBsZXIsc3lzdGVtVW5pZm9ybS52aWV3TWF0cml4LCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAvL+ebtOaOpeWFieeFp1xyXG4gICAgICAgICAgICBsZXQgZGlyUmVmbGVjdGVkTGlnaHQ6UmVmbGVjdGVkTGlnaHQ9IHBhcnNlTGlnaHRzKGdlb21ldHJ5LG1hdGVyaWFsKTtcclxuICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPWRpclJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2U7XHJcbiAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9ZGlyUmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXI7XHJcbiAgICAgICAgLy/pl7TmjqXmvKvlj43lsIRcclxuICAgICAgICAgICAgbGV0IGluZGlyZWN0RGlmZnVzZUxpZ2h0OlJlZmxlY3RlZExpZ2h0PSBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGlycmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCk7XHJcbiAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz1pbmRpcmVjdERpZmZ1c2VMaWdodC5pbmRpcmVjdERpZmZ1c2U7XHJcbiAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9aW5kaXJlY3REaWZmdXNlTGlnaHQuaW5kaXJlY3RTcGVjdWxhcjtcclxuICAgICAgICAvL+mXtOaOpemrmOWFiVxyXG4gICAgICAgICAgICBsZXQgaW5kaXJlY3RTcGVjdWxhckxpZ2h0OlJlZmxlY3RlZExpZ2h0PVJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwoIHJhZGlhbmNlLCBpYmxJcnJhZGlhbmNlLCBjbGVhcmNvYXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsKTtcclxuICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPWluZGlyZWN0U3BlY3VsYXJMaWdodC5pbmRpcmVjdERpZmZ1c2U7XHJcbiAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9aW5kaXJlY3RTcGVjdWxhckxpZ2h0LmluZGlyZWN0U3BlY3VsYXI7XHJcbiAgICAgICAgLy/njq/looPlhYnpga7olL1cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9BT1RFWFRVUkV9XHJcbiAgICAgICAgICAgIGxldCBhbWJpZW50T2NjbHVzaW9uOmYzMiA9ICh0ZXh0dXJlU2FtcGxlKGFvVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdjIpLnIgLSAxLjAgKSAqIG1hdGVyaWFsVW5pZm9ybS5hb1RleHR1cmVJbnRlbnNpdHkgKyAxLjA7XHJcblxyXG4gICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gYW1iaWVudE9jY2x1c2lvbjtcclxuICAgICAgICAgICAgLy8mJmRlZmluZXMuU1RBTkRBUkRcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfRU5WVEVYVFVSRX0gXHJcbiAgICAgICAgICAgICAgICBsZXQgZG90TlY6ZjMyID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcclxuICAgICAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKj0gY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBkb3ROViwgYW1iaWVudE9jY2x1c2lvbiwgbWF0ZXJpYWwucm91Z2huZXNzICk7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICB2YXIgdG90YWxEaWZmdXNlOnZlYzM8ZjMyPiA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XHJcbiAgICAgICAgdmFyIHRvdGFsU3BlY3VsYXI6dmVjMzxmMzI+ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyO1xyXG4gICAgICAgIC8v6YCP5bCEXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVFJBTlNNSVNTSU9OfVxyXG4gICAgICAgICAgICBtYXRlcmlhbC50cmFuc21pc3Npb24gPSBtYXRlcmlhbFVuaWZvcm0udHJhbnNtaXNzaW9uO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC50cmFuc21pc3Npb25BbHBoYSA9IDEuMDtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudGhpY2tuZXNzID0gbWF0ZXJpYWxVbmlmb3JtLnRoaWNrbmVzcztcclxuICAgICAgICAgICAgbWF0ZXJpYWwuYXR0ZW51YXRpb25EaXN0YW5jZSA9IG1hdGVyaWFsVW5pZm9ybS5hdHRlbnVhdGlvbkRpc3RhbmNlO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5hdHRlbnVhdGlvbkNvbG9yID0gbWF0ZXJpYWxVbmlmb3JtLmF0dGVudWF0aW9uQ29sb3I7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RSQU5TTUlTU0lPTlRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC50cmFuc21pc3Npb24gKj10ZXh0dXJlU2FtcGxlKHRyYW5zbWlzc2lvblRleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpLnI7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9USElDS05FU1NURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwudGhpY2tuZXNzICo9dGV4dHVyZVNhbXBsZSh0aGlja25lc3NUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KS5nO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgbGV0IHBvczp2ZWMzPGYzMj4gPSB2V29ybGRQb3NpdGlvbjtcclxuICAgICAgICAgICAgbGV0IHY6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBjYW1lcmFQb3NpdGlvbiAtIHBvcyApO1xyXG4gICAgICAgICAgICBsZXQgbjp2ZWMzPGYzMj4gPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHN5c3RlbVVuaWZvcm0udmlld01hdHJpeCApO1xyXG4gICAgICAgICAgICBsZXQgdHJhbnNtaXNzaW9uOnZlYzQ8ZjMyPiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oXHJcbiAgICAgICAgICAgIG4sIHYsIG1hdGVyaWFsLnJvdWdobmVzcywgbWF0ZXJpYWwuZGlmZnVzZUNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgcG9zLCBtb2RlbE1hdHJpeCwgc3lzdGVtVW5pZm9ybS52aWV3TWF0cml4LCBzeXN0ZW1Vbmlmb3JtLnByb2plY3Rpb25NYXRyaXgsIG1hdGVyaWFsLmlvciwgbWF0ZXJpYWwudGhpY2tuZXNzLCBtYXRlcmlhbC5hdHRlbnVhdGlvbkNvbG9yLCBtYXRlcmlhbC5hdHRlbnVhdGlvbkRpc3RhbmNlICk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zbWlzc2lvbkFscGhhID0gbWl4KCBtYXRlcmlhbC50cmFuc21pc3Npb25BbHBoYSwgdHJhbnNtaXNzaW9uLmEsIG1hdGVyaWFsLnRyYW5zbWlzc2lvbiApO1xyXG4gICAgICAgICAgICB0b3RhbERpZmZ1c2UgPSBtaXgoIHRvdGFsRGlmZnVzZSwgdHJhbnNtaXNzaW9uLnJnYiwgbWF0ZXJpYWwudHJhbnNtaXNzaW9uICk7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgIGxldCBvdXRnb2luZ0xpZ2h0OnZlYzM8ZjMyPiA9IHRvdGFsRGlmZnVzZSArIHRvdGFsU3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NIRUVOfVxyXG4gICAgICAgICAgICBsZXQgc2hlZW5FbmVyZ3lDb21wOmYzMiA9IDEuMCAtIDAuMTU3ICogbWF4MyggbWF0ZXJpYWwuc2hlZW5Db2xvciApO1xyXG4gICAgICAgICAgICBvdXRnb2luZ0xpZ2h0ID0gb3V0Z29pbmdMaWdodCAqIHNoZWVuRW5lcmd5Q29tcCArIHNoZWVuU3BlY3VsYXI7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVH1cclxuICAgICAgICAgICAgbGV0IGRvdE5WY2M6ZjMyID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcclxuICAgICAgICAgICAgbGV0IEZjYzp2ZWMzPGYzMj4gPSBGX1NjaGxpY2soIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIGRvdE5WY2MgKTtcclxuICAgICAgICAgICAgb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiAoIDEuMCAtIG1hdGVyaWFsLmNsZWFyY29hdCAqIEZjYyApICsgY2xlYXJjb2F0U3BlY3VsYXIgKiBtYXRlcmlhbC5jbGVhcmNvYXQ7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RSQU5TTUlTU0lPTn1cclxuICAgICAgICAgICAgZGlmZnVzZUNvbG9yLmEgKj0gbWF0ZXJpYWwudHJhbnNtaXNzaW9uQWxwaGEgKyAwLjE7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgIHZhciBmaW5uYWxDb2xvcjp2ZWM0PGYzMj47XHJcbiAgICAgICAgZmlubmFsQ29sb3IgPSB2ZWM0PGYzMj4oIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5UT05FX01BUFBJTkd9XHJcbiAgICAgICAgICAgZmlubmFsQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGZpbm5hbENvbG9yLnJnYixtYXRlcmlhbFVuaWZvcm0udG9uZU1hcHBpbmdFeHBvc3VyZSApO1xyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgIGZpbm5hbENvbG9yID0gbGluZWFyVG9PdXRwdXRUZXhlbCggZmlubmFsQ29sb3IpO1xyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlBSRU1VTFRJUExJRURfQUxQSEF9XHJcbiAgICAgICAgICAgIGZpbm5hbENvbG9yLnJnYiAqPSBmaW5uYWxDb2xvci5hO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuRElUSEVSSU5HfVxyXG4gICAgICAgICAgICBmaW5uYWxDb2xvci5yZ2IgPSBkaXRoZXJpbmcoIGZpbm5hbENvbG9yLnJnYiApO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHJldHVybiBmaW5uYWxDb2xvcjtcclxuICAgIH1gO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGJyVmVydChkZWZpbmVzKSB7XHJcbiAgcmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXHJcbiAgICAjaW5jbHVkZSA8cGJyU3RydWN0PlxyXG4gICAgc3RydWN0IFZlcnRleE91dHB1dCB7XHJcbiAgICAgICAgQGJ1aWx0aW4ocG9zaXRpb24pIHBvc2l0aW9uOiB2ZWM0PGYzMj4sXHJcbiAgICAgICAgQGxvY2F0aW9uKDApIHZVdjogdmVjMjxmMzI+LFxyXG4gICAgICAgIEBsb2NhdGlvbigxKSB2Vmlld1Bvc2l0aW9uOiB2ZWMzPGYzMj4sIC8vIFZlY3RvciBmcm9tIHZlcnRleCB0byBjYW1lcmEuXHJcbiAgICAgICAgQGxvY2F0aW9uKDIpIHZXb3JsZFBvc2l0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgQGxvY2F0aW9uKDMpIHZOb3JtYWw6IHZlYzM8ZjMyPixcclxuICAgICAgICAvLyDlj6/pgIlcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9MSUdIVFRFWFRVUkUgfHwgZGVmaW5lcy5VU0VfQU9URVhUVVJFfVxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnZVdjJPdXRMb2NhdGlvbn0pIHZVdjI6IHZlYzI8ZjMyPixcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ09MT1JfQUxQSEF9XHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMudkNvbG9yT3V0TG9jYXRpb259KSB2Q29sb3I6IHZlYzQ8ZjMyPixcclxuICAgICAgICAjZWxpZiAke2RlZmluZXMuVVNFX0NPTE9SIHx8IGRlZmluZXMuVVNFX0lOU1RBTkNJTkdfQ09MT1J9XHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMudkNvbG9yT3V0TG9jYXRpb259KSB2Q29sb3I6IHZlYzM8ZjMyPixcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEFOR0VOVH1cclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy52VGFuZ2VudE91dExvY2F0aW9ufSkgdlRhbmdlbnQ6IHZlYzM8ZjMyPixcclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy52Qml0YW5nZW50T3V0TG9jYXRpb259KSB2Qml0YW5nZW50OiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICB9O1xyXG4gICAgc3RydWN0IEdsb2JhbFVuaWZvcm0ge1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICAgIHZpZXdNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICAgIGludmVyc2VWaWV3TWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgICBjYW1lcmFQb3NpdGlvbjogdmVjMzxmMzI+LFxyXG4gICAgfTtcclxuXHJcbiAgICAvL3RleHR1cmUgYW5kIHNhbXBsZXJcclxuICAgIC8vIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuc2FtcGxlckJpbmRpbmd9KSB2YXIgYmFzZVNhbXBsZXI6IHNhbXBsZXI7XHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9TS0lOTklOR31cclxuICAgICAgICAvL3VuaWZvcm0gaGlnaHAgc2FtcGxlcjJEIGJvbmVUZXh0dXJlO1xyXG4gICAgICAgIEBncm91cCgwKSBAYmluZGluZygke1xyXG4gICAgICAgICAgZGVmaW5lcy5ib25lVGV4dHVyZUJpbmRpbmdcclxuICAgICAgICB9KSB2YXIgYm9uZVRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZiAke2RlZmluZXMuVVNFX0RJU1BMQUNFTUVOVFRFWFRVUkV9XHJcbiAgICAgICAgLy91bmlmb3JtIHNhbXBsZXIyRCBkaXNwbGFjZW1lbnRNYXA7XHJcbiAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7XHJcbiAgICAgICAgICBkZWZpbmVzLmRpc3BsYWNlbWVudFRleHR1cmVCaW5kaW5nXHJcbiAgICAgICAgfSkgdmFyIGRpc3BsYWNlbWVudE1hcDogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2lmICR7ZGVmaW5lcy5NT1JQSFRBUkdFVFNfVEVYVFVSRX1cclxuICAgICAgICAvL3VuaWZvcm0gc2FtcGxlcjJEQXJyYXkgbW9ycGhUYXJnZXRzVGV4dHVyZTtcclxuICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtcclxuICAgICAgICAgIGRlZmluZXMubW9ycGhUYXJnZXRzVGV4dHVyZUJpbmRpbmdcclxuICAgICAgICB9KSB2YXIgbW9ycGhUYXJnZXRzVGV4dHVyZTogdGV4dHVyZV8yZF9hcnJheTxmMzI+O1xyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgc3RydWN0IFZlcnRleElucHV0IHtcclxuICAgICAgICBAbG9jYXRpb24oMCkgcG9zaXRpb246IHZlYzM8ZjMyPiwgIFxyXG5cclxuICAgICAgICBAbG9jYXRpb24oMSkgbm9ybWFsOiB2ZWMzPGYzMj4sXHJcblxyXG4gICAgICAgIEBsb2NhdGlvbigyKSB1djogdmVjMjxmMzI+LFxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0xJR0hUVEVYVFVSRSB8fCBkZWZpbmVzLlVTRV9BT1RFWFRVUkV9XHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMudXYyTG9jYXRpb259KSB1djI6dmVjMjxmMzI+LFxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lOU1RBTkNJTkd9XHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke1xyXG4gICAgICAgICAgICAgIGRlZmluZXMuaW5zdGFuY2VNYXRyaXhMb2NhdGlvblxyXG4gICAgICAgICAgICB9KSBpbnN0YW5jZU1hdHJpeDptYXQ0eDQ8ZjMyPixcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JTlNUQU5DSU5HX0NPTE9SfVxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLmluc3RhbmNlQ29sb3JMb2NhdGlvbn0pIGluc3RhbmNlQ29sb3I6dmVjMzxmMzI+LFxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIFxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RBTkdFTlR9XHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMudGFuZ2VudExvY2F0aW9ufSkgdGFuZ2VudDp2ZWM0PGYzMj4sXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ09MT1JfQUxQSEF9XHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMuY29sb3JMb2NhdGlvbn0pIGNvbG9yOnZlYzQ8ZjMyPixcclxuICAgICAgICAjZWxpZiAke2RlZmluZXMuVVNFX0NPTE9SfVxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLmNvbG9yTG9jYXRpb259KSBjb2xvcjp2ZWMzPGYzMj4sXHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX01PUlBIVEFSR0VUUyAmJiAhZGVmaW5lcy5NT1JQSFRBUkdFVFNfVEVYVFVSRX1cclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5tb3JwaFRhcmdldDBMb2NhdGlvbn0pIG1vcnBoVGFyZ2V0MDp2ZWMzPGYzMj4sXHJcblxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLm1vcnBoVGFyZ2V0MUxvY2F0aW9ufSkgbW9ycGhUYXJnZXQxOnZlYzM8ZjMyPixcclxuXHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMubW9ycGhUYXJnZXQyTG9jYXRpb259KSBtb3JwaFRhcmdldDI6dmVjMzxmMzI+LFxyXG5cclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5tb3JwaFRhcmdldDNMb2NhdGlvbn0pIG1vcnBoVGFyZ2V0Mzp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX01PUlBITk9STUFMU31cclxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke1xyXG4gICAgICAgICAgICAgICAgICBkZWZpbmVzLm1vcnBoTm9ybWFsMExvY2F0aW9uXHJcbiAgICAgICAgICAgICAgICB9KSBtb3JwaE5vcm1hbDA6dmVjMzxmMzI+LFxyXG5cclxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke1xyXG4gICAgICAgICAgICAgICAgICBkZWZpbmVzLm1vcnBoTm9ybWFsMUxvY2F0aW9uXHJcbiAgICAgICAgICAgICAgICB9KSBtb3JwaE5vcm1hbDE6dmVjMzxmMzI+LFxyXG5cclxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke1xyXG4gICAgICAgICAgICAgICAgICBkZWZpbmVzLm1vcnBoTm9ybWFsMkxvY2F0aW9uXHJcbiAgICAgICAgICAgICAgICB9KSBtb3JwaE5vcm1hbDI6dmVjMzxmMzI+LFxyXG5cclxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke1xyXG4gICAgICAgICAgICAgICAgICBkZWZpbmVzLm1vcnBoTm9ybWFsM0xvY2F0aW9uXHJcbiAgICAgICAgICAgICAgICB9KSBtb3JwaE5vcm1hbDM6dmVjMzxmMzI+LFxyXG4gICAgICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKCR7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmluZXMubW9ycGhUYXJnZXQ0TG9jYXRpb25cclxuICAgICAgICAgICAgICAgIH0pIG1vcnBoVGFyZ2V0NDp2ZWMzPGYzMj4sXHJcblxyXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKCR7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmluZXMubW9ycGhUYXJnZXQ1TG9jYXRpb25cclxuICAgICAgICAgICAgICAgIH0pIG1vcnBoVGFyZ2V0NTp2ZWMzPGYzMj4sXHJcblxyXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKCR7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmluZXMubW9ycGhUYXJnZXQ2TG9jYXRpb25cclxuICAgICAgICAgICAgICAgIH0pIG1vcnBoVGFyZ2V0Njp2ZWMzPGYzMj4sXHJcblxyXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKCR7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmluZXMubW9ycGhUYXJnZXQ3TG9jYXRpb25cclxuICAgICAgICAgICAgICAgIH0pIG1vcnBoVGFyZ2V0Nzp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NLSU5OSU5HfVxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnNraW5JbmRleExvY2F0aW9ufSkgc2tpbkluZGV4OnZlYzQ8ZjMyPixcclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5za2luV2VpZ2h0TG9jYXRpb259KSBza2luV2VpZ2h0OnZlYzQ8ZjMyPixcclxuICAgICAgICAjZW5kaWZcclxuICB9XHJcblxyXG4gICAgI2lmICR7ZGVmaW5lcy5NT1JQSFRBUkdFVFNfVEVYVFVSRX1cclxuICAgICAgICBmbiBnZXRNb3JwaCggdmVydGV4SW5kZXg6dTMyLCBtb3JwaFRhcmdldEluZGV4OnUzMixvZmZzZXQ6dTMyICktPnZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCB0ZXhlbEluZGV4OnUzMiA9IHZlcnRleEluZGV4ICogTU9SUEhUQVJHRVRTX1RFWFRVUkVfU1RSSURFICsgb2Zmc2V0O1xyXG4gICAgICAgICAgICBsZXQgeTp1MzIgPSB0ZXhlbEluZGV4IC8gbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7XHJcbiAgICAgICAgICAgIGxldCB4OnUzMiA9IHRleGVsSW5kZXggLSB5ICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7XHJcbiAgICAgICAgICAgIGxldCBtb3JwaFVWOnZlYzM8dTMyPiA9IHZlYzM8dTMyPiggeCwgeSwgbW9ycGhUYXJnZXRJbmRleCApO1xyXG4gICAgICAgICAgICAvL3RleHR1cmVMb2FkXHJcbiAgICAgICAgICAgIC8vcmV0dXJuIHRleGVsRmV0Y2goIG1vcnBoVGFyZ2V0c1RleHR1cmUsIG1vcnBoVVYsIDAgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRleHR1cmVMb2FkKCBtb3JwaFRhcmdldHNUZXh0dXJlLCBtb3JwaFVWLCAwICk7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9TS0lOTklOR31cclxuICAgICAgICBmbiBnZXRCb25lTWF0cml4KCBpOmYzMiApLT5tYXQ0eDQ8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCBqOmYzMiA9IGkgKiA0LjA7XHJcbiAgICAgICAgICAgIGxldCB4OmYzMiA9IGolZjMyKCBtYXRlcmlhbFVuaWZvcm0uYm9uZVRleHR1cmVTaXplICk7XHJcbiAgICAgICAgICAgIGxldCB5OmYzMiA9IGZsb29yKCBqIC8gZjMyKCBtYXRlcmlhbFVuaWZvcm0uYm9uZVRleHR1cmVTaXplICkgKTtcclxuICAgICAgICAgICAgbGV0IGR4OmYzMiA9IDEuMCAvIGYzMiggbWF0ZXJpYWxVbmlmb3JtLmJvbmVUZXh0dXJlU2l6ZSApO1xyXG4gICAgICAgICAgICBsZXQgZHk6ZjMyID0gMS4wIC8gZjMyKCBtYXRlcmlhbFVuaWZvcm0uYm9uZVRleHR1cmVTaXplICk7XHJcbiAgICAgICAgICAgIHkgPSBkeSAqICggeSArIDAuNSApO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHYxOnZlYzQ8ZjMyPiA9IHRleHR1cmVTYW1wbGUoYm9uZVRleHR1cmUsIGJhc2VTYW1wbGVyLCB2ZWMyPGYzMj4oIGR4ICogKCB4ICsgMC41ICksIHkgKSApO1xyXG4gICAgICAgICAgICBsZXQgdjI6dmVjNDxmMzI+ID0gdGV4dHVyZVNhbXBsZShib25lVGV4dHVyZSwgYmFzZVNhbXBsZXIsIHZlYzI8ZjMyPiggZHggKiAoIHggKyAxLjUgKSwgeSApICk7XHJcbiAgICAgICAgICAgIGxldCB2Mzp2ZWM0PGYzMj4gPSB0ZXh0dXJlU2FtcGxlKGJvbmVUZXh0dXJlLCBiYXNlU2FtcGxlciwgdmVjMjxmMzI+KCBkeCAqICggeCArIDIuNSApLCB5ICkgKTtcclxuICAgICAgICAgICAgbGV0IHY0OnZlYzQ8ZjMyPiA9IHRleHR1cmVTYW1wbGUoYm9uZVRleHR1cmUsIGJhc2VTYW1wbGVyLCB2ZWMyPGYzMj4oIGR4ICogKCB4ICsgMy41ICksIHkgKSApO1xyXG4gICAgICAgICAgICBsZXQgYm9uZTptYXQ0eDQ8ZjMyPiA9IG1hdDR4NDxmMzI+KCB2MSwgdjIsIHYzLCB2NCApO1xyXG4gICAgICAgICAgICByZXR1cm4gYm9uZTtcclxuICAgICAgICB9XHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICBAYmluZGluZygwKSBAZ3JvdXAoMCkgdmFyPHVuaWZvcm0+IG1hdGVyaWFsVW5pZm9ybSA6IE1hdGVyaWFsVW5pZm9ybTtcclxuICAgIEBiaW5kaW5nKDApIEBncm91cCgxKSB2YXI8dW5pZm9ybT4gZ2xvYmFsVW5pZm9ybSA6IEdsb2JhbFVuaWZvcm07XHJcbiAgICBAdmVydGV4XHJcbiAgICBmbiBtYWluKGlucHV0OlZlcnRleElucHV0KS0+VmVydGV4T3V0cHV0IHtcclxuICAgICAgICB2YXIgdmVydGV4T3V0cHV0OlZlcnRleE91dHB1dDtcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9URVhUVVJFfVxyXG4gICAgICAgICAgICB2ZXJ0ZXhPdXRwdXQudlV2ID0gaW5wdXQudXY7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTElHSFRURVhUVVJFIHx8IGRlZmluZXMuVVNFX0FPVEVYVFVSRX1cclxuICAgICAgICAgICAgdmVydGV4T3V0cHV0LnZVdjIgaW5wdXQudXYyO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NPTE9SX0FMUEhBfVxyXG4gICAgICAgICAgICB2ZXJ0ZXhPdXRwdXQudkNvbG9yID0gdmVjNCggMS4wICk7XHJcbiAgICAgICAgICAgICNlbGlmICR7ZGVmaW5lcy5VU0VfQ09MT1IgfHwgZGVmaW5lcy5VU0VfSU5TVEFOQ0lOR19DT0xPUn1cclxuICAgICAgICAgICAgdmVydGV4T3V0cHV0LnZDb2xvciA9IHZlYzMoIDEuMCApO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NPTE9SfVxyXG4gICAgICAgICAgICB2ZXJ0ZXhPdXRwdXQudkNvbG9yICo9IGlucHV0LmNvbG9yO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lOU1RBTkNJTkdfQ09MT1J9XHJcbiAgICAgICAgICAgIHZlcnRleE91dHB1dC52Q29sb3IueHl6ICo9IGlucHV0Lmluc3RhbmNlQ29sb3IueHl6O1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX01PUlBIQ09MT1JTICYmIGRlZmluZXMuTU9SUEhUQVJHRVRTX1RFWFRVUkV9XHJcbiAgICAgICAgICAgIHZlcnRleE91dHB1dC52Q29sb3IgKj0gbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA6IHUzMiA9IDB1OyBpIDwgbWF0ZXJpYWxVbmlmb3JtLk1PUlBIVEFSR0VUU19DT1VOVDsgaSA9IGkgKyAxdSApIHtcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NPTE9SX0FMUEhBfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICEgPSAwLjAgKSB2ZXJ0ZXhPdXRwdXQudkNvbG9yICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMiApICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdO1xyXG4gICAgICAgICAgICAgICAgICAgICNlbGlmICR7ZGVmaW5lcy5VU0VfQ09MT1J9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gISA9IDAuMCApIHZlcnRleE91dHB1dC52Q29sb3IgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAyICkucmdiICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdO1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICB2YXIgb2JqZWN0Tm9ybWFsOnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPihpbnB1dC5ub3JtYWwpO1xyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RBTkdFTlR9XHJcbiAgICAgICAgICAgIGxldCBvYmplY3RUYW5nZW50OnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggaW5wdXQudGFuZ2VudC54eXogKTtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9NT1JQSE5PUk1BTFN9XHJcbiAgICAgICAgICAgIG9iamVjdE5vcm1hbCAqPSBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLk1PUlBIVEFSR0VUU19URVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgZm9yICggbGV0IGkgOiB1MzIgPSAwdTsgaSA8IG1hdGVyaWFsVW5pZm9ybS5NT1JQSFRBUkdFVFNfQ09VTlQ7IGkgPSBpICsgMXUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhID0gMC4wICkgb2JqZWN0Tm9ybWFsICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMSApLnh5eiAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDAgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XHJcbiAgICAgICAgICAgICAgICBvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwxICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xyXG4gICAgICAgICAgICAgICAgb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMiAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcclxuICAgICAgICAgICAgICAgIG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDMgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NLSU5OSU5HfVxyXG4gICAgICAgICAgICBsZXQgYm9uZU1hdFg6bWF0NHg0PGYzMj4gPSBnZXRCb25lTWF0cml4KCBpbnB1dC5za2luSW5kZXgueCApO1xyXG4gICAgICAgICAgICBsZXQgYm9uZU1hdFk6bWF0NHg0PGYzMj4gPSBnZXRCb25lTWF0cml4KCBpbnB1dC5za2luSW5kZXgueSApO1xyXG4gICAgICAgICAgICBsZXQgYm9uZU1hdFo6bWF0NHg0PGYzMj4gPSBnZXRCb25lTWF0cml4KCBpbnB1dC5za2luSW5kZXgueiApO1xyXG4gICAgICAgICAgICBsZXQgYm9uZU1hdFc6bWF0NHg0PGYzMj4gPSBnZXRCb25lTWF0cml4KCBpbnB1dC5za2luSW5kZXgudyApO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NLSU5OSU5HfVxyXG4gICAgICAgICAgICBsZXQgc2tpbk1hdHJpeDptYXQ0eDQ8ZjMyPiA9IG1hdDR4NDxmMzI+KCAwLjAgKTtcclxuICAgICAgICAgICAgc2tpbk1hdHJpeCArPSBpbnB1dC5za2luV2VpZ2h0LnggKiBib25lTWF0WDtcclxuICAgICAgICAgICAgc2tpbk1hdHJpeCArPSBpbnB1dC5za2luV2VpZ2h0LnkgKiBib25lTWF0WTtcclxuICAgICAgICAgICAgc2tpbk1hdHJpeCArPSBpbnB1dC5za2luV2VpZ2h0LnogKiBib25lTWF0WjtcclxuICAgICAgICAgICAgc2tpbk1hdHJpeCArPSBpbnB1dC5za2luV2VpZ2h0LncgKiBib25lTWF0VztcclxuICAgICAgICAgICAgc2tpbk1hdHJpeCA9IG1hdGVyaWFsVW5pZm9ybS5iaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBtYXRlcmlhbFVuaWZvcm0uYmluZE1hdHJpeDtcclxuICAgICAgICAgICAgb2JqZWN0Tm9ybWFsID0gdmVjNDxmMzI+KCBza2luTWF0cml4ICogdmVjNDxmMzI+KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6O1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UQU5HRU5UfVxyXG4gICAgICAgICAgICAgICAgb2JqZWN0VGFuZ2VudCA9IHZlYzQ8ZjMyPiggc2tpbk1hdHJpeCAqIHZlYzQ8ZjMyPiggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHZhciB0cmFuc2Zvcm1lZE5vcm1hbDp2ZWMzPGYzMj4gPSBvYmplY3ROb3JtYWw7XHJcbiAgICAgICAgLy8gdHJhbnNmb3JtZWROb3JtYWwrPXZlYzM8ZjMyPigwLjApO1xyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lOU1RBTkNJTkd9XHJcbiAgICAgICAgICAgIGxldCBtOm1hdDN4MzxmMzI+ID0gbWF0M3gzPGYzMj4oIGlucHV0Lmluc3RhbmNlTWF0cml4ICk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsIC89IHZlYzM8ZjMyPiggZG90KCBtWyAwIF0sIG1bIDAgXSApLCBkb3QoIG1bIDEgXSwgbVsgMSBdICksIGRvdCggbVsgMiBdLCBtWyAyIF0gKSApO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IG1hdGVyaWFsVW5pZm9ybS5ub3JtYWxNYXRyaXggKiB0cmFuc2Zvcm1lZE5vcm1hbDtcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLkZMSVBfU0lERUR9XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsID0gLSB0cmFuc2Zvcm1lZE5vcm1hbDtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UQU5HRU5UfVxyXG4gICAgICAgICAgICBsZXQgdHJhbnNmb3JtZWRUYW5nZW50OnZlYzM8ZjMyPiA9IChnbG9iYWxVbmlmb3JtLnZpZXdNYXRyaXgqbWF0ZXJpYWxVbmlmb3JtLm1vZGVsTWF0cml4ICogdmVjNDxmMzI+KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5GTElQX1NJREVEfVxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHZlcnRleE91dHB1dC52Tm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xyXG4gICAgICAgICNpZiAke2RlZmluZXMuRkxBVF9TSEFERUR9XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RBTkdFTlR9XHJcbiAgICAgICAgICAgICAgICB2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7XHJcbiAgICAgICAgICAgICAgICB2Qml0YW5nZW50ID0gbm9ybWFsaXplKCBjcm9zcyggdk5vcm1hbCwgdlRhbmdlbnQgKSAqIGlucHV0LnRhbmdlbnQudyApO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICBsZXQgdHJhbnNmb3JtZWQ6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KCBpbnB1dC5wb3NpdGlvbiApO1xyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX01PUlBIVEFSR0VUU31cclxuICAgICAgICAgICAgdHJhbnNmb3JtZWQgKj0gbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5NT1JQSFRBUkdFVFNfVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIGZvciAoIGxldCBpIDogdTMyID0gMHU7IGkgPCBtYXRlcmlhbFVuaWZvcm0uTU9SUEhUQVJHRVRTX0NPVU5UOyBpID0gaSArIDF1ICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICEgPSAwLjAgKSB0cmFuc2Zvcm1lZCArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDAgKS54eXogKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkICs9IGlucHV0Lm1vcnBoVGFyZ2V0MCAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkICs9IGlucHV0Lm1vcnBoVGFyZ2V0MSAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkICs9IGlucHV0Lm1vcnBoVGFyZ2V0MiAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkICs9IGlucHV0Lm1vcnBoVGFyZ2V0MyAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX01PUlBITk9STUFMU31cclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZCArPSBpbnB1dC5tb3JwaFRhcmdldDQgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWQgKz0gaW5wdXQubW9ycGhUYXJnZXQ1ICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkICs9IGlucHV0Lm1vcnBoVGFyZ2V0NiAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZCArPSBpbnB1dC5tb3JwaFRhcmdldDcgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA3IF07XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0tJTk5JTkd9XHJcbiAgICAgICAgICAgIGxldCBza2luVmVydGV4OnZlYzQ8ZjMyPiA9IG1hdGVyaWFsVW5pZm9ybS5iaW5kTWF0cml4ICogdmVjNDxmMzI+KCB0cmFuc2Zvcm1lZCwgMS4wICk7XHJcbiAgICAgICAgICAgIGxldCBza2lubmVkOnZlYzQ8ZjMyPiA9IHZlYzQ8ZjMyPiggMC4wICk7XHJcbiAgICAgICAgICAgIHNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogaW5wdXQuc2tpbldlaWdodC54O1xyXG4gICAgICAgICAgICBza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIGlucHV0LnNraW5XZWlnaHQueTtcclxuICAgICAgICAgICAgc2tpbm5lZCArPSBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBpbnB1dC5za2luV2VpZ2h0Lno7XHJcbiAgICAgICAgICAgIHNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogaW5wdXQuc2tpbldlaWdodC53O1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZCA9ICggbWF0ZXJpYWxVbmlmb3JtLmJpbmRNYXRyaXhJbnZlcnNlICogc2tpbm5lZCApLnh5ejtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9ESVNQTEFDRU1FTlRURVhUVVJFfSBcclxuICAgICAgICAgICAgdHJhbnNmb3JtZWQgKz0gbm9ybWFsaXplKCBvYmplY3ROb3JtYWwgKSAqICh0ZXh0dXJlU2FtcGxlKGRpc3BsYWNlbWVudE1hcCwgYmFzZVNhbXBsZXIsIHZVdikueCAqIG1hdGVyaWFsVW5pZm9ybS5kaXNwbGFjZW1lbnRTY2FsZSArIG1hdGVyaWFsVW5pZm9ybS5kaXNwbGFjZW1lbnRCaWFzICk7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgdmFyIG12UG9zaXRpb246dmVjNDxmMzI+ID0gdmVjNDxmMzI+KCB0cmFuc2Zvcm1lZCwgMS4wICk7XHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSU5TVEFOQ0lOR31cclxuICAgICAgICAgICAgbXZQb3NpdGlvbiA9IGlucHV0Lmluc3RhbmNlTWF0cml4ICogbXZQb3NpdGlvbjtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICBtdlBvc2l0aW9uID0gZ2xvYmFsVW5pZm9ybS52aWV3TWF0cml4Km1hdGVyaWFsVW5pZm9ybS5tb2RlbE1hdHJpeCAqIG12UG9zaXRpb247XHJcbiAgICAgICAgdmVydGV4T3V0cHV0LnBvc2l0aW9uID0gZ2xvYmFsVW5pZm9ybS5wcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcclxuICAgICAgICB2ZXJ0ZXhPdXRwdXQudlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXovbXZQb3NpdGlvbi53O1xyXG4gICAgICAgICNpZiAke1xyXG4gICAgICAgICAgZGVmaW5lcy5VU0VfRU5WVEVYVFVSRSB8fCBkZWZpbmVzLkRJU1RBTkNFIHx8IGRlZmluZXMuVVNFX1RSQU5TTUlTU0lPTlxyXG4gICAgICAgIH0gXHJcbiAgICAgICAgICAgIHZhciB3b3JsZFBvc2l0aW9uOnZlYzQ8ZjMyPiA9IHZlYzQ8ZjMyPiggdHJhbnNmb3JtZWQsIDEuMCApO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JTlNUQU5DSU5HfVxyXG4gICAgICAgICAgICAgICAgd29ybGRQb3NpdGlvbiA9IGlucHV0Lmluc3RhbmNlTWF0cml4ICogd29ybGRQb3NpdGlvbjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIHdvcmxkUG9zaXRpb24gPSBtYXRlcmlhbFVuaWZvcm0ubW9kZWxNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RSQU5TTUlTU0lPTn1cclxuICAgICAgICAgICAgdmVydGV4T3V0cHV0LnZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgcmV0dXJuIHZlcnRleE91dHB1dDtcclxuICAgIH1cclxuICAgIGA7XHJcbn1cclxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBob25nRnJhZyhkZWZpbmVzKSB7XHJcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgICBcclxuICAgIHN0cnVjdCBNYXRlcmlhbFVuaWZvcm0ge1xyXG4gICAgICBtb2RlbE1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgIGNvbG9yOiB2ZWMzPGYzMj4sXHJcbiAgICAgIG9wYWNpdHk6ZjMyLFxyXG4gICAgICBub3JtYWxNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICBlbWlzc2l2ZTp2ZWMzPGYzMj4sXHJcbiAgICAgIHNoaW5pbmVzczpmMzIsXHJcbiAgICAgIHNwZWN1bGFyOnZlYzM8ZjMyPiwgICAgICBcclxuICAgfVxyXG4gICAgI2luY2x1ZGUgPEZyYWdJbnB1dD5cclxuICAgICNpbmNsdWRlIDxTeXN0ZW1Vbmlmb3JtPlxyXG4gICAgI2luY2x1ZGUgPFRleHR1cmVBbmRTYW1wbGVyRGVmaW5lPlxyXG4gICAgI2luY2x1ZGUgPGxpZ2h0PlxyXG4gICAgQGJpbmRpbmcoJHtkZWZpbmVzLnBob25nQmluZGluZ30pIEBncm91cCgwKSB2YXI8dW5pZm9ybT4gbWF0ZXJpYWxVbmlmb3JtIDogTWF0ZXJpYWxVbmlmb3JtO1xyXG4gICAgQGJpbmRpbmcoJHtkZWZpbmVzLmNhbWVyYUJpbmRpbmd9KSBAZ3JvdXAoMSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OkZyYWdJbnB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgdmFyIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTp2ZWMzPGYzMj4gPSBtYXRlcmlhbFVuaWZvcm0uZW1pc3NpdmU7XHJcbiAgICAgICAgdmFyIGNvbG9yOnZlYzQ8ZjMyPjtcclxuICAgICAgICAjaWYke2RlZmluZXMuVVNFX0NPTE9SVEVYVFVSRX1cclxuICAgICAgICAgICAgY29sb3I9IHZlYzQ8ZjMyPih0ZXh0dXJlU2FtcGxlKGJhc2VDb2xvclRleHR1cmUsIGJhc2VDb2xvclNhbXBsZXIsIGlucHV0LnV2KS5yZ2IrbWF0ZXJpYWxVbmlmb3JtLmNvbG9yLG1hdGVyaWFsVW5pZm9ybS5vcGFjaXR5KTtcclxuICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICBjb2xvcj12ZWM0PGYzMj4obWF0ZXJpYWxVbmlmb3JtLmNvbG9yLG1hdGVyaWFsVW5pZm9ybS5vcGFjaXR5KTtcclxuICAgICAgICAjZW5kaWYgICAgIFxyXG4gICAgICAgIGxldCAgVjp2ZWMzPGYzMj4gPSAgbm9ybWFsaXplKCBzeXN0ZW1Vbmlmb3JtLmNhbWVyYVBvc2l0aW9uIC0gaW5wdXQud29ybGRQb3MpO1xyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX05PUk1BTFRFWFRVUkV9XHJcbiAgICAgICAgICAgIGxldCBOOnZlYzM8ZjMyPiA9IGdldE5vcm1hbEJ5Tm9ybWFsVGV4dHVyZShpbnB1dCk7ICBcclxuICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICBsZXQgTjp2ZWMzPGYzMj4gPSBnZXROb3JtYWwoaW5wdXQpO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHZhciBnZW9tZXRyeTpHZW9tZXRyeTtcclxuICAgICAgICBnZW9tZXRyeS5ub3JtYWw9TjtcclxuICAgICAgICBnZW9tZXRyeS52aWV3RGlyPVY7XHJcbiAgICAgICAgZ2VvbWV0cnkucG9zaXRpb249aW5wdXQud29ybGRQb3M7XHJcbiAgICAgICAgbGV0IGxpZ2h0Q29sb3I6UmVmbGVjdGVkTGlnaHQ9cGFyc2VMaWdodHMoZ2VvbWV0cnksbWF0ZXJpYWxVbmlmb3JtLnNoaW5pbmVzcyk7XHJcbiAgICAgICAgLy8gdmFyIGZpbm5hbENvbG9yOnZlYzM8ZjMyPj1jb2xvci54eXogKyAobGlnaHRDb2xvci5kaXJlY3REaWZmdXNlICsgbGlnaHRDb2xvci5kaXJlY3RTcGVjdWxhciArIGxpZ2h0Q29sb3IuYW1iaWVudCk7XHJcbiAgICAgICAgdmFyIGZpbm5hbENvbG9yOnZlYzM8ZjMyPj1jb2xvci54eXogKiAobGlnaHRDb2xvci5kaXJlY3REaWZmdXNlICsgbGlnaHRDb2xvci5kaXJlY3RTcGVjdWxhciArIGxpZ2h0Q29sb3IuYW1iaWVudCk7XHJcblxyXG4gICAgICAgIC8vIGZpbm5hbENvbG9yID0gbGlnaHRDb2xvci50ZXN0Q29sb3IueHl6O1xyXG5cclxuICAgICAgICByZXR1cm4gdmVjNDxmMzI+KGZpbm5hbENvbG9yLGNvbG9yLmEpO1xyXG4gICAgfWA7XHJcbn1cclxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaG9uZ1ZlcnQoZGVmaW5lcykge1xuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcbiAgICAgIHN0cnVjdCBNYXRlcmlhbFVuaWZvcm0ge1xuICAgICAgICAgICAgbW9kZWxNYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgICAgICAgY29sb3I6IHZlYzM8ZjMyPixcbiAgICAgICAgICAgIG9wYWNpdHk6ZjMyLFxuICAgICAgICAgICAgbm9ybWFsTWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgICAgICAgICAgIGVtaXNzaXZlOnZlYzM8ZjMyPixcbiAgICAgICAgICAgIHNwZWN1bGFyOnZlYzM8ZjMyPixcbiAgICAgICAgICAgIHNoaW5pbmVzczpmMzIsXG4gICAgICB9XG4gICAgICAjaW5jbHVkZSA8VmVydGV4T3V0cHV0PlxuICAgICAgI2luY2x1ZGUgPFN5c3RlbVVuaWZvcm0+XG4gICAgICAjaW5jbHVkZSA8VmVydGV4SW5wdXQ+XG4gICAgICBAYmluZGluZygke2RlZmluZXMucGhvbmdCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjx1bmlmb3JtPiBzZWxmVW5pZm9ybSA6IE1hdGVyaWFsVW5pZm9ybTtcbiAgICAgIEBiaW5kaW5nKCR7ZGVmaW5lcy5jYW1lcmFCaW5kaW5nfSkgQGdyb3VwKDEpIHZhcjx1bmlmb3JtPiBzeXN0ZW1Vbmlmb3JtIDogU3lzdGVtVW5pZm9ybTtcbiAgICAgIEB2ZXJ0ZXhcbiAgICAgIGZuIG1haW4oaW5wdXQ6IFZlcnRleElucHV0KSAtPiBWZXJ0ZXhPdXRwdXQge1xuICAgICAgICAgICAgdmFyIG91dHB1dDogVmVydGV4T3V0cHV0O1xuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5IQVNfVVZ9XG4gICAgICAgICAgICAgICBvdXRwdXQudXYgPSBpbnB1dC51djtcbiAgICAgICAgICAgICNlbmRpZiBcbiAgICAgICAgICAgIGxldCBtb2RlbFBvcz1zZWxmVW5pZm9ybS5tb2RlbE1hdHJpeCAqdmVjNDxmMzI+KGlucHV0LnBvc2l0aW9uLDEuMCk7XG4gICAgICAgICAgICBvdXRwdXQud29ybGRQb3MgPSBtb2RlbFBvcy54eXovbW9kZWxQb3MudztcbiAgICAgICAgICAgIGxldCB2Tm9ybWFsVmlldyA9IHNlbGZVbmlmb3JtLm5vcm1hbE1hdHJpeCAqIHZlYzQ8ZjMyPihpbnB1dC5ub3JtYWwsMC4wKTtcbiAgICAgICAgICAgIG91dHB1dC5ub3JtYWwgPSAgdk5vcm1hbFZpZXcueHl6O1xuICAgICAgICAgICAgb3V0cHV0LnZpZXcgPSBzeXN0ZW1Vbmlmb3JtLmNhbWVyYVBvc2l0aW9uLnh5eiAtIG1vZGVsUG9zLnh5ejtcbiAgICAgICAgICAgIGxldCB2aWV3UG9zaXRpb249c3lzdGVtVW5pZm9ybS52aWV3TWF0cml4ICogbW9kZWxQb3M7XG4gICAgICAgICAgICBvdXRwdXQudmlld1Bvc2l0aW9uID0gLXZpZXdQb3NpdGlvbi54eXo7XG4gICAgICAgICAgICBvdXRwdXQucG9zaXRpb24gPSBzeXN0ZW1Vbmlmb3JtLnByb2plY3Rpb25NYXRyaXggKiBzeXN0ZW1Vbmlmb3JtLnZpZXdNYXRyaXggKiBtb2RlbFBvcztcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICB9YDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1YWRGcmFnKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gYFxyXG4gICAgQGdyb3VwKDApIEBiaW5kaW5nKDEpIHZhciBiYXNlU2FtcGxlcjogc2FtcGxlcjtcclxuICAgIEBncm91cCgwKSBAYmluZGluZygwKSB2YXIgY29sb3JUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICBzdHJ1Y3QgVmVydGV4T3V0cHV0IHtcclxuICAgICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb246IHZlYzQ8ZjMyPixcclxuICAgICAgICBAbG9jYXRpb24oMCkgdXY6IHZlYzI8ZjMyPixcclxuICAgIH07XHJcbiAgICBAZnJhZ21lbnRcclxuICAgIGZuIG1haW4oaW5wdXQ6VmVydGV4T3V0cHV0KSAtPiBAbG9jYXRpb24oMCkgdmVjNDxmMzI+IHtcclxuICAgICAgcmV0dXJuIHRleHR1cmVTYW1wbGUoY29sb3JUZXh0dXJlLCBiYXNlU2FtcGxlciwgdmVjMjxmMzI+KGlucHV0LnV2LngsMS4wLWlucHV0LnV2LnkpKTtcclxuICAgIH1cclxuICAgIGA7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVhZFZlcnQoZGVmaW5lcykge1xuXHRyZXR1cm4gYFxuICAgIHN0cnVjdCBWZXJ0ZXhJbnB1dCB7XG4gICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnBvc2l0aW9uTG9jYXRpb259KSBwb3NpdGlvbjogdmVjMjxmMzI+LCAgICAgICBcbiAgICB9XG4gICAgc3RydWN0IFZlcnRleE91dHB1dCB7XG4gICAgICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb246IHZlYzQ8ZjMyPixcbiAgICAgICAgIEBsb2NhdGlvbigwKSB1djogdmVjMjxmMzI+LFxuICAgICB9O1xuICAgIEB2ZXJ0ZXhcbiAgICBmbiBtYWluKGlucHV0OiBWZXJ0ZXhJbnB1dCkgLT4gVmVydGV4T3V0cHV0IHtcbiAgICAgdmFyIG91dHB1dDpWZXJ0ZXhPdXRwdXQ7XG4gICAgIG91dHB1dC51diA9IGlucHV0LnBvc2l0aW9uICogMC41ICsgMC41O1xuICAgICBvdXRwdXQucG9zaXRpb24gPSB2ZWM0PGYzMj4oaW5wdXQucG9zaXRpb24sIDAuMCwgMS4wKTs7XG4gICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuICAgIGA7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBza3lCb3hGcmFnKGRlZmluZXMpIHtcclxuICByZXR1cm4gYFxyXG4gICAgZm4gbGVzc1RoYW5FcXVhbChhOnZlYzM8ZjMyPixiOnZlYzM8ZjMyPiktPnZlYzM8ZjMyPntcclxuICAgICAgICBsZXQgeFZhbHVlOmYzMj1zZWxlY3QoYi54LGEueCxhLng8PWIueCk7XHJcbiAgICAgICAgbGV0IHlWYWx1ZTpmMzI9c2VsZWN0KGIueSxhLnksYS55PD1iLnkpO1xyXG4gICAgICAgIGxldCB6VmFsdWU6ZjMyPXNlbGVjdChiLnosYS56LGEuejw9Yi56KTtcclxuICAgICAgICByZXR1cm4gdmVjMzxmMzI+KHhWYWx1ZSx5VmFsdWUselZhbHVlKTsgICAgXHJcbiAgICAgfVxyXG4gICAgZm4gTGluZWFyVG9zUkdCKCB2YWx1ZTp2ZWM0PGYzMj4gKS0+dmVjNDxmMzI+IHtcclxuICAgICAgICByZXR1cm4gdmVjNDxmMzI+KCBtaXgoIHBvdyggdmFsdWUucmdiLCB2ZWMzPGYzMj4oIDAuNDE2NjYgKSApICogMS4wNTUgLSB2ZWMzPGYzMj4oIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzPGYzMj4oIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMzxmMzI+KCAwLjAwMzEzMDggKSApICkgKSwgdmFsdWUuYSApO1xyXG4gICAgfVxyXG4gIHN0cnVjdCBGcmFnbWVudElucHV0IHtcclxuICAgIEBsb2NhdGlvbigwKSB0ZXhDb29yZCA6IHZlYzM8ZjMyPlxyXG4gIH07XHJcbiAgQGdyb3VwKDApIEBiaW5kaW5nKDIpIHZhciBkZWZhdWx0U2FtcGxlcjogc2FtcGxlcjtcclxuICBAZ3JvdXAoMCkgQGJpbmRpbmcoMSkgdmFyIHNreWJveFRleHR1cmU6IHRleHR1cmVfY3ViZTxmMzI+O1xyXG4gIEBmcmFnbWVudFxyXG4gIGZuIG1haW4oaW5wdXQgOiBGcmFnbWVudElucHV0KSAtPiBAbG9jYXRpb24oMCkgdmVjNDxmMzI+IHtcclxuICAgIGxldCBjb2xvciA9IHRleHR1cmVTYW1wbGUoc2t5Ym94VGV4dHVyZSwgZGVmYXVsdFNhbXBsZXIsIGlucHV0LnRleENvb3JkKTtcclxuICAgIHJldHVybiBMaW5lYXJUb3NSR0IoY29sb3IpO1xyXG4gIH1cclxuYDtcclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBza3lCb3hWZXJ0KGRlZmluZXMpIHtcblx0cmV0dXJuIGBcbiAgIHN0cnVjdCBTeXN0ZW1Vbmlmb3JtIHtcbiAgICAgICBwcm9qZWN0aW9uTWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgICAgICB2aWV3TWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgICAgICBpbnZlcnNlVmlld01hdHJpeDogbWF0NHg0PGYzMj4sXG4gICAgICAgY2FtZXJhUG9zaXRpb246IHZlYzM8ZjMyPixcbiAgIH07IFxuICAgc3RydWN0IE1hdGVyaWFsVW5pZm9ybSB7XG4gICAgbW9kZWxNYXRyaXg6IG1hdDR4NDxmMzI+LFxuIH1cbiAgIEBiaW5kaW5nKCR7ZGVmaW5lcy5za3lib3hCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjx1bmlmb3JtPiBzZWxmVW5pZm9ybSA6IE1hdGVyaWFsVW5pZm9ybTtcbiAgIEBiaW5kaW5nKCR7ZGVmaW5lcy5jYW1lcmFCaW5kaW5nfSkgQGdyb3VwKDEpIHZhcjx1bmlmb3JtPiBzeXN0ZW1Vbmlmb3JtIDogU3lzdGVtVW5pZm9ybTtcbiAgICAgc3RydWN0IFZlcnRleElucHV0IHtcbiAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnBvc2l0aW9uTG9jYXRpb259KSBwb3NpdGlvbiA6IHZlYzM8ZjMyPixcbiAgICAgfTtcbiAgICAgc3RydWN0IFZlcnRleE91dHB1dCB7XG4gICAgICAgQGJ1aWx0aW4ocG9zaXRpb24pIHBvc2l0aW9uIDogdmVjNDxmMzI+LFxuICAgICAgIEBsb2NhdGlvbigwKSB0ZXhDb29yZCA6IHZlYzM8ZjMyPixcbiAgICAgfTtcbiAgICAgQHZlcnRleFxuICAgICBmbiBtYWluKGlucHV0IDogVmVydGV4SW5wdXQpIC0+IFZlcnRleE91dHB1dCB7XG4gICAgICAgdmFyIG91dHB1dCA6IFZlcnRleE91dHB1dDtcbiAgICAgICBvdXRwdXQudGV4Q29vcmQgPSBpbnB1dC5wb3NpdGlvbi54eXo7XG4gICAgICAgdmFyIG1vZGVsVmlldyA9IHN5c3RlbVVuaWZvcm0udmlld01hdHJpeDtcbiAgICAgICAvLyBEcm9wIHRoZSB0cmFuc2xhdGlvbiBwb3J0aW9uIG9mIHRoZSBtb2RlbFZpZXcgbWF0cml4XG4gICAgICAgbW9kZWxWaWV3WzNdID0gdmVjNCgwLjAsIDAuMCwgMC4wLCBtb2RlbFZpZXdbM10udyk7XG4gICAgICAgb3V0cHV0LnBvc2l0aW9uID0gc3lzdGVtVW5pZm9ybS5wcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3ICogdmVjNDxmMzI+KGlucHV0LnBvc2l0aW9uLDEuMCk7XG4gICAgICAgb3V0cHV0LnBvc2l0aW9uID0gb3V0cHV0LnBvc2l0aW9uLnh5d3c7XG4gICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgfVxuICAgYDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJsZW5kRnJhZyhkZWZpbmVzKSB7XHJcblx0cmV0dXJuIGBcclxuICAgIHN0cnVjdCBGcmFnSW5wdXQge1xyXG4gICAgICAgIEBsb2NhdGlvbigwKSB1djogdmVjMjxmMzI+LFxyXG4gICAgfTtcclxuICAgIEBncm91cCgwKSBAYmluZGluZyh7e3REaWZmdXNlQmluZGluZ319KSB2YXIgdERpZmZ1c2U6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgIEBncm91cCgwKSBAYmluZGluZyh7e2Jhc2VDb2xvclRleHR1cmVCaW5kaW5nfX0pIHZhciBiYXNlQ29sb3JUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0U2FtcGxlckJpbmRpbmd9fSkgdmFyIHRTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OkZyYWdJbnB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgbGV0IHBvc3RDb2xvcjp2ZWM0PGYzMj4gPSB0ZXh0dXJlU2FtcGxlKHREaWZmdXNlLCB0U2FtcGxlciwgaW5wdXQudXYpO1xyXG4gICAgICAgIGxldCBiYXNlQ29sb3I6dmVjNDxmMzI+ID0gdGV4dHVyZVNhbXBsZShiYXNlQ29sb3JUZXh0dXJlLCB0U2FtcGxlciwgaW5wdXQudXYpO1xyXG4gICAgICByZXR1cm4gYmFzZUNvbG9yK3Bvc3RDb2xvcjtcclxuICAgIH0gICBcclxuICAgIGA7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQmx1cihkZWZpbmVzKSB7XHJcblx0cmV0dXJuIGBcclxuICAgIHN0cnVjdCBGcmFnSW5wdXQge1xyXG4gICAgICAgIEBsb2NhdGlvbigwKSB1djogdmVjMjxmMzI+LFxyXG4gICAgfVxyXG4gICAgc3RydWN0IEJsdXJVbmlmb3JtcyB7XHJcbiAgICAgICAgZGlyZWN0aW9uOnZlYzI8ZjMyPixcclxuICAgIH1cclxuICAgIGZuIGdhdXNzaWFuUGRmKHg6ZjMyLCBzaWdtYTpmMzIpLT5mMzIge1xyXG4gICAgICAgIHJldHVybiAwLjM5ODk0ICogZXhwKCAtMC41ICogeCAqIHgvKCBzaWdtYSAqIHNpZ21hKSkvc2lnbWE7XHJcbiAgICB9XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgIHZhcjx1bmlmb3JtPiBibHVyVW5pZm9ybXMgOiBCbHVyVW5pZm9ybXM7XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0RGlmZnVzZUJpbmRpbmd9fSkgdmFyIHREaWZmdXNlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0U2FtcGxlckJpbmRpbmd9fSkgdmFyIHRTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OkZyYWdJbnB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgbGV0IGludlNpemU6dmVjMjxmMzI+ID0gdmVjMjxmMzI+KDEuMCwxLjApIC8gdmVjMjxmMzI+KHRleHR1cmVEaW1lbnNpb25zKHREaWZmdXNlKSk7XHJcbiAgICAgICAgbGV0IGZTaWdtYTpmMzIgPWYzMigke2RlZmluZXMuU0lHTUF9KTtcclxuICAgICAgICB2YXIgd2VpZ2h0U3VtOmYzMiA9IGdhdXNzaWFuUGRmKDAuMCwgZlNpZ21hKTtcclxuICAgICAgICBsZXQgYmFzZUNvbG9yPXRleHR1cmVTYW1wbGUodERpZmZ1c2UsIHRTYW1wbGVyLCBpbnB1dC51dik7XHJcbiAgICAgICAgdmFyIGRpZmZ1c2VTdW06dmVjMzxmMzI+ID0gYmFzZUNvbG9yLnJnYiAqIHdlaWdodFN1bTtcclxuICAgICAgICBsZXQgdXZPZmZzZXQ6dmVjMjxmMzI+ID0gYmx1clVuaWZvcm1zLmRpcmVjdGlvbiAqIGludlNpemU7XHJcbiAgICAgICAgZm9yKCB2YXIgaSA6IHUzMiA9IDE7IGkgPCAke2RlZmluZXMuS0VSTkVMX1JBRElVU307aSA9IGkgKyAxICkge1xyXG4gICAgICAgICAgICBsZXQgeDpmMzIgPSBmMzIoaSk7XHJcbiAgICAgICAgICAgIGxldCB3OmYzMiA9IGdhdXNzaWFuUGRmKHgsIGZTaWdtYSk7XHJcbiAgICAgICAgICAgIGxldCBzYW1wbGUxOnZlYzM8ZjMyPj10ZXh0dXJlU2FtcGxlKHREaWZmdXNlLCB0U2FtcGxlciwgaW5wdXQudXYrIHV2T2Zmc2V0KngpLnJnYjtcclxuICAgICAgICAgICAgbGV0IHNhbXBsZTI6dmVjMzxmMzI+PXRleHR1cmVTYW1wbGUodERpZmZ1c2UsIHRTYW1wbGVyLCBpbnB1dC51di0gdXZPZmZzZXQqeCkucmdiO1xyXG4gICAgICAgICAgICBkaWZmdXNlU3VtID1kaWZmdXNlU3VtKyAoc2FtcGxlMitzYW1wbGUyKSogdztcclxuICAgICAgICAgICAgd2VpZ2h0U3VtICs9IDIuMCAqIHc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRpZmZ1c2VTdW0vPXdlaWdodFN1bTtcclxuICAgICAgcmV0dXJuIHZlYzQ8ZjMyPihkaWZmdXNlU3VtLGJhc2VDb2xvci5hKTtcclxuICAgIH1cclxuICBgO1xyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEx1bWlub3NpdHlIaWdoKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gYFxyXG4gICAgc3RydWN0IEx1bWlub3NpdHlVbmlmb3Jtc3tcclxuICAgICAgICBsdW1pbm9zaXR5VGhyZXNob2xkOmYzMixcclxuICAgICAgICBzbW9vdGhXaWR0aDpmMzIsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOnZlYzM8ZjMyPixcclxuICAgICAgICBkZWZhdWx0T3BhY2l0eTpmMzIsXHJcbiAgICB9XHJcbiAgICBzdHJ1Y3QgRnJhZ0lucHV0IHtcclxuICAgICAgICBAbG9jYXRpb24oMCkgdXY6IHZlYzI8ZjMyPixcclxuICAgIH07XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgIHZhcjx1bmlmb3JtPiBsdW1pbm9zaXR5VW5pZm9ybXMgOiBMdW1pbm9zaXR5VW5pZm9ybXM7XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0RGlmZnVzZUJpbmRpbmd9fSkgdmFyIHREaWZmdXNlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0U2FtcGxlckJpbmRpbmd9fSkgdmFyIHRTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OkZyYWdJbnB1dCktPiBAbG9jYXRpb24oMCkgdmVjNDxmMzI+IHtcclxuXHJcbiAgICAgICAgbGV0IHRleGVsOnZlYzQ8ZjMyPiA9IHRleHR1cmVTYW1wbGUodERpZmZ1c2UsIHRTYW1wbGVyLCBpbnB1dC51dik7XHJcblxyXG4gICAgICAgIGxldCBsdW1hOnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggMC4yOTksMC41ODcsMC4xMTQgKTtcclxuXHJcbiAgICAgICAgbGV0IHY6ZjMyID0gZG90KCB0ZXhlbC54eXosIGx1bWEgKTtcclxuXHJcbiAgICAgICAgbGV0IG91dHB1dENvbG9yOnZlYzQ8ZjMyPiA9IHZlYzQ8ZjMyPiggbHVtaW5vc2l0eVVuaWZvcm1zLmRlZmF1bHRDb2xvci5yZ2IsIGx1bWlub3NpdHlVbmlmb3Jtcy5kZWZhdWx0T3BhY2l0eSApO1xyXG5cclxuICAgICAgICBsZXQgYWxwaGE6ZjMyID0gc21vb3Roc3RlcCggbHVtaW5vc2l0eVVuaWZvcm1zLmx1bWlub3NpdHlUaHJlc2hvbGQsIGx1bWlub3NpdHlVbmlmb3Jtcy5sdW1pbm9zaXR5VGhyZXNob2xkICsgbHVtaW5vc2l0eVVuaWZvcm1zLnNtb290aFdpZHRoLCB2ICk7XHJcblxyXG4gICAgICAgcmV0dXJuIG1peCggb3V0cHV0Q29sb3IsIHRleGVsLCBhbHBoYSApO1xyXG4gICAgfVxyXG4gICAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIEZyYWdJbnB1dChkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgIHN0cnVjdCBGcmFnSW5wdXQge1xuICAgICAgQGJ1aWx0aW4oZnJvbnRfZmFjaW5nKSBmcm9udEZhY2luZzogYm9vbCxcbiAgICAgIEBsb2NhdGlvbigwKSB3b3JsZFBvczp2ZWMzPGYzMj4sXG4gICAgICBAbG9jYXRpb24oMSkgbm9ybWFsOnZlYzM8ZjMyPixcbiAgICAgIEBsb2NhdGlvbigyKSB1djp2ZWMyPGYzMj4sXG4gICAgICBAbG9jYXRpb24oMykgdmlldzogdmVjMzxmMzI+LCAvLyBWZWN0b3IgZnJvbSB2ZXJ0ZXggdG8gY2FtZXJhLlxuICAgICAgQGxvY2F0aW9uKDQpIGNvbG9yOiB2ZWM0PGYzMj4sXG4gICAgICBAbG9jYXRpb24oNSkgdmlld1Bvc2l0aW9uOiB2ZWMzPGYzMj4sXG4gIH0gXG4gIGA7XG59XG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIFZlcnRleElucHV0KGRlZmluZXMpIHtcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXG4gICAgICAgIHN0cnVjdCBWZXJ0ZXhJbnB1dCB7XG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnBvc2l0aW9uTG9jYXRpb259KSBwb3NpdGlvbjogdmVjMzxmMzI+LCAgICAgICBcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMubm9ybWFsTG9jYXRpb259KSBub3JtYWw6IHZlYzM8ZjMyPixcbiAgICAgICAgICAgICNpZiR7ZGVmaW5lcy5IQVNfQ09MT1J9IFxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMuY29sb3JMb2NhdGlvbn0pIGNvbG9yOiB2ZWMzPGYzMj4sXG4gICAgICAgICAgICAjZW5kaWZcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuSEFTX1VWfVxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMudXZMb2NhdGlvbn0pIHV2OiB2ZWMyPGYzMj4sXG4gICAgICAgICAgICAjZW5kaWZcbiAgICAgICAgICAgICNpZiR7ZGVmaW5lcy5IQVNfU0tJTn0gXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5qb2ludDBMb2NhdGlvbn0pIGpvaW50MDp2ZWM0PGYzMj4sXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy53ZWlnaHQwTG9jYXRpb259KSB3ZWlnaHQwOnZlYzQ8ZjMyPixcbiAgICAgICAgICAgICNlbmRpZlxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSU5TVEFOQ0V9XG4gICAgICAgICAgICAgICAgQGJ1aWx0aW4oaW5zdGFuY2VfaW5kZXgpIGluc3RhbmNlSWR4IDogdTMyXG4gICAgICAgICAgICAjZW5kaWZcbiAgICAgICAgfVxuICAgYDtcbn1cbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gVmVydGV4T3V0cHV0KGRlZmluZXMpIHtcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXG4gICAgc3RydWN0IFZlcnRleE91dHB1dCB7XG4gICAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjp2ZWM0PGYzMj4sXG4gICAgICAgIEBsb2NhdGlvbigwKSB3b3JsZFBvczp2ZWMzPGYzMj4sXG4gICAgICAgIEBsb2NhdGlvbigxKSBub3JtYWw6dmVjMzxmMzI+LFxuICAgICAgICBAbG9jYXRpb24oMikgdXY6dmVjMjxmMzI+LFxuICAgICAgICBAbG9jYXRpb24oMykgdmlldzogdmVjMzxmMzI+LCAvLyBWZWN0b3IgZnJvbSB2ZXJ0ZXggdG8gY2FtZXJhLlxuICAgICAgICBAbG9jYXRpb24oNCkgY29sb3I6IHZlYzQ8ZjMyPixcbiAgICAgICAgQGxvY2F0aW9uKDUpIHZpZXdQb3NpdGlvbjogdmVjMzxmMzI+LFxuICAgIH0gXG4gICAgYDtcbn1cbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gU3lzdGVtVW5pZm9ybShkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgICAgc3RydWN0IFN5c3RlbVVuaWZvcm0ge1xuICAgICAgICAgIHByb2plY3Rpb25NYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgICAgIHZpZXdNYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgICAgIGludmVyc2VWaWV3TWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgICAgICAgICBjYW1lcmFQb3NpdGlvbjogdmVjMzxmMzI+LFxuICAgICAgfTsgXG4gIGA7XG59XG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBUZXh0dXJlQW5kU2FtcGxlckRlZmluZShkZWZpbmVzKXtcclxuICByZXR1cm4gIHdnc2xQYXJzZURlZmluZXNgXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9JQkx9XHJcbiAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuc3BlY3VsYXJFbnZUZXh0dXJlQmluZGluZ30pIHZhciBzcGVjdWxhckVudlRleHR1cmU6IHRleHR1cmVfY3ViZTxmMzI+O1xyXG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnNwZWN1bGFyRW52U2FtcGxlckJpbmRpbmd9KSB2YXIgc3BlY3VsYXJFbnZTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgI2VuZGlmXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9URVhUVVJFfVxyXG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmJhc2VDb2xvclRleHR1cmVCaW5kaW5nfSkgdmFyIGJhc2VDb2xvclRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5iYXNlQ29sb3JTYW1wbGVyQmluZGluZ30pIHZhciBiYXNlQ29sb3JTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgI2VuZGlmXHJcbiAgICAvLyBub3JtYWwgbWFwXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9OT1JNQUxURVhUVVJFfVxyXG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLm5vcm1hbFRleHR1cmVCaW5kaW5nfSkgdmFyIG5vcm1hbFRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5ub3JtYWxTYW1wbGVyQmluZGluZ30pIHZhciBub3JtYWxTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgI2VuZGlmXHJcbiAgICAvLyBlbW1pc3ZlIG1hcFxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfRU1JU1NJVkVURVhUVVJFfVxyXG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmVtaXNzaXZlVGV4dHVyZUJpbmRpbmd9KSB2YXIgZW1pc3NpdmVUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuZW1pc3NpdmVTYW1wbGVyQmluZGluZ30pIHZhciBlbWlzc2l2ZVNhbXBsZXI6IHNhbXBsZXI7XHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAvLyBtZXRhbCByb3VnaG5lc3NcclxuICAgICNpZiAke2RlZmluZXMuVVNFX01FVEFMTkVTU1RFWFRVUkV9XHJcbiAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMubWV0YWxuZXNzUm91Z2huZXNzVGV4dHVyZUJpbmRpbmd9KSB2YXIgbWV0YWxuZXNzUm91Z2huZXNzVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLm1ldGFsbmVzc1JvdWdobmVzc1NhbXBsZXJCaW5kaW5nfSkgdmFyIG1ldGFsbmVzc1JvdWdobmVzc1NhbXBsZXI6IHNhbXBsZXI7XHJcbiAgICAjZW5kaWZcclxuICAgIC8vIG9jY2x1c2lvbiB0ZXh0dXJlXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9BT1RFWFRVUkV9XHJcbiAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYW9UZXh0dXJlQmluZGluZ30pIHZhciBhb1RleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5hb1NhbXBsZXJCaW5kaW5nfSkgdmFyIGFvU2FtcGxlcjogc2FtcGxlcjtcclxuICAgICNlbmRpZlxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfTk9STUFMVEVYVFVSRX1cclxuICAgICAgI2luY2x1ZGUgPGdldFRCTj5cclxuICAgICAgI2luY2x1ZGUgPGdldE5vcm1hbEJ5Tm9ybWFsVGV4dHVyZT5cclxuICAgICNlbHNlXHJcbiAgICAgICNpbmNsdWRlIDxnZXROb3JtYWw+XHJcbiAgICAjZW5kaWZcclxuICBgXHJcbn0iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZW52aXJvbm1lbnQoZGVmaW5lcykge1xyXG4gIHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAjaWYgJHtkZWZpbmVzLkVOVlRFWFRVUkVfVFlQRV9DVUJFX1VWfVxyXG4gICAgICAgIGNvbnN0IGN1YmVVVl9taW5NaXBMZXZlbDpmMzI9IDQuMDtcclxuICAgICAgICBjb25zdCBjdWJlVVZfbWluVGlsZVNpemU6ZjMyPSAxNi4wO1xyXG4gICAgICAgIGNvbnN0IENVQkVVVl9NQVhfTUlQOmYzMj02LjA7XHJcbiAgICAgICAgY29uc3QgQ1VCRVVWX1RFWEVMX1dJRFRIOmYzMj0xLjAvMjU2LjA7XHJcbiAgICAgICAgY29uc3QgQ1VCRVVWX1RFWEVMX0hFSUdIVDpmMzI9MS4wLzI1Ni4wO1xyXG4gICAgICAgIGZuIGdldEZhY2UoZGlyZWN0aW9uOnZlYzM8ZjMyPiApLT5mMzIge1xyXG4gICAgICAgICAgICBsZXQgYWJzRGlyZWN0aW9uOnZlYzM8ZjMyPiA9IGFicyggZGlyZWN0aW9uICk7XHJcbiAgICAgICAgICAgIHZhciBmYWNlOmYzMiA9IC0gMS4wO1xyXG4gICAgICAgICAgICBpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnogKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKXtcclxuICAgICAgICAgICAgICAgICAgICBmYWNlID1zZWxlY3QoMy4wLDAuMCxkaXJlY3Rpb24ueCA+IDAuMCk7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBmYWNlID1zZWxlY3QoNC4wLDEuMCxkaXJlY3Rpb24ueSA+IDAuMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApe1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2UgPXNlbGVjdCg1LjAsMi4wLGRpcmVjdGlvbi56ID4gMC4wKTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2UgPXNlbGVjdCg0LjAsMS4wLGRpcmVjdGlvbi55ID4gMC4wKTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIGdldFVWKCBkaXJlY3Rpb246dmVjMzxmMzI+LCBmYWNlOmYzMiApLT52ZWMyPGYzMj4ge1xyXG4gICAgICAgICAgICB2YXIgdXY6dmVjMjxmMzI+O1xyXG4gICAgICAgICAgICBpZiAoIGZhY2UgPT0gMC4wICkge1xyXG4gICAgICAgICAgICAgICAgdXYgPSB2ZWMyPGYzMj4oIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcclxuICAgICAgICAgICAgICAgIHV2ID0gdmVjMjxmMzI+KCAtIGRpcmVjdGlvbi54LCAtIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xyXG4gICAgICAgICAgICAgICAgdXYgPSB2ZWMyPGYzMj4oIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xyXG4gICAgICAgICAgICAgICAgdXYgPSB2ZWMyPGYzMj4oIC0gZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xyXG4gICAgICAgICAgICAgICAgdXYgPSB2ZWMyPGYzMj4oIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB1diA9IHZlYzI8ZjMyPiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gYmlsaW5lYXJDdWJlVVYoZW52VGV4dHVyZTp0ZXh0dXJlX2N1YmU8ZjMyPixiYXNlU2FtcGxlcjpzYW1wbGVyLGRpcmVjdGlvbjp2ZWMzPGYzMj4sIG1pcEludDpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgdmFyIGZhY2U6ZjMyID0gZ2V0RmFjZSggZGlyZWN0aW9uICk7XHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXJJbnQ6ZjMyID0gbWF4KCBjdWJlVVZfbWluTWlwTGV2ZWwgLSBtaXBJbnQsIDAuMCApO1xyXG4gICAgICAgICAgICBsZXQgdGVtcE1pcEludCA9IG1heCggbWlwSW50LCBjdWJlVVZfbWluTWlwTGV2ZWwgKTtcclxuICAgICAgICAgICAgbGV0IGZhY2VTaXplOmYzMiA9IGV4cDIoIHRlbXBNaXBJbnQgKTtcclxuICAgICAgICAgICAgdmFyIHV2OnZlYzI8ZjMyPiA9IGdldFVWKCBkaXJlY3Rpb24sIGZhY2UgKSAqICggZmFjZVNpemUgLSAyLjAgKSArIDEuMDtcclxuICAgICAgICAgICAgaWYgKCBmYWNlID4gMi4wICkge1xyXG4gICAgICAgICAgICAgICAgdXYueSArPSBmYWNlU2l6ZTtcclxuICAgICAgICAgICAgICAgIGZhY2UgLT0gMy4wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHV2LnggKz0gZmFjZSAqIGZhY2VTaXplO1xyXG4gICAgICAgICAgICB1di54ICs9IGZpbHRlckludCAqIDMuMCAqIGN1YmVVVl9taW5UaWxlU2l6ZTtcclxuICAgICAgICAgICAgdXYueSArPSA0LjAgKiAoIGV4cDIoIENVQkVVVl9NQVhfTUlQICkgLSBmYWNlU2l6ZSApO1xyXG4gICAgICAgICAgICB1di54ICo9IENVQkVVVl9URVhFTF9XSURUSDtcclxuICAgICAgICAgICAgdXYueSAqPSBDVUJFVVZfVEVYRUxfSEVJR0hUO1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZVNhbXBsZShlbnZUZXh0dXJlLGJhc2VTYW1wbGVyLGRpcmVjdGlvbikucmdiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjdWJlVVZfcjA6ZjMyPSAxLjA7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX3YwOmYzMj0gMC4zMzk7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX20wOmYzMj0gLSAyLjA7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX3IxOmYzMj0gMC44O1xyXG4gICAgICAgIGNvbnN0IGN1YmVVVl92MTpmMzI9IDAuMjc2O1xyXG4gICAgICAgIGNvbnN0IGN1YmVVVl9tMTpmMzI9IC0gMS4wO1xyXG4gICAgICAgIGNvbnN0IGN1YmVVVl9yNDpmMzI9IDAuNDtcclxuICAgICAgICBjb25zdCBjdWJlVVZfdjQ6ZjMyPSAwLjA0NjtcclxuICAgICAgICBjb25zdCBjdWJlVVZfbTQ6ZjMyPSAyLjA7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX3I1OmYzMj0gMC4zMDU7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX3Y1OmYzMj0gMC4wMTY7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX201OmYzMj0gMy4wO1xyXG4gICAgICAgIGNvbnN0IGN1YmVVVl9yNjpmMzI9IDAuMjE7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX3Y2OmYzMj0gMC4wMDM4O1xyXG4gICAgICAgIGNvbnN0IGN1YmVVVl9tNjpmMzI9IDQuMDtcclxuICAgICAgICBmbiByb3VnaG5lc3NUb01pcCggcm91Z2huZXNzOmYzMiktPmYzMiB7XHJcbiAgICAgICAgICAgIHZhciBtaXA6ZjMyID0gMC4wO1xyXG4gICAgICAgICAgICBpZiAoIHJvdWdobmVzcyA+PSBjdWJlVVZfcjEgKSB7XHJcbiAgICAgICAgICAgICAgICBtaXAgPSAoIGN1YmVVVl9yMCAtIHJvdWdobmVzcyApICogKCBjdWJlVVZfbTEgLSBjdWJlVVZfbTAgKSAvICggY3ViZVVWX3IwIC0gY3ViZVVWX3IxICkgKyBjdWJlVVZfbTA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIHJvdWdobmVzcyA+PSBjdWJlVVZfcjQgKSB7XHJcbiAgICAgICAgICAgICAgICBtaXAgPSAoIGN1YmVVVl9yMSAtIHJvdWdobmVzcyApICogKCBjdWJlVVZfbTQgLSBjdWJlVVZfbTEgKSAvICggY3ViZVVWX3IxIC0gY3ViZVVWX3I0ICkgKyBjdWJlVVZfbTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIHJvdWdobmVzcyA+PSBjdWJlVVZfcjUgKSB7XHJcbiAgICAgICAgICAgICAgICBtaXAgPSAoIGN1YmVVVl9yNCAtIHJvdWdobmVzcyApICogKCBjdWJlVVZfbTUgLSBjdWJlVVZfbTQgKSAvICggY3ViZVVWX3I0IC0gY3ViZVVWX3I1ICkgKyBjdWJlVVZfbTQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIHJvdWdobmVzcyA+PSBjdWJlVVZfcjYgKSB7XHJcbiAgICAgICAgICAgICAgICBtaXAgPSAoIGN1YmVVVl9yNSAtIHJvdWdobmVzcyApICogKCBjdWJlVVZfbTYgLSBjdWJlVVZfbTUgKSAvICggY3ViZVVWX3I1IC0gY3ViZVVWX3I2ICkgKyBjdWJlVVZfbTU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtaXAgPSAtIDIuMCAqIGxvZzIoIDEuMTYgKiByb3VnaG5lc3MgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbWlwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmbiB0ZXh0dXJlQ3ViZVVWKGVudlRleHR1cmU6dGV4dHVyZV9jdWJlPGYzMj4sIGJhc2VTYW1wbGVyOnNhbXBsZXIsc2FtcGxlRGlyOnZlYzM8ZjMyPixyb3VnaG5lc3M6ZjMyICktPnZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBjdWJlVVZfbTAsIENVQkVVVl9NQVhfTUlQICk7XHJcbiAgICAgICAgICAgIGxldCBtaXBGID0gZnJhY3QoIG1pcCApO1xyXG4gICAgICAgICAgICBsZXQgbWlwSW50ID0gZmxvb3IoIG1pcCApO1xyXG4gICAgICAgICAgICBsZXQgY29sb3IwOnZlYzM8ZjMyPiA9IGJpbGluZWFyQ3ViZVVWKCBlbnZUZXh0dXJlLGJhc2VTYW1wbGVyLHNhbXBsZURpciwgbWlwSW50ICk7XHJcbiAgICAgICAgICAgIGlmICggbWlwRiA9PSAwLjAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmVjNDxmMzI+KGNvbG9yMCwgMS4wICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29sb3IxOnZlYzM8ZjMyPiA9IGJpbGluZWFyQ3ViZVVWKCBlbnZUZXh0dXJlLGJhc2VTYW1wbGVyLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQ8ZjMyPihtaXgoIGNvbG9yMCwgY29sb3IxLCBtaXBGICksIDEuMCApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAjZW5kaWZcclxuICAgI2lmICR7ZGVmaW5lcy5VU0VfRU5WVEVYVFVSRX1cclxuICAgICAgICBmbiBnZXRJQkxJcnJhZGlhbmNlKCBub3JtYWw6dmVjMzxmMzI+LGJhc2VTYW1wbGVyOnNhbXBsZXIsdmlld01hdHJpeDptYXQ0eDQ8ZjMyPiktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuRU5WVEVYVFVSRV9UWVBFX0NVQkVfVVZ9XHJcbiAgICAgICAgICAgICAgICBsZXQgd29ybGROb3JtYWw6dmVjMzxmMzI+ID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZW52VGV4dHVyZUNvbG9yOnZlYzQ8ZjMyPiA9IHRleHR1cmVDdWJlVVYoIGVudlRleHR1cmUsYmFzZVNhbXBsZXIsIHdvcmxkTm9ybWFsLCAxLjAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQSSAqIGVudlRleHR1cmVDb2xvci5yZ2IgKiBtYXRlcmlhbFVuaWZvcm0uZW52VGV4dHVyZUludGVuc2l0eTtcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIHJldHVybiB2ZWMzPGYzMj4oIDAuMCApO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gZ2V0SUJMUmFkaWFuY2UoIHZpZXdEaXI6dmVjMzxmMzI+LGJhc2VTYW1wbGVyOnNhbXBsZXIsdmlld01hdHJpeDptYXQ0eDQ8ZjMyPixub3JtYWw6dmVjMzxmMzI+LCByb3VnaG5lc3M6ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuRU5WVEVYVFVSRV9UWVBFX0NVQkVfVVZ9XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVmbGVjdFZlYzp2ZWMzPGYzMj4gPSByZWZsZWN0KCAtIHZpZXdEaXIsIG5vcm1hbCApO1xyXG4gICAgICAgICAgICAgICAgcmVmbGVjdFZlYyA9IG5vcm1hbGl6ZSggbWl4KCByZWZsZWN0VmVjLCBub3JtYWwsIHJvdWdobmVzcyAqIHJvdWdobmVzcykgKTtcclxuICAgICAgICAgICAgICAgIHJlZmxlY3RWZWMgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCByZWZsZWN0VmVjLCB2aWV3TWF0cml4ICk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZW52VGV4dHVyZUNvbG9yOnZlYzQ8ZjMyPiA9IHRleHR1cmVDdWJlVVYoIGVudlRleHR1cmUsYmFzZVNhbXBsZXIsIHJlZmxlY3RWZWMsIHJvdWdobmVzcyApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudlRleHR1cmVDb2xvci5yZ2IgKiBtYXRlcmlhbFVuaWZvcm0uZW52VGV4dHVyZUludGVuc2l0eTtcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIHJldHVybiB2ZWMzPGYzMj4oIDAuMCApO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcbiAgIGA7XHJcbn1cclxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YW5jZVZlcnRIZWFkZXIoZGVmaW5lcykge1xuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcbiAgICNpZiAke2RlZmluZXMuVVNFX0lOU1RBTkNFfVxuICAgICAgc3RydWN0IEluc3RhbmNlc1VuaWZvcm0ge1xuICAgICAgICAgaW5zdGFuY2VNYXRyaXhzOiAgYXJyYXk8bWF0NHg0PGYzMj4sICR7ZGVmaW5lcy5pbnN0YW5jZUNvdW50fT4sXG4gICAgICB9O1xuICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5pbnN0YW5jZU1hdHJpeHNCdWZmZXJCaW5kaW5nfSkgdmFyPHN0b3JhZ2UsIHJlYWQ+IGluc3RhbmNlc1VuaWZvcm06IEluc3RhbmNlc1VuaWZvcm07XG4gICAgI2VuZGlmXG4gICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbmNlVmVydE1haW4oZGVmaW5lcykge1xuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcbiAgICAgICNpZiAke2RlZmluZXMuVVNFX0lOU1RBTkNFfVxuICAgICAgICAgbW9kZWxNYXRyaXg9aW5zdGFuY2VzVW5pZm9ybS5pbnN0YW5jZU1hdHJpeHNbaW5wdXQuaW5zdGFuY2VJZHhdO1xuICAgICAgI2VuZGlmXG4gICBgO1xufVxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpZ2h0KGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2AgXHJcbiAgICBzdHJ1Y3QgUmVmbGVjdGVkTGlnaHQge1xyXG4gICAgICAgIGFtYmllbnQ6IHZlYzM8ZjMyPixcclxuICAgICAgICBkaXJlY3REaWZmdXNlOnZlYzM8ZjMyPixcclxuICAgICAgICBkaXJlY3RTcGVjdWxhcjp2ZWMzPGYzMj4sXHJcbiAgICAgICAgaW5kaXJlY3REaWZmdXNlOnZlYzM8ZjMyPixcclxuICAgICAgICBpbmRpcmVjdFNwZWN1bGFyOnZlYzM8ZjMyPixcclxuICAgICAgICB0ZXN0Q29sb3I6IHZlYzM8ZjMyPixcclxuICAgIH07IFxyXG4gICAgc3RydWN0IEluY2lkZW50TGlnaHQge1xyXG4gICAgICAgIGNvbG9yOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgZGlyZWN0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgdmlzaWJsZTogYm9vbCxcclxuICAgIH07XHJcbiAgICBzdHJ1Y3QgR2VvbWV0cnkge1xyXG4gICAgICAgIHBvc2l0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgbm9ybWFsOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgdmlld0RpcjogdmVjMzxmMzI+LFxyXG4gICAgICAgIGRvdE5WOmYzMixcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVR9XHJcbiAgICAgICAgICAgIHZlYzMgY2xlYXJjb2F0Tm9ybWFsO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgfTtcclxuXHJcbiAgICAjaWYgJHtkZWZpbmVzLnNwb3RMaWdodHNDb3VudCA+IDB9XHJcbiAgICAgICAgc3RydWN0IFNwb3RMaWdodCB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgIGRpc3RhbmNlOiBmMzIsXHJcbiAgICAgICAgICAgIGRpcmVjdGlvbjogdmVjMzxmMzI+LFxyXG4gICAgICAgICAgICBjb25lQ29zOiBmMzIsXHJcbiAgICAgICAgICAgIGNvbG9yOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgIHBlbnVtYnJhQ29zOiBmMzIsXHJcbiAgICAgICAgICAgIGRlY2F5OiBmMzIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmbiBnZXRTcG90TGlnaHRJbmZvKHNwb3RMaWdodDpTcG90TGlnaHQsd29ybGRQb3M6dmVjMzxmMzI+LHNoaW5pbmVzczpmMzIsTjp2ZWMzPGYzMj4sVjp2ZWMzPGYzMj4pLT5SZWZsZWN0ZWRMaWdodHtcclxuICAgICAgICAgICAgICAgIHZhciBkaXJlY3Rpb246dmVjMzxmMzI+ID0gc3BvdExpZ2h0LnBvc2l0aW9uIC0gd29ybGRQb3M7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGlnaHRDb2xvcjpSZWZsZWN0ZWRMaWdodDtcclxuICAgICAgICAgICAgICAgIGxldCBsaWdodERpc3RhbmNlOmYzMiA9IGxlbmd0aChkaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gbm9ybWFsaXplKGRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBsZXQgYW5nbGVDb3M6ZjMyID0gZG90KCBkaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTtcclxuICAgICAgICAgICAgICAgIGxldCBkZWNheTpmMzIgPSBjbGFtcCgxLjAgLSBwb3cobGlnaHREaXN0YW5jZS9zcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSksIDAuMCwgMS4wKTtcclxuICAgICAgICAgICAgICAgIGxldCBzcG90RWZmZWN0OmYzMiA9IHNtb290aHN0ZXAoIHNwb3RMaWdodC5wZW51bWJyYUNvcywgc3BvdExpZ2h0LmNvbmVDb3MsIGFuZ2xlQ29zICk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGVjYXlUb3RhbDpmMzIgPSBkZWNheSAqIHNwb3RFZmZlY3Q7XHJcbiAgICAgICAgICAgICAgICBsZXQgZDpmMzIgPSBtYXgoIGRvdCggTiwgZGlyZWN0aW9uICksIDAuMCApICAqIGRlY2F5VG90YWw7XHJcbiAgICAgICAgICAgICAgICBsaWdodENvbG9yLmRpcmVjdERpZmZ1c2U9IHNwb3RMaWdodC5jb2xvciAqIGQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGFsZkRpcjp2ZWMzPGYzMj4gPSBub3JtYWxpemUoIFYgKyBkaXJlY3Rpb24gKTtcclxuICAgICAgICAgICAgICAgIGxldCBzOmYzMiA9IHBvdyggY2xhbXAoIGRvdCggTiwgaGFsZkRpciApLCAwLjAsIDEuMCApLCBzaGluaW5lc3MgKSAqIGRlY2F5VG90YWw7XHJcbiAgICAgICAgICAgICAgICBsaWdodENvbG9yLmRpcmVjdFNwZWN1bGFyPSBzcG90TGlnaHQuY29sb3IgKiBzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpZ2h0Q29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIGdldFNwb3RMaWdodEluY2lkZW50TGlnaHQoc3BvdExpZ2h0OlNwb3RMaWdodCwgZ2VvbWV0cnk6R2VvbWV0cnkpLT5JbmNpZGVudExpZ2h0IHtcclxuICAgICAgICAgICAgdmFyIGluY2lkZW50TGlnaHQ6SW5jaWRlbnRMaWdodDtcclxuICAgICAgICAgICAgbGV0IGxWZWN0b3I6dmVjMzxmMzI+ID0gc3BvdExpZ2h0LnBvc2l0aW9uIC0gZ2VvbWV0cnkucG9zaXRpb247XHJcbiAgICAgICAgICAgIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uID0gbm9ybWFsaXplKCBsVmVjdG9yICk7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IGxpZ2h0RGlzdGFuY2U6ZjMyID0gbGVuZ3RoKCBsVmVjdG9yICk7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZUNvczpmMzIgPSBkb3QoIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IHNwb3RFZmZlY3Q6ZjMyID0gc21vb3Roc3RlcCggc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBzcG90TGlnaHQuY29uZUNvcywgYW5nbGVDb3MgKTtcclxuICAgICAgICAgICAgbGV0IGRlY2F5RWZmZWN0OmYzMiA9IGNsYW1wKDEuMCAtIHBvdyhsaWdodERpc3RhbmNlL3Nwb3RMaWdodC5kaXN0YW5jZSwgNC4wKSwgMC4wLCAxLjApO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGluY2lkZW50TGlnaHQuY29sb3I9c3BvdExpZ2h0LmNvbG9yKnNwb3RFZmZlY3QgKiBkZWNheUVmZmVjdDsgXHJcbiAgICAgICAgICAgIHJldHVybiAgaW5jaWRlbnRMaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgI2VuZGlmIFxyXG5cclxuICAgICNpZiAke2RlZmluZXMucG9pbnRMaWdodHNDb3VudCA+IDB9XHJcbiAgICAgICAgc3RydWN0IFBvaW50TGlnaHQge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogdmVjMzxmMzI+LFxyXG4gICAgICAgICAgICBkaXN0YW5jZTogZjMyLFxyXG4gICAgICAgICAgICBjb2xvcjogdmVjMzxmMzI+LFxyXG4gICAgICAgICAgICBkZWNheTogZjMyLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZm4gZ2V0UG9pbnRMaWdodEluZm8ocG9pbnRMaWdodDpQb2ludExpZ2h0LHdvcmxkUG9zOnZlYzM8ZjMyPixzaGluaW5lc3M6ZjMyLE46dmVjMzxmMzI+LFY6dmVjMzxmMzI+KS0+UmVmbGVjdGVkTGlnaHR7XHJcbiAgICAgICAgICAgIHZhciBsaWdodENvbG9yOlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAgICAgICB2YXIgZGlyZWN0aW9uOnZlYzM8ZjMyPiA9IHdvcmxkUG9zIC0gcG9pbnRMaWdodC5wb3NpdGlvbjtcclxuICAgICAgICAgICAgbGV0IGRpc3Q6ZjMyID0gbGVuZ3RoKCBkaXJlY3Rpb24gKTtcclxuICAgICAgICAgICAgZGlyZWN0aW9uID0gbm9ybWFsaXplKGRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgIGxldCBkZWNheSA9IGNsYW1wKDEuMCAtIHBvdyhkaXN0IC8gcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSksIDAuMCwgMS4wKTtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgZCA9ICBtYXgoIGRvdCggTiwgLWRpcmVjdGlvbiApLCAwLjAgKSAqIGRlY2F5O1xyXG4gICAgICAgICAgICBsaWdodENvbG9yLmRpcmVjdERpZmZ1c2UgPSBwb2ludExpZ2h0LmNvbG9yICogZDtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgaGFsZkRpcjp2ZWMzPGYzMj4gPSBub3JtYWxpemUoIFYgLSBkaXJlY3Rpb24gKTtcclxuICAgICAgICAgICAgbGV0IHM6ZjMyID0gcG93KCBjbGFtcCggZG90KCBOLCBoYWxmRGlyICksIDAuMCwgMS4wICksIHNoaW5pbmVzcyApICAqIGRlY2F5O1xyXG4gICAgICAgICAgICBsaWdodENvbG9yLmRpcmVjdFNwZWN1bGFyID0gcG9pbnRMaWdodC5jb2xvciAqIHM7XHJcbiAgICAgICAgICAgIHJldHVybiBsaWdodENvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmbiBnZXRQb2ludExpZ2h0SW5jaWRlbnRMaWdodChwb2ludExpZ2h0OlBvaW50TGlnaHQsIGdlb21ldHJ5Okdlb21ldHJ5KS0+SW5jaWRlbnRMaWdodCB7XHJcbiAgICAgICAgICAgIHZhciBpbmNpZGVudExpZ2h0OkluY2lkZW50TGlnaHQ7XHJcbiAgICAgICAgICAgIGxldCBsVmVjdG9yOnZlYzM8ZjMyPiA9IHBvaW50TGlnaHQucG9zaXRpb24tZ2VvbWV0cnkucG9zaXRpb247XHJcbiAgICAgICAgICAgIGluY2lkZW50TGlnaHQuZGlyZWN0aW9uPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcclxuICAgICAgICAgICAgbGV0IGxpZ2h0RGlzdGFuY2U6ZjMyID0gbGVuZ3RoKCBsVmVjdG9yICk7XHJcbiAgICAgICAgICAgIC8vIGxldCB3ZWlnaHQ6ZjMyPTEuMCAtIHBvdyhsaWdodERpc3RhbmNlL3BvaW50TGlnaHQuZGlzdGFuY2UsIDQuMCk7XHJcbiAgICAgICAgICAgIGluY2lkZW50TGlnaHQuY29sb3I9cG9pbnRMaWdodC5jb2xvcipjbGFtcCgxLjAgLSBwb3cobGlnaHREaXN0YW5jZS9wb2ludExpZ2h0LmRpc3RhbmNlLCA0LjApLCAwLjAsIDEuMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBpbmNpZGVudExpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICNlbmRpZlxyXG4gICAgI2lmICR7ZGVmaW5lcy5kaXJ0ZWN0TGlnaHRzQ291bnQgPiAwfVxyXG4gICAgICAgIHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0IHtcclxuICAgICAgICAgICAgZGlyZWN0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgIGNvbG9yOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmbiBnZXREaXJlY3RMaWdodEluZm8oZGlyZWN0aW9uYWxMaWdodDpEaXJlY3Rpb25hbExpZ2h0LHNoaW5pbmVzczpmMzIsTjp2ZWMzPGYzMj4sVjp2ZWMzPGYzMj4pLT5SZWZsZWN0ZWRMaWdodHtcclxuICAgICAgICAgICAgdmFyIGxpZ2h0Q29sb3I6UmVmbGVjdGVkTGlnaHQ7XHJcbiAgICAgICAgICAgIGxldCBkOmYzMiA9IG1heChkb3QoTiwgLWRpcmVjdGlvbmFsTGlnaHQuZGlyZWN0aW9uKSwgMC4wKTtcclxuICAgICAgICAgICAgbGlnaHRDb2xvci5kaXJlY3REaWZmdXNlICs9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3IgKiBkO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCBoYWxmRGlyOnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggViAtIGRpcmVjdGlvbmFsTGlnaHQuZGlyZWN0aW9uICk7XHJcbiAgICAgICAgICAgIGxldCBzOmYzMiA9IHBvdyggY2xhbXAoIGRvdCggTiwgaGFsZkRpciApLCAwLjAsIDEuMCApLCBzaGluaW5lc3MgKTtcclxuICAgICAgICAgICAgbGlnaHRDb2xvci5kaXJlY3RTcGVjdWxhciArPSBkaXJlY3Rpb25hbExpZ2h0LmNvbG9yICogcztcclxuICAgICAgICAgICAgcmV0dXJuIGxpZ2h0Q29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIGdldERpcmVjdGlvbmFsRGlyZWN0TGlnaHRJbmNpZGVudExpZ2h0KGRpcmVjdGlvbmFsTGlnaHQ6RGlyZWN0aW9uYWxMaWdodCxnZW9tZXRyeTpHZW9tZXRyeSktPkluY2lkZW50TGlnaHQge1xyXG4gICAgICAgICAgICB2YXIgaW5jaWRlbnRMaWdodDpJbmNpZGVudExpZ2h0O1xyXG4gICAgICAgICAgICBpbmNpZGVudExpZ2h0LmNvbG9yID0gZGlyZWN0aW9uYWxMaWdodC5jb2xvcjtcclxuICAgICAgICAgICAgaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICByZXR1cm4gaW5jaWRlbnRMaWdodDsgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWYgJHtkZWZpbmVzLm9wZW5TaGFkb3d9IFxyXG4gICAgICAgIHN0cnVjdCBMaWdodEluZm8ge1xyXG4gICAgICAgICAgICBkaXJlY3Rpb246IHZlYzM8ZjMyPixcclxuICAgICAgICAgICAgdmlld3BvcnQ6IHZlYzQ8ZjMyPixcclxuICAgICAgICB9O1xyXG4gICAgICAgIFxyXG4gICAgICAgIGZuIGxpbmVhcml6ZURlcHRoKGRlcHRoOiBmMzIsIG5lYXI6IGYzMiwgZmFyOiBmMzIpLT5mMzIge1xyXG4gICAgICAgICAgICByZXR1cm4gMiAqIChuZWFyICogZmFyKSAvIChmYXIgKyBuZWFyIC0gZGVwdGggKiAoZmFyIC0gbmVhcikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm4gZ2V0Q3ViZUZhY2UodiA6IHZlYzM8ZjMyPikgLT4gaTMye1xyXG4gICAgICAgICAgICBsZXQgdkFicyA9IGFicyh2KTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHZBYnMueiA+PSB2QWJzLnggJiYgdkFicy56ID49IHZBYnMueSkge1xyXG4gICAgICAgICAgICAgIGlmICh2LnogPCAwLjApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAzO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBpZiAodkFicy55ID49IHZBYnMueCkge1xyXG4gICAgICAgICAgICAgIGlmICh2LnkgPCAwLjApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiA1O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gNDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBpZiAodi54IDwgMC4wKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmbiBnZXRTaGFkb3dWYWx1ZShzaGFkb3dNYXBBcnJheTp0ZXh0dXJlX2RlcHRoXzJkX2FycmF5LCBzaGFkb3dTYW1wbGVyOnNhbXBsZXJfY29tcGFyaXNvbiwgbGlnaHRQb3M6dmVjNDxmMzI+LCBnZW9tZXRyeTpHZW9tZXRyeSwgbGlnaHRJbmZvOkxpZ2h0SW5mbywgaW5kZXg6dTMyLCBpc1BvaW50TGlnaHQ6IGJvb2wsIG5lYXI6IGYzMiwgZmFyOiBmMzIpLT5mMzIge1xyXG4gICAgICAgICAgICB2YXIgdmlzaWJpbGl0eSA9IDAuMDtcclxuICAgICAgICAgICAgdmFyIHByb2plY3RQb3M6IHZlYzM8ZjMyPiA9IGxpZ2h0UG9zLnh5eiAvIGxpZ2h0UG9zLnc7XHJcbiAgICAgICAgICAgIHZhciBzaGFkb3dQb3M6IHZlYzM8ZjMyPiA9IHZlYzMocHJvamVjdFBvcy54eSAqIHZlYzIoMC41LCAtMC41KSArIHZlYzIoMC41KSwgcHJvamVjdFBvcy56KTtcclxuICAgICAgICAgICAgdmFyIGQ6ZjMyID0gZG90KGdlb21ldHJ5Lm5vcm1hbCwgLWxpZ2h0SW5mby5kaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICB2YXIgYmlhcyA9IG1heCgwLjAxMiAqICgxLjAgLSBkKSwgMC4wMDEpIC8gbGlnaHRQb3MudztcclxuICAgICAgICAgICAgbGV0IG9uZU92ZXJTaGFkb3dEZXB0aFRleHR1cmVTaXplID0gMS4wIC8gMTAyNC4wO1xyXG4gICAgICAgICAgICAvLyB2YXIgZGVwdGggPSBzZWxlY3Qoc2hhZG93UG9zLnosIChsaW5lYXJpemVEZXB0aChzaGFkb3dQb3MueiwgbmVhciwgZmFyKSAtIG5lYXIpIC8gKGZhci0gbmVhciksIGlzUGVyc3BlY3RpdmVDYW1lcmEpO1xyXG4gICAgICAgICAgICB2YXIgZGVwdGggPSBzaGFkb3dQb3MuejtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1BvaW50TGlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHNoYWRvd1Bvcy54ID0gc2hhZG93UG9zLnggKiBsaWdodEluZm8udmlld3BvcnQuejtcclxuICAgICAgICAgICAgICAgIHNoYWRvd1Bvcy55ID0gc2hhZG93UG9zLnkgKiBsaWdodEluZm8udmlld3BvcnQudztcclxuICAgICAgICAgICAgICAgIHZhciB2aWV3cG9ydFggPSBsaWdodEluZm8udmlld3BvcnQueCAqIGxpZ2h0SW5mby52aWV3cG9ydC56O1xyXG4gICAgICAgICAgICAgICAgdmFyIHZpZXdwb3J0WSA9IGxpZ2h0SW5mby52aWV3cG9ydC55ICogbGlnaHRJbmZvLnZpZXdwb3J0Lnc7XHJcbiAgICAgICAgICAgICAgICB2YXIgdXZPZmZzZXQgPSAxLjUgLyAxMDI0LjA7XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dQb3MueCA9IGNsYW1wKHNoYWRvd1Bvcy54ICsgdmlld3BvcnRYLCB2aWV3cG9ydFggKyB1dk9mZnNldCwgdmlld3BvcnRYICsgbGlnaHRJbmZvLnZpZXdwb3J0LnogLSB1dk9mZnNldCk7XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dQb3MueSA9IGNsYW1wKHNoYWRvd1Bvcy55ICsgdmlld3BvcnRZLCB2aWV3cG9ydFkgKyB1dk9mZnNldCwgdmlld3BvcnRZICsgbGlnaHRJbmZvLnZpZXdwb3J0LncgLSB1dk9mZnNldCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIHkgPSAtMTsgeSA8PSAxOyB5KyspIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAtMTsgeCA8PSAxOyB4KyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2Zmc2V0ID0gdmVjMjxmMzI+KHZlYzIoeCwgeSkpICogb25lT3ZlclNoYWRvd0RlcHRoVGV4dHVyZVNpemU7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5ICs9IHRleHR1cmVTYW1wbGVDb21wYXJlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dNYXBBcnJheSwgc2hhZG93U2FtcGxlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93UG9zLnh5ICsgb2Zmc2V0LCBpbmRleCwgZGVwdGggLSBiaWFzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5IC89IDkuMDtcclxuICAgICAgICAgICAgdmFyIGluRnJ1c3R1bSA9IHNoYWRvd1Bvcy54ID49IDAuMCAmJiBzaGFkb3dQb3MueCA8PSAxLjAgJiYgc2hhZG93UG9zLnkgPj0gMC4wICYmIHNoYWRvd1Bvcy55IDw9IDEuMDtcclxuICAgICAgICAgICAgaWYgKCFpbkZydXN0dW0gfHwgZGVwdGggPiAxLjApIHtcclxuICAgICAgICAgICAgICAgIHZpc2liaWxpdHkgPSAxLjA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHZpc2liaWxpdHk7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2lmICR7XHJcblx0XHRkZWZpbmVzLmFtYmllbnRMaWdodENvdW50IHx8IGRlZmluZXMuc3BvdExpZ2h0c0NvdW50IHx8IGRlZmluZXMucG9pbnRMaWdodHNDb3VudCB8fCBkZWZpbmVzLmRpcnRlY3RMaWdodHNDb3VudFxyXG5cdH1cclxuICAgICAgICBzdHJ1Y3QgTGlnaHRVbmlmb3Jtc3tcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5hbWJpZW50TGlnaHRDb3VudH1cclxuICAgICAgICAgICAgICAgIGFtYmllbnQ6dmVjNDxmMzI+LFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5zcG90TGlnaHRzQ291bnR9XHJcbiAgICAgICAgICAgICAgICBzcG90TGlnaHRzOmFycmF5PFNwb3RMaWdodCwke2RlZmluZXMuc3BvdExpZ2h0c0NvdW50fT4sXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLnBvaW50TGlnaHRzQ291bnR9XHJcbiAgICAgICAgICAgICAgICBwb2ludExpZ2h0czphcnJheTxQb2ludExpZ2h0LCR7ZGVmaW5lcy5wb2ludExpZ2h0c0NvdW50fT4sXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLmRpcnRlY3RMaWdodHNDb3VudH1cclxuICAgICAgICAgICAgICAgIGRpcnRlY3RMaWdodHM6YXJyYXk8RGlyZWN0aW9uYWxMaWdodCwke2RlZmluZXMuZGlydGVjdExpZ2h0c0NvdW50fT4sXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgIH1cclxuICAgICAgICBAZ3JvdXAoMikgQGJpbmRpbmcoJHtkZWZpbmVzLmxpZ2h0QmluZGluZ30pIHZhcjxzdG9yYWdlLCByZWFkPiBsaWdodFVuaWZvcm1zOiBMaWdodFVuaWZvcm1zO1xyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLm9wZW5TaGFkb3d9XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuc3BvdExpZ2h0U2hhZG93TWFwc0NvdW50fVxyXG4gICAgICAgICAgICAgICAgc3RydWN0IFNwb3RMaWdodFNoYWRvdyB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZG93Q2FtZXJhVlBNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0NhbWVyYU5lYXI6IGYzMixcclxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dDYW1lcmFGYXI6IGYzMlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5wb2ludExpZ2h0U2hhZG93TWFwc0NvdW50fVxyXG4gICAgICAgICAgICAgICAgc3RydWN0IFBvaW50TGlnaHRTaGFkb3cge1xyXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0NhbWVyYVZQTWF0cml4QXJyYXk6IGFycmF5PG1hdDR4NDxmMzI+LCA2PixcclxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dDYW1lcmFWaWV3cG9ydEFycmF5OiBhcnJheTx2ZWM0PGYzMj4sIDY+LFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0NhbWVyYU5lYXI6IGYzMixcclxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dDYW1lcmFGYXI6IGYzMixcclxuICAgICAgICAgICAgICAgICAgICAvLyBzaGFkb3dDYW1lcmFWUE1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2hhZG93Q2FtZXJhVlBNYXRyaXhBcnJheTogYXJyYXk8bWF0NHg0PGYzMj4sIDY+LFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNoYWRvd0NhbWVyYVZpZXdwb3J0QXJyYXk6IGFycmF5PHZlYzQ8ZjMyPiwgNj4sXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLmRpcmVjdExpZ2h0U2hhZG93TWFwc0NvdW50fVxyXG4gICAgICAgICAgICAgICAgc3RydWN0IERpcmVjdExpZ2h0U2hhZG93IHtcclxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dDYW1lcmFWUE1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICBzdHJ1Y3QgU2hhZG93VW5pZm9ybXN7XHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLnNwb3RMaWdodFNoYWRvd01hcHNDb3VudH1cclxuICAgICAgICAgICAgICAgICAgICBzcG90TGlnaHRTaGFkb3dzOmFycmF5PFNwb3RMaWdodFNoYWRvdywke2RlZmluZXMuc3BvdExpZ2h0U2hhZG93TWFwc0NvdW50fT4sXHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMucG9pbnRMaWdodFNoYWRvd01hcHNDb3VudH1cclxuICAgICAgICAgICAgICAgICAgICBwb2ludExpZ2h0U2hhZG93czphcnJheTxQb2ludExpZ2h0U2hhZG93LCR7ZGVmaW5lcy5wb2ludExpZ2h0U2hhZG93TWFwc0NvdW50fT4sXHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuZGlyZWN0TGlnaHRTaGFkb3dNYXBzQ291bnR9XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0TGlnaHRTaGFkb3dzOmFycmF5PERpcmVjdExpZ2h0U2hhZG93LCR7ZGVmaW5lcy5kaXJlY3RMaWdodFNoYWRvd01hcHNDb3VudH0+LFxyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQGdyb3VwKDIpIEBiaW5kaW5nKCR7ZGVmaW5lcy5zaGFkb3dCaW5kaW5nfSkgdmFyPHN0b3JhZ2UsIHJlYWQ+IHNoYWRvd1VuaWZvcm1zOiBTaGFkb3dVbmlmb3JtcztcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5QmluZGluZ31cclxuICAgICAgICAgICAgICAgIEBncm91cCgyKSBAYmluZGluZygke1xyXG5cdFx0XHRcdFx0ZGVmaW5lcy5zcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXlCaW5kaW5nXHJcblx0XHRcdFx0fSkgdmFyIHNwb3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheTogdGV4dHVyZV9kZXB0aF8yZF9hcnJheTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMucG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheUJpbmRpbmd9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMikgQGJpbmRpbmcoJHtcclxuXHRcdFx0XHRcdGRlZmluZXMucG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheUJpbmRpbmdcclxuXHRcdFx0XHR9KSB2YXIgcG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheTogdGV4dHVyZV9kZXB0aF8yZF9hcnJheTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXlCaW5kaW5nfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDIpIEBiaW5kaW5nKCR7XHJcblx0XHRcdFx0XHRkZWZpbmVzLmRpcmVjdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5QmluZGluZ1xyXG5cdFx0XHRcdH0pIHZhciBkaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheTogdGV4dHVyZV9kZXB0aF8yZF9hcnJheTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIEBncm91cCgyKSBAYmluZGluZygke2RlZmluZXMuc2hhZG93U2FtcGxlckJpbmRpbmd9KSB2YXIgc2hhZG93U2FtcGxlcjogc2FtcGxlcl9jb21wYXJpc29uO1xyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICNlbmRpZlxyXG4gICAgI2lmICR7ZGVmaW5lcy5tYXRlcmlhbFBob25nfVxyXG4gICAgICAgIGZuIHBhcnNlTGlnaHRzKGdlb21ldHJ5Okdlb21ldHJ5LHNoaW5pbmVzczpmMzIpLT5SZWZsZWN0ZWRMaWdodCB7XHJcbiAgICAjZWxpZiAke2RlZmluZXMubWF0ZXJpYWxQYnJ9XHJcbiAgICAgICAgZm4gcGFyc2VMaWdodHMoZ2VvbWV0cnk6R2VvbWV0cnksbWF0ZXJpYWw6UGh5c2ljYWxNYXRlcmlhbCktPlJlZmxlY3RlZExpZ2h0e1xyXG4gICAgI2VuZGlmXHJcbiAgICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAgIHZhciBzaGFkb3dWYWx1ZTpmMzIgPSAxLjA7XHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5hbWJpZW50TGlnaHRDb3VudCA+IDB9XHJcbiAgICAgICAgICAgIC8v5aSE55CG546v5aKD5YWJXHJcbiAgICAgICAgICAgIHZhciBhbWJpZW50Q29sb3I6dmVjMzxmMzI+ID0gbGlnaHRVbmlmb3Jtcy5hbWJpZW50Lnh5eiAqIGxpZ2h0VW5pZm9ybXMuYW1iaWVudC53O1xyXG4gICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5hbWJpZW50ICs9IGFtYmllbnRDb2xvcjtcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5zcG90TGlnaHRzQ291bnQgPiAwfVxyXG4gICAgICAgICAgICAvL+WkhOeQhuiBmuWFieeBr1xyXG4gICAgICAgICAgICB2YXIgc3BvdExpZ2h0OlNwb3RMaWdodDtcclxuICAgICAgICAgICAgZm9yICh2YXIgayA9IDB1OyBrIDwgJHtkZWZpbmVzLnNwb3RMaWdodHNDb3VudH07IGsgPSBrICsgMXUpIHtcclxuICAgICAgICAgICAgICAgIHNwb3RMaWdodD0gbGlnaHRVbmlmb3Jtcy5zcG90TGlnaHRzW2tdO1xyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5tYXRlcmlhbFBob25nICYmIGRlZmluZXMub3BlblNoYWRvdyAmJiBkZWZpbmVzLnNwb3RMaWdodFNoYWRvd01hcHNDb3VudH1cclxuICAgICAgICAgICAgICAgICAgICBpZiBrIDwgdGV4dHVyZU51bUxheWVycyhzcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwb3RMaWdodFNoYWRvdzpTcG90TGlnaHRTaGFkb3cgPSBzaGFkb3dVbmlmb3Jtcy5zcG90TGlnaHRTaGFkb3dzW2tdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlnaHRQb3M6IHZlYzQ8ZjMyPiA9IHNwb3RMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFWUE1hdHJpeCAqIHZlYzQ8ZjMyPihnZW9tZXRyeS5wb3NpdGlvbiwxLjApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlnaHRJbmZvOkxpZ2h0SW5mbztcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHRJbmZvLmRpcmVjdGlvbiA9IG5vcm1hbGl6ZShnZW9tZXRyeS5wb3NpdGlvbiAtIHNwb3RMaWdodC5wb3NpdGlvbik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dWYWx1ZSA9IGdldFNoYWRvd1ZhbHVlKHNwb3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSwgc2hhZG93U2FtcGxlciwgbGlnaHRQb3MsIGdlb21ldHJ5LCBsaWdodEluZm8sIGssIGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFGYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzcG90TGlnaHQuY29sb3IgKj0gc2hhZG93VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMubWF0ZXJpYWxQaG9uZ31cclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3BSZWZsZWN0ZWRMaWdodD1nZXRTcG90TGlnaHRJbmZvKHNwb3RMaWdodCxnZW9tZXRyeS5wb3NpdGlvbixzaGluaW5lc3MsZ2VvbWV0cnkubm9ybWFsLGdlb21ldHJ5LnZpZXdEaXIpO1xyXG4gICAgICAgICAgICAgICAgI2VsaWYgJHtkZWZpbmVzLm1hdGVyaWFsUGJyfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmNpZGVudExpZ2h0PWdldFNwb3RMaWdodEluY2lkZW50TGlnaHQoc3BvdExpZ2h0LGdlb21ldHJ5KTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3BSZWZsZWN0ZWRMaWdodD1kaXJlY3RfUGh5c2ljYWwoaW5jaWRlbnRMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsKTtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UrPXNwUmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZTtcclxuICAgICAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyKz1zcFJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5wb2ludExpZ2h0c0NvdW50ID4gMH1cclxuICAgICAgICAgICAgLy/lpITnkIbngrnlhYnmupBcclxuICAgICAgICAgICAgdmFyIHBvaW50TGlnaHQ6UG9pbnRMaWdodDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDB1OyBqIDwgJHtkZWZpbmVzLnBvaW50TGlnaHRzQ291bnR9O2ogPSBqICsgMXUpIHtcclxuICAgICAgICAgICAgICAgIHBvaW50TGlnaHQgPSBsaWdodFVuaWZvcm1zLnBvaW50TGlnaHRzW2pdO1xyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5tYXRlcmlhbFBob25nICYmIGRlZmluZXMub3BlblNoYWRvdyAmJiBkZWZpbmVzLnBvaW50TGlnaHRTaGFkb3dNYXBzQ291bnR9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgaiA8IHRleHR1cmVOdW1MYXllcnMocG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9pbnRMaWdodFNoYWRvdzpQb2ludExpZ2h0U2hhZG93ID0gc2hhZG93VW5pZm9ybXMucG9pbnRMaWdodFNoYWRvd3Nbal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaWdodEluZm86TGlnaHRJbmZvO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaWdodEluZm8uZGlyZWN0aW9uID0gbm9ybWFsaXplKGdlb21ldHJ5LnBvc2l0aW9uIC0gcG9pbnRMaWdodC5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdWJlRmFjZSA9IGdldEN1YmVGYWNlKGxpZ2h0SW5mby5kaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlnaHRQb3M6IHZlYzQ8ZjMyPiA9IHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhVlBNYXRyaXhBcnJheVtjdWJlRmFjZV0gKiB2ZWM0PGYzMj4oZ2VvbWV0cnkucG9zaXRpb24sMS4wKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHRJbmZvLnZpZXdwb3J0ID0gcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFWaWV3cG9ydEFycmF5W2N1YmVGYWNlXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhciBsaWdodFBvczogdmVjNDxmMzI+ID0gcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFWUE1hdHJpeCAqIHZlYzQ8ZjMyPihnZW9tZXRyeS5wb3NpdGlvbiwxLjApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93VmFsdWUgPSBnZXRTaGFkb3dWYWx1ZShwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5LCBzaGFkb3dTYW1wbGVyLCBsaWdodFBvcywgZ2VvbWV0cnksIGxpZ2h0SW5mbywgaiwgdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFGYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmbGVjdGVkTGlnaHQudGVzdENvbG9yID0gdmVjMyhwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYUZhciAvIDEwMDAsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFWUE1hdHJpeEFycmF5WzVdWzNdWzJdIC8gMjU1LCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYVZQTWF0cml4QXJyYXlbNV1bM11bM10gLyAyNTUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWZsZWN0ZWRMaWdodC50ZXN0Q29sb3IgPSB2ZWMzKHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwb2ludExpZ2h0LmNvbG9yICo9IHNoYWRvd1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLm1hdGVyaWFsUGhvbmd9XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvaVJlZmxlY3RlZExpZ2h0PWdldFBvaW50TGlnaHRJbmZvKHBvaW50TGlnaHQsZ2VvbWV0cnkucG9zaXRpb24sc2hpbmluZXNzLGdlb21ldHJ5Lm5vcm1hbCxnZW9tZXRyeS52aWV3RGlyKTtcclxuICAgICAgICAgICAgICAgICNlbGlmICR7ZGVmaW5lcy5tYXRlcmlhbFBicn1cclxuICAgICAgICAgICAgICAgICAgIGxldCBpbmNpZGVudExpZ2h0PWdldFBvaW50TGlnaHRJbmNpZGVudExpZ2h0KHBvaW50TGlnaHQsZ2VvbWV0cnkpO1xyXG4gICAgICAgICAgICAgICAgICAgbGV0IHBvaVJlZmxlY3RlZExpZ2h0PWRpcmVjdF9QaHlzaWNhbChpbmNpZGVudExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSs9cG9pUmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZTtcclxuICAgICAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyKz1wb2lSZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuZGlydGVjdExpZ2h0c0NvdW50ID4gMH1cclxuICAgICAgICAgICAgLy/lpITnkIbmlrnlkJHlhYlcclxuICAgICAgICAgICAgdmFyIGRpcmVjdGlvbmFsTGlnaHQ6RGlyZWN0aW9uYWxMaWdodDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaT0gMHU7IGkgPCR7ZGVmaW5lcy5kaXJ0ZWN0TGlnaHRzQ291bnR9OyBpID0gaSArIDF1KSB7XHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0ID0gbGlnaHRVbmlmb3Jtcy5kaXJ0ZWN0TGlnaHRzW2ldO1xyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5tYXRlcmlhbFBob25nICYmIGRlZmluZXMub3BlblNoYWRvdyAmJiBkZWZpbmVzLmRpcmVjdExpZ2h0U2hhZG93TWFwc0NvdW50fVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIGkgPCB0ZXh0dXJlTnVtTGF5ZXJzKGRpcmVjdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaXJlY3RMaWdodFNoYWRvdzpEaXJlY3RMaWdodFNoYWRvdyA9IHNoYWRvd1VuaWZvcm1zLmRpcmVjdExpZ2h0U2hhZG93c1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpZ2h0UG9zOiB2ZWM0PGYzMj4gPSBkaXJlY3RMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFWUE1hdHJpeCAqIHZlYzQ8ZjMyPihnZW9tZXRyeS5wb3NpdGlvbiwxLjApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlnaHRJbmZvOkxpZ2h0SW5mbztcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHRJbmZvLmRpcmVjdGlvbiA9IGRpcmVjdGlvbmFsTGlnaHQuZGlyZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1ZhbHVlID0gZ2V0U2hhZG93VmFsdWUoZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXksIHNoYWRvd1NhbXBsZXIsIGxpZ2h0UG9zLCBnZW9tZXRyeSwgbGlnaHRJbmZvLCBpLCBmYWxzZSwgMCwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbmFsTGlnaHQuY29sb3IgKj0gc2hhZG93VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLm1hdGVyaWFsUGhvbmd9XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRpclJlZmxlY3RlZExpZ2h0PWdldERpcmVjdExpZ2h0SW5mbyhkaXJlY3Rpb25hbExpZ2h0LHNoaW5pbmVzcyxnZW9tZXRyeS5ub3JtYWwsZ2VvbWV0cnkudmlld0Rpcik7XHJcbiAgICAgICAgICAgICAgICAjZWxpZiAke2RlZmluZXMubWF0ZXJpYWxQYnJ9XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluY2lkZW50TGlnaHQ9Z2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodEluY2lkZW50TGlnaHQoZGlyZWN0aW9uYWxMaWdodCxnZW9tZXRyeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRpclJlZmxlY3RlZExpZ2h0PWRpcmVjdF9QaHlzaWNhbChpbmNpZGVudExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSs9ZGlyUmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZTtcclxuICAgICAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyKz1kaXJSZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHJldHVybiByZWZsZWN0ZWRMaWdodDtcclxuICAgIH1gO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaWdodENvbW1vbihkZWZpbmVzKSB7XHJcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXHJcbiAgICBzdHJ1Y3QgUmVmbGVjdGVkTGlnaHQge1xyXG4gICAgICAgIGRpcmVjdERpZmZ1c2U6dmVjMzxmMzI+LFxyXG4gICAgICAgIGRpcmVjdFNwZWN1bGFyOnZlYzM8ZjMyPixcclxuICAgICAgICBpbmRpcmVjdERpZmZ1c2U6dmVjMzxmMzI+LFxyXG4gICAgICAgIGluZGlyZWN0U3BlY3VsYXI6dmVjMzxmMzI+LFxyXG4gICAgfTtcclxuICAgIHN0cnVjdCBHZW9tZXRyeSB7XHJcbiAgICAgICAgcG9zaXRpb246IHZlYzM8ZjMyPixcclxuICAgICAgICBub3JtYWw6IHZlYzM8ZjMyPixcclxuICAgICAgICB2aWV3RGlyOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUfVxyXG4gICAgICAgICAgICB2ZWMzIGNsZWFyY29hdE5vcm1hbDtcclxuICAgICAgICAjZW5kaWZcclxuICAgIH07XHJcbiAgICBmbiBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKGFtYmllbnRMaWdodENvbG9yOiB2ZWMzPGYzMj4pIC0+IHZlYzM8ZjMyPiB7XHJcbiAgICAgICAgbGV0IGlycmFkaWFuY2UgPSBhbWJpZW50TGlnaHRDb2xvcjtcclxuICAgICAgICByZXR1cm4gaXJyYWRpYW5jZTtcclxuICAgIH1cclxuICAgIGZuIGdldERpc3RhbmNlQXR0ZW51YXRpb24obGlnaHREaXN0YW5jZTogZjMyLCBjdXRvZmZEaXN0YW5jZTogZjMyLCBkZWNheUV4cG9uZW50OiBmMzIpIC0+IGYzMiB7XHJcbiAgICAgICAgaWYgKGN1dG9mZkRpc3RhbmNlID4gMC4wICYmIGRlY2F5RXhwb25lbnQgPiAwLjApIHtcclxuICAgICAgICAgICAgbGV0IHg6ZjMyID0gc2F0dXJhdGUoLSBsaWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjApO1xyXG4gICAgICAgICAgICByZXR1cm4gcG93KHgsIGRlY2F5RXhwb25lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMS4wO1xyXG4gICAgfVxyXG4gICAgZm4gZ2V0U3BvdEF0dGVudWF0aW9uKGNvbmVDb3NpbmU6IGYzMiwgcGVudW1icmFDb3NpbmU6IGYzMiwgYW5nbGVDb3NpbmU6IGYzMikgLT4gZjMyIHtcclxuICAgICAgICByZXR1cm4gc21vb3Roc3RlcChjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUpO1xyXG4gICAgfVxyXG4gICAgZm4gc2hHZXRJcnJhZGlhbmNlQXQoIG5vcm1hbDp2ZWMzPGYzMj4sIHNoQ29lZmZpY2llbnRzOmFycmF5PHZlYzM8ZjMyPiw5PiktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgbGV0IHg6ZjMyID0gbm9ybWFsLng7IFxyXG4gICAgICAgIGxldCB5OmYzMiA9IG5vcm1hbC55OyBcclxuICAgICAgICBsZXQgejpmMzIgPSBub3JtYWwuejtcclxuICAgICAgICB2YXIgcmVzdWx0OnZlYzM8ZjMyPiA9IHNoQ29lZmZpY2llbnRzWyAwIF0gKiAwLjg4NjIyNztcclxuICAgICAgICByZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDEgXSAqIDIuMCAqIDAuNTExNjY0ICogeTtcclxuICAgICAgICByZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejtcclxuICAgICAgICByZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDMgXSAqIDIuMCAqIDAuNTExNjY0ICogeDtcclxuICAgICAgICByZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDQgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHk7XHJcbiAgICAgICAgcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6O1xyXG4gICAgICAgIHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNiBdICogKCAwLjc0MzEyNSAqIHogKiB6IC0gMC4yNDc3MDggKTtcclxuICAgICAgICByZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDcgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHo7XHJcbiAgICAgICAgcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBmbiBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBkaXI6dmVjMzxmMzI+LCBtYXRyaXg6bWF0NHg0PGYzMj4gKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICByZXR1cm4gbm9ybWFsaXplKCAoIHZlYzQ8ZjMyPiggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xyXG4gICAgfVxyXG4gYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcbmV4cG9ydCBmdW5jdGlvbiBnZXROb3JtYWwoZGVmaW5lcykge1xuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcbiAgICAgIGZuIGdldE5vcm1hbChpbnB1dDpGcmFnSW5wdXQpLT52ZWMzPGYzMj57XG4gICAgICAgIHZhciBub3JtYWw6dmVjMzxmMzI+O1xuICAgICAgICAjaWYgJHtkZWZpbmVzLkhBU19OT1JNQUx9XG4gICAgICAgICAgICBub3JtYWw9IGlucHV0Lm5vcm1hbDtcbiAgICAgICAgI2Vsc2VcbiAgICAgICAgICBsZXQgcG9zX2R4ID0gZHBkeChpbnB1dC53b3JsZFBvcyk7XG4gICAgICAgICAgbGV0IHBvc19keSA9IGRwZHkoaW5wdXQud29ybGRQb3MpO1xuICAgICAgICAgIG5vcm1hbCA9IG5vcm1hbGl6ZSggY3Jvc3MocG9zX2R5LCBwb3NfZHgpICk7XG4gICAgICAgICNlbmRpZlxuICAgICAgICByZXR1cm4gbm9ybWFsKihmMzIoaW5wdXQuZnJvbnRGYWNpbmcpICogMi4wIC0gMS4wKTtcbiAgICAgIH1cbiAgICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE5vcm1hbEJ5Tm9ybWFsVGV4dHVyZShkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgICAgZm4gZ2V0Tm9ybWFsQnlOb3JtYWxUZXh0dXJlKGlucHV0OkZyYWdJbnB1dCktPnZlYzM8ZjMyPntcbiAgICAgICAgdmFyIG46dmVjMzxmMzI+ID0gdGV4dHVyZVNhbXBsZShub3JtYWxUZXh0dXJlLG5vcm1hbFNhbXBsZXIsIGlucHV0LnV2KS5yZ2I7XG4gICAgICAgIGxldCB0Ym46bWF0M3gzPGYzMj4gPWdldFRCTihpbnB1dCk7XG4gICAgICAgIG4gPSBub3JtYWxpemUodGJuICogKDIuMCAqIG4gLSB2ZWMzKDEuMCkpKTtcbiAgICAgICAgbj1uKihmMzIoaW5wdXQuZnJvbnRGYWNpbmcpICogMi4wIC0gMS4wKTtcbiAgICAgICAgcmV0dXJuIG47XG4gICAgICB9XG4gICAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRUQk4oZGVmaW5lcykge1xuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcbiAgICAgICAgZm4gZ2V0VEJOKGlucHV0OkZyYWdJbnB1dCktPm1hdDN4MzxmMzI+e1xuICAgICAgICAjaWYgJHtkZWZpbmVzLkhBU19UQU5HRU5UfVxuICAgICAgICAgICAgbGV0IHRibjptYXQzeDM8ZjMyPiA9IGlucHV0LnRibjtcbiAgICAgICAgI2Vsc2VcbiAgICAgICAgICAgIGxldCBub3JtYWw6dmVjMzxmMzI+ID1ub3JtYWxpemUoaW5wdXQubm9ybWFsKTtcbiAgICAgICAgICAgIGxldCB1djp2ZWMyPGYzMj4gPSBzZWxlY3QoLWlucHV0LnV2LGlucHV0LnV2LGlucHV0LmZyb250RmFjaW5nKTtcbiAgICAgICAgICAgICAgLy8gcmVmOiBodHRwOi8vd3d3LnRoZXRlbnRocGxhbmV0LmRlL2FyY2hpdmVzLzExODBcbiAgICAgICAgICAgICAgLy8gZ2V0IGVkZ2UgdmVjdG9ycyBvZiB0aGUgcGl4ZWwgdHJpYW5nbGVcbiAgICAgICAgICAgICAgbGV0IGRwMTp2ZWMzPGYzMj4gPSAgdmVjMzxmMzI+KGRwZHgoaW5wdXQud29ybGRQb3MueCksIGRwZHgoaW5wdXQud29ybGRQb3MueSksIGRwZHgoaW5wdXQud29ybGRQb3MueikpO1xuICAgICAgICAgICAgICBsZXQgZHAyOnZlYzM8ZjMyPiA9ICB2ZWMzPGYzMj4oZHBkeShpbnB1dC53b3JsZFBvcy54KSwgZHBkeShpbnB1dC53b3JsZFBvcy55KSwgZHBkeShpbnB1dC53b3JsZFBvcy56KSk7XG4gICAgICAgICAgICAgIGxldCBkdXYxOnZlYzI8ZjMyPiA9IGRwZHgodXYpO1xuICAgICAgICAgICAgICBsZXQgZHV2Mjp2ZWMyPGYzMj4gPSBkcGR5KHV2KTtcblxuICAgICAgICAgICAgICAvLyBzb2x2ZSB0aGUgbGluZWFyIHN5c3RlbVxuICAgICAgICAgICAgICBsZXQgZHAycGVycDp2ZWMzPGYzMj4gPSBjcm9zcyhkcDIsIG5vcm1hbCk7XG4gICAgICAgICAgICAgIGxldCBkcDFwZXJwOnZlYzM8ZjMyPiA9IGNyb3NzKG5vcm1hbCwgZHAxKTtcbiAgICAgICAgICAgICAgbGV0IHRhbmdlbnQ6dmVjMzxmMzI+ID0gZHAycGVycCAqIGR1djEueCArIGRwMXBlcnAgKiBkdXYyLng7XG4gICAgICAgICAgICAgIGxldCBiaW5vcm1hbDp2ZWMzPGYzMj4gPSBkcDJwZXJwICogZHV2MS55ICsgZHAxcGVycCAqIGR1djIueTtcbiAgICAgICAgICAgICAgLy8gY29uc3RydWN0IGEgc2NhbGUtaW52YXJpYW50IGZyYW1lIFxuICAgICAgICAgICAgICBsZXQgcmVzdWx0OmYzMj1tYXgoZG90KHRhbmdlbnQsIHRhbmdlbnQpLCBkb3QoYmlub3JtYWwsIGJpbm9ybWFsKSk7XG4gICAgICAgICAgICAgIGxldCBpbnZtYXg6ZjMyID0gMS4wL3NxcnQocmVzdWx0KTtcbiAgICAgICAgICAgICAgbGV0IHRibjptYXQzeDM8ZjMyPiA9IG1hdDN4MzxmMzI+KHRhbmdlbnQgKiBpbnZtYXgsIGJpbm9ybWFsICogaW52bWF4LCBub3JtYWwpO1xuICAgICAgICAjZW5kaWZcbiAgICAgICAgcmV0dXJuIHRibjtcbiAgICAgIH1cbiAgYDtcbn1cbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBicmRmKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTn1cclxuICAgICAgICAgICAgICAgIGZuIERfQ2hhcmxpZSggcm91Z2huZXNzOmYzMixkb3ROSDpmMzIgKS0+ZjMyIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYWxwaGE6ZjMyID0gcG93Miggcm91Z2huZXNzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGludkFscGhhOmYzMiA9IDEuMCAvIGFscGhhO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb3MyaDpmMzIgPSBkb3ROSCAqIGRvdE5IO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzaW4yaDpmMzIgPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCAyLjAgKyBpbnZBbHBoYSApICogcG93KCBzaW4yaCwgaW52QWxwaGEgKiAwLjUgKSAvICggMi4wICogUEkgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZuIFZfTmV1YmVsdCggZG90TlY6ZjMyLCBkb3ROTDpmMzIgKS0+ZjMyIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2F0dXJhdGUoIDEuMCAvICggNC4wICogKCBkb3ROTCArIGRvdE5WIC0gZG90TkwgKiBkb3ROViApICkgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZuIEJSREZfU2hlZW4obGlnaHREaXI6dmVjMzxmMzI+LCB2aWV3RGlyOnZlYzM8ZjMyPiwgbm9ybWFsOnZlYzM8ZjMyPixzaGVlbkNvbG9yOnZlYzM8ZjMyPixzaGVlblJvdWdobmVzczpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaGFsZkRpcjp2ZWMzPGYzMj4gPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkb3ROTDpmMzIgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZG90TlY6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZG90Tkg6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgRDpmMzIgPSBEX0NoYXJsaWUoIHNoZWVuUm91Z2huZXNzLCBkb3ROSCApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBWOmYzMiA9IFZfTmV1YmVsdCggZG90TlYsIGRvdE5MICk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgZm4gQlJERl9MYW1iZXJ0KGRpZmZ1c2VDb2xvcjp2ZWMzPGYzMj4pLT52ZWMzPGYzMj4ge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBkaWZmdXNlQ29sb3I7XHJcblxyXG4gICAgICAgIH0gLy8gdmFsaWRhdGVkXHJcblxyXG4gICAgICAgIGZuIEZfU2NobGljayggZjA6dmVjMzxmMzI+LCBkb3RWSDpmMzIgKS0+dmVjMzxmMzI+IHtcclxuXHJcbiAgICAgICAgICAgIC8vIE9yaWdpbmFsIGFwcHJveGltYXRpb24gYnkgQ2hyaXN0b3BoZSBTY2hsaWNrICc5NFxyXG4gICAgICAgICAgICAvLyBmbG9hdCBmcmVzbmVsID0gcG93KCAxLjAgLSBkb3RWSCwgNS4wICk7XHJcblxyXG4gICAgICAgICAgICAvLyBPcHRpbWl6ZWQgdmFyaWFudCAocHJlc2VudGVkIGJ5IEVwaWMgYXQgU0lHR1JBUEggJzEzKVxyXG4gICAgICAgICAgICAvLyBodHRwczovL2NkbjIudW5yZWFsZW5naW5lLmNvbS9SZXNvdXJjZXMvZmlsZXMvMjAxM1NpZ2dyYXBoUHJlc2VudGF0aW9uc05vdGVzLTI2OTE1NzM4LnBkZlxyXG4gICAgICAgICAgIGxldCBmcmVzbmVsID0gZXhwMiggKCAtIDUuNTU0NzMgKiBkb3RWSCAtIDYuOTgzMTYgKSAqIGRvdFZIICk7XHJcbiAgICAgICAgICAgcmV0dXJuICggMS4wIC0gZjAgKSAqIGZyZXNuZWwgKyBmMDtcclxuXHJcbiAgICAgICAgfSAvLyB2YWxpZGF0ZWRcclxuXHJcbiAgICAgICAgZm4gU2NobGlja190b19GMChmOnZlYzM8ZjMyPiwgZjkwOmYzMiwgZG90Vkg6ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCB4OmYzMiA9IGNsYW1wKCAxLjAgLSBkb3RWSCwgMC4wLCAxLjAgKTtcclxuICAgICAgICAgICAgbGV0IHgyOmYzMiA9IHggKiB4O1xyXG4gICAgICAgICAgICBsZXQgeDU6ZjMyID0gY2xhbXAoIHggKiB4MiAqIHgyLCAwLjAsIDAuOTk5OSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuICggZiAtIHZlYzMoIGY5MCApICogeDUgKSAvICggMS4wIC0geDUgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYTpmMzIsIGRvdE5MOmYzMixkb3ROVjpmMzIgKS0+ZjMyIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBhMiA6ZjMyPSBwb3cyKCBhbHBoYSApO1xyXG5cclxuICAgICAgICAgICAgbGV0IGd2OmYzMiA9IGRvdE5MICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROViApICk7XHJcbiAgICAgICAgICAgIGxldCBnbDpmMzIgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIDAuNSAvIG1heCgoZ3YgKyBnbCksIDAuMDAwMDAwMDAxICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBmbiBEX0dHWCggYWxwaGE6ZjMyLCBkb3ROSDpmMzIgKS0+ZjMyIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBhMjpmMzIgPSBwb3cyKCBhbHBoYSApO1xyXG5cclxuICAgICAgICAgICAgbGV0IGRlbm9tOmYzMiA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7IC8vIGF2b2lkIGFscGhhID0gMCB3aXRoIGRvdE5IID0gMVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9tICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBmbiBCUkRGX0dHWCggbGlnaHREaXI6dmVjMzxmMzI+LCB2aWV3RGlyOnZlYzM8ZjMyPiwgbm9ybWFsOnZlYzM8ZjMyPiwgZjA6dmVjMzxmMzI+LCAgcm91Z2huZXNzOmYzMiApLT52ZWMzPGYzMj4ge1xyXG5cclxuICAgICAgICAgICAgbGV0IGFscGhhOmYzMiA9IHBvdzIoIHJvdWdobmVzcyApOyAvLyBVRTQncyByb3VnaG5lc3NcclxuXHJcbiAgICAgICAgICAgIGxldCBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBkb3ROTDpmMzIgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTtcclxuICAgICAgICAgICAgbGV0IGRvdE5WOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XHJcbiAgICAgICAgICAgIGxldCBkb3ROSDpmMzIgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xyXG4gICAgICAgICAgICBsZXQgZG90Vkg6ZjMyID0gc2F0dXJhdGUoIGRvdCggbGlnaHREaXIsIGhhbGZEaXIgKSApO1xyXG5cclxuICAgICAgICAgICAgbGV0IEYgPSBGX1NjaGxpY2soIGYwLCAgZG90VkggKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgRCA9IERfR0dYKCBhbHBoYSwgZG90TkggKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBGICogKCBWICogRCApO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gZGlyZWN0X1BoeXNpY2FsKCBkaXJlY3RMaWdodDpJbmNpZGVudExpZ2h0LCBnZW9tZXRyeTpHZW9tZXRyeSxtYXRlcmlhbDpQaHlzaWNhbE1hdGVyaWFsKS0+UmVmbGVjdGVkTGlnaHQge1xyXG4gICAgICAgICAgICB2YXIgcmVmbGVjdGVkTGlnaHQ6UmVmbGVjdGVkTGlnaHQ7XHJcbiAgICAgICAgICAgIGxldCBkb3ROTDpmMzIgPSBzYXR1cmF0ZShkb3QoIGdlb21ldHJ5Lm5vcm1hbCxnZW9tZXRyeS52aWV3RGlyKSk7XHJcbiAgICAgICAgICAgIGxldCBpcnJhZGlhbmNlOnZlYzM8ZjMyPiA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3IqMy4xNDE1OTI2O1xyXG4gICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciA9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xyXG4gICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XHJcbiAgICAgICAgICAgIHJldHVybiByZWZsZWN0ZWRMaWdodDtcclxuICAgICAgICB9XHJcbiAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaWJsKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICBmbiBnZXRMaWdodFByb2JlUmFkaWFuY2UoIHZpZXdEaXI6dmVjMzxmMzI+LG5vcm1hbDp2ZWMzPGYzMj4sIHJvdWdobmVzczpmMzIgKS0+dmVjMzxmMzI+e1xyXG4gICAgdmFyIHJlZmxlY3RWZWM6dmVjMzxmMzI+ID0gcmVmbGVjdCggLXZpZXdEaXIsIG5vcm1hbCApO1xyXG4gICAgcmVmbGVjdFZlYy54ID0gLXJlZmxlY3RWZWMueDsgLy8gVGV4dHVyZUN1YmUgaXMgbGVmdC1oYW5kLHNvIHggbmVlZCBpbnZlcnNlXHJcbiAgICBsZXQgbWlwQ291bnQ6ZjMyID0gMTAuMDsgLy8gcmVzb2x1dGlvbiBvZiAyNTZ4MjU2XHJcbiAgICBsZXQgbG9kOmYzMiA9IHJvdWdobmVzcyAqIG1pcENvdW50O1xyXG4gICAgbGV0IHNwZWN1bGFyTGlnaHQ6dmVjMzxmMzI+ID0gdGV4dHVyZVNhbXBsZUxldmVsKHNwZWN1bGFyRW52VGV4dHVyZSxzcGVjdWxhckVudlNhbXBsZXIsIHJlZmxlY3RWZWMsIGxvZCkucmdiO1xyXG4gICAgcmV0dXJuIHNwZWN1bGFyTGlnaHQ7XHJcbiAgfVxyXG4gIGZuIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlOmFycmF5PHZlYzM8ZjMyPiw5Piwgbm9ybWFsOnZlYzM8ZjMyPiktPnZlYzM8ZjMyPiB7XHJcbiAgICB2YXIgd29ybGROb3JtYWw6dmVjMzxmMzI+ID0gbm9ybWFsO1xyXG4gICAgd29ybGROb3JtYWwueCA9IC1ub3JtYWwueDtcclxuICAgIHZhciBpcnJhZGlhbmNlOnZlYzM8ZjMyPiA9IGxpZ2h0UHJvYmVbMF07XHJcbiAgICBpcnJhZGlhbmNlKz1saWdodFByb2JlWzFdICogKG5vcm1hbC55KTtcclxuICAgIGlycmFkaWFuY2UrPWxpZ2h0UHJvYmVbMl0gKiAobm9ybWFsLnopIDtcclxuICAgIGlycmFkaWFuY2UrPWxpZ2h0UHJvYmVbM10gKiAobm9ybWFsLngpIDtcclxuXHJcbiAgICBpcnJhZGlhbmNlKz1saWdodFByb2JlWzRdICogKG5vcm1hbC55ICogbm9ybWFsLngpIDtcclxuICAgIGlycmFkaWFuY2UrPWxpZ2h0UHJvYmVbNV0gKiAobm9ybWFsLnkgKiBub3JtYWwueikgO1xyXG4gICAgaXJyYWRpYW5jZSs9bGlnaHRQcm9iZVs2XSAqICgzLjAgKiBub3JtYWwueiAqIG5vcm1hbC56IC0gMS4wKTtcclxuICAgIGlycmFkaWFuY2UrPWxpZ2h0UHJvYmVbN10gKiAobm9ybWFsLnogKiBub3JtYWwueCkgO1xyXG4gICAgaXJyYWRpYW5jZSs9bGlnaHRQcm9iZVs4XSAqIChub3JtYWwueCAqIG5vcm1hbC54IC0gbm9ybWFsLnkgKiBub3JtYWwueSk7XHJcblxyXG4gICAgcmV0dXJuIG1heChpcnJhZGlhbmNlLCB2ZWMzPGYzMj4oMC4wLDAuMCwwLjApKTtcclxuICB9XHJcbiAgZm4gREZHQXBwcm94KCBzcGVjdWxhckNvbG9yOnZlYzM8ZjMyPiwgcm91Z2huZXNzOmYzMixkb3ROVjpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgIGNvbnN0IGMwOnZlYzQ8ZjMyPiA9IHZlYzQ8ZjMyPiggLSAxLCAtIDAuMDI3NSwgLSAwLjU3MiwgMC4wMjIgKTtcclxuICAgIGxldCBjMTp2ZWM0PGYzMj4gPSB2ZWM0PGYzMj4oIDEsIDAuMDQyNSwgMS4wNCwgLSAwLjA0ICk7XHJcbiAgICBsZXQgcjp2ZWM0PGYzMj4gPSByb3VnaG5lc3MgKiBjMCArIGMxO1xyXG4gICAgbGV0IGEwMDQ6ZjMyID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcclxuICAgIGxldCBmYWI6dmVjMjxmMzI+ID0gdmVjMjxmMzI+KCAtIDEuMDQsIDEuMDQgKSAqIGEwMDQgKyByLnp3O1xyXG4gICAgcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIGZhYi55O1xyXG4gIH1cclxuICAvL+mXtOaOpeWFieeFp1xyXG4gIGZuIGluZGlyZWN0RGlmZnVzZV9QaHlzaWNhbChnZW9tZXRyeTpHZW9tZXRyeSwgbWF0ZXJpYWw6UGh5c2ljYWxNYXRlcmlhbCApLT5SZWZsZWN0ZWRMaWdodCB7XHJcbiAgICAgIHZhciByZWZsZWN0ZWRMaWdodDpSZWZsZWN0ZWRMaWdodDtcclxuICAgICAgdmFyIGlycmFkaWFuY2U6dmVjMzxmMzI+ID0gbGlnaHRVbmlmb3Jtcy5hbWJpZW50Lnh5eipsaWdodFVuaWZvcm1zLmFtYmllbnQudztcclxuICAgICAgaXJyYWRpYW5jZSAqPSBQSTtcclxuICAgICAgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xyXG4gICAgICByZXR1cm4gcmVmbGVjdGVkTGlnaHQ7XHJcbiAgfVxyXG4gIC8v6Ze05o6l6auY5YWJXHJcbiAgZm4gaW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbChnZW9tZXRyeTpHZW9tZXRyeSwgbWF0ZXJpYWw6UGh5c2ljYWxNYXRlcmlhbCktPlJlZmxlY3RlZExpZ2h0IHtcclxuICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAvLyBJQkwgc3BlY3VsYXJcclxuICAgICAgbGV0IHJhZGlhbmNlOnZlYzM8ZjMyPiA9IGdldExpZ2h0UHJvYmVSYWRpYW5jZShnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyk7XHJcbiAgICAgIGxldCByYWRpYW5jZUF0dGVudWF0aW9uOmYzMiA9IDEuMDtcclxuICAgICAgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSByYWRpYW5jZUF0dGVudWF0aW9uICogcmFkaWFuY2UgKiBERkdBcHByb3gobWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwucm91Z2huZXNzLCBnZW9tZXRyeS5kb3ROViApO1xyXG4gICAgICByZXR1cm4gcmVmbGVjdGVkTGlnaHQ7XHJcbiAgICB9XHJcbiAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBickZ1bmN0aW9uKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuXHJcbiAgICAjaWYgJHtkZWZpbmVzLkRJVEhFUklOR31cclxuICAgICAgICBmbiBkaXRoZXJpbmcoY29sb3I6dmVjMzxmMzI+ICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCBncmlkX3Bvc2l0aW9uOmYzMiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApO1xyXG4gICAgICAgICAgICBsZXQgZGl0aGVyX3NoaWZ0X1JHQjp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7XHJcbiAgICAgICAgICAgIGRpdGhlcl9zaGlmdF9SR0IgPSBtaXgoIDIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIC0yLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCBncmlkX3Bvc2l0aW9uICk7XHJcbiAgICAgICAgICAgIHJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0V9XHJcbiAgICAgICAgZm4gQlJERl9HR1hfSXJpZGVzY2VuY2UoIGxpZ2h0RGlyOnZlYzM8ZjMyPiwgdmlld0Rpcjp2ZWMzPGYzMj4sbm9ybWFsOnZlYzM8ZjMyPiwgZjA6dmVjMzxmMzI+LCBmOTA6ZjMyLGlyaWRlc2NlbmNlOmYzMiwgaXJpZGVzY2VuY2VGcmVzbmVsOnZlYzM8ZjMyPixyb3VnaG5lc3M6ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCBhbHBoYTpmMzIgPSBwb3cyKCByb3VnaG5lc3MgKTtcclxuICAgICAgICAgICAgbGV0IGhhbGZEaXI6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcclxuICAgICAgICAgICAgbGV0IGRvdE5MOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xyXG4gICAgICAgICAgICBsZXQgZG90TlY6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcclxuICAgICAgICAgICAgbGV0IGRvdE5IOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7XHJcbiAgICAgICAgICAgIGxldCBkb3RWSDpmMzIgPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTtcclxuICAgICAgICAgICAgbGV0IEY6dmVjMzxmMzI+ID0gbWl4KCBGX1NjaGxpY2soIGYwLCBmOTAsIGRvdFZIICksIGlyaWRlc2NlbmNlRnJlc25lbCwgaXJpZGVzY2VuY2UgKTtcclxuICAgICAgICAgICAgbGV0IFY6ZjMyID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XHJcbiAgICAgICAgICAgIGxldCBEOmYzMiA9IERfR0dYKCBhbHBoYSwgZG90TkggKTtcclxuICAgICAgICAgICAgcmV0dXJuIEYgKiAoIFYgKiBEICk7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfU0hFRU59XHJcbiAgICAgICAgZm4gRF9DaGFybGllKCByb3VnaG5lc3M6ZjMyLGRvdE5IOmYzMiApLT5mMzIge1xyXG4gICAgICAgICAgICBsZXQgYWxwaGE6ZjMyID0gcG93Miggcm91Z2huZXNzICk7XHJcbiAgICAgICAgICAgIGxldCBpbnZBbHBoYTpmMzIgPSAxLjAgLyBhbHBoYTtcclxuICAgICAgICAgICAgbGV0IGNvczJoOmYzMiA9IGRvdE5IICogZG90Tkg7XHJcbiAgICAgICAgICAgIGxldCBzaW4yaDpmMzIgPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTtcclxuICAgICAgICAgICAgcmV0dXJuICggMi4wICsgaW52QWxwaGEgKSAqIHBvdyggc2luMmgsIGludkFscGhhICogMC41ICkgLyAoIDIuMCAqIFBJICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIFZfTmV1YmVsdCggZG90TlY6ZjMyLCBkb3ROTDpmMzIgKS0+ZjMyIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNhdHVyYXRlKCAxLjAgLyAoIDQuMCAqICggZG90TkwgKyBkb3ROViAtIGRvdE5MICogZG90TlYgKSApICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIEJSREZfU2hlZW4obGlnaHREaXI6dmVjMzxmMzI+LCB2aWV3RGlyOnZlYzM8ZjMyPiwgbm9ybWFsOnZlYzM8ZjMyPixzaGVlbkNvbG9yOnZlYzM8ZjMyPixzaGVlblJvdWdobmVzczpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgbGV0IGhhbGZEaXI6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcclxuICAgICAgICAgICAgbGV0IGRvdE5MOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xyXG4gICAgICAgICAgICBsZXQgZG90TlY6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcclxuICAgICAgICAgICAgbGV0IGRvdE5IOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7XHJcbiAgICAgICAgICAgIGxldCBEOmYzMiA9IERfQ2hhcmxpZSggc2hlZW5Sb3VnaG5lc3MsIGRvdE5IICk7XHJcbiAgICAgICAgICAgIGxldCBWOmYzMiA9IFZfTmV1YmVsdCggZG90TlYsIGRvdE5MICk7XHJcbiAgICAgICAgICAgIHJldHVybiBzaGVlbkNvbG9yICogKCBEICogViApO1xyXG4gICAgICAgIH1cclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAgICAgIGxldCBYWVpfVE9fUkVDNzA5OiBtYXQzeDM8ZjMyPiA9IG1hdDN4MzxmMzI+KFxyXG4gICAgICAgIDMuMjQwNDU0MiwgLTAuOTY5MjY2MCwgMC4wNTU2NDM0LCAtMS41MzcxMzg1LCAxLjg3NjAxMDgsIC0wLjIwNDAyNTksIC0wLjQ5ODUzMTQsIDAuMDQxNTU2MCwgMS4wNTcyMjUyXHJcbiAgICAgICAgKTtcclxuICAgICAgICBmbiBGcmVzbmVsMFRvSW9yKCBmcmVzbmVsMDp2ZWMzPGYzMj4gKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgbGV0IHNxcnRGMDp2ZWMzPGYzMj4gPSBzcXJ0KCBmcmVzbmVsMCApO1xyXG4gICAgICAgICAgICByZXR1cm4gKCB2ZWMzPGYzMj4oIDEuMCApICsgc3FydEYwICkgLyAoIHZlYzM8ZjMyPiggMS4wICkgLSBzcXJ0RjAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gSW9yVG9GcmVzbmVsMCh0cmFuc21pdHRlZElvcjp2ZWMzPGYzMj4saW5jaWRlbnRJb3I6ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgIHJldHVybiBwb3cyVmVjdG9yKCAoIHRyYW5zbWl0dGVkSW9yIC0gdmVjMzxmMzI+KCBpbmNpZGVudElvciApICkgLyAoIHRyYW5zbWl0dGVkSW9yICsgdmVjMzxmMzI+KCBpbmNpZGVudElvciApICkgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gSW9yVG9GcmVzbmVsMCh0cmFuc21pdHRlZElvcjpmMzIsIGluY2lkZW50SW9yOmYzMiApLT5mMzIge1xyXG4gICAgICAgICAgICByZXR1cm4gcG93MlZlY3RvciggKCB0cmFuc21pdHRlZElvciAtIGluY2lkZW50SW9yICkgLyAoIHRyYW5zbWl0dGVkSW9yICsgaW5jaWRlbnRJb3IgKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIGV2YWxTZW5zaXRpdml0eShPUEQ6ZjMyLHNoaWZ0OnZlYzM8ZjMyPiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgICAgICBsZXQgcGhhc2U6ZjMyID0gMi4wICogUEkgKiBPUEQgKiAxLjBlLTk7XHJcbiAgICAgICAgICAgIGxldCB2YWw6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KCA1LjQ4NTZlLTEzLCA0LjQyMDFlLTEzLCA1LjI0ODFlLTEzICk7XHJcbiAgICAgICAgICAgIGxldCBwb3M6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KCAxLjY4MTBlKzA2LCAxLjc5NTNlKzA2LCAyLjIwODRlKzA2ICk7XHJcbiAgICAgICAgICAgIGxldCB2YXJ0OnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggNC4zMjc4ZSswOSwgOS4zMDQ2ZSswOSwgNi42MTIxZSswOSApO1xyXG4gICAgICAgICAgICBsZXQgeHl6OnZlYzM8ZjMyPiA9IHZhbCAqIHNxcnQoIDIuMCAqIFBJICogdmFydCApICogY29zKCBwb3MgKiBwaGFzZSArIHNoaWZ0ICkgKiBleHAoIC0gcG93MiggcGhhc2UgKSAqIHZhcnQgKTtcclxuICAgICAgICAgICAgeHl6LnggKz0gOS43NDcwZS0xNCAqIHNxcnQoIDIuMCAqIFBJICogNC41MjgyZSswOSApICogY29zKCAyLjIzOTllKzA2ICogcGhhc2UgKyBzaGlmdFsgMCBdICkgKiBleHAoIC0gNC41MjgyZSswOSAqIHBvdzIoIHBoYXNlICkgKTtcclxuICAgICAgICAgICAgeHl6IC89IDEuMDY4NWUtNztcclxuICAgICAgICAgICAgbGV0IHJnYjp2ZWMzPGYzMj4gPSBYWVpfVE9fUkVDNzA5ICogeHl6O1xyXG4gICAgICAgICAgICByZXR1cm4gcmdiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmbiBldmFsSXJpZGVzY2VuY2Uob3V0c2lkZUlPUjpmMzIsIGV0YTI6ZjMyLGNvc1RoZXRhMTpmMzIsdGhpbkZpbG1UaGlja25lc3M6ZjMyLGJhc2VGMDp2ZWMzPGYzMj4gKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgdmFyIEk6dmVjMzxmMzI+O1xyXG4gICAgICAgICAgICBsZXQgaXJpZGVzY2VuY2VJT1I6ZjMyID0gbWl4KCBvdXRzaWRlSU9SLCBldGEyLCBzbW9vdGhzdGVwKCAwLjAsIDAuMDMsIHRoaW5GaWxtVGhpY2tuZXNzICkgKTtcclxuICAgICAgICAgICAgbGV0IHNpblRoZXRhMlNxOmYzMiA9IHBvdzIoIG91dHNpZGVJT1IgLyBpcmlkZXNjZW5jZUlPUiApICogKCAxLjAgLSBwb3cyKCBjb3NUaGV0YTEgKSApO1xyXG4gICAgICAgICAgICBsZXQgY29zVGhldGEyU3E6ZjMyID0gMS4wIC0gc2luVGhldGEyU3E7XHJcbiAgICAgICAgICAgIGlmICggY29zVGhldGEyU3EgPCAwLjAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmVjMzxmMzI+KCAxLjAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgY29zVGhldGEyOmYzMiA9IHNxcnQoIGNvc1RoZXRhMlNxICk7XHJcbiAgICAgICAgICAgIGxldCBSMDpmMzIgPSBJb3JUb0ZyZXNuZWwwKCBpcmlkZXNjZW5jZUlPUiwgb3V0c2lkZUlPUiApO1xyXG4gICAgICAgICAgICBsZXQgUjEyOmYzMiA9IEZfU2NobGljayggUjAsIDEuMCwgY29zVGhldGExICk7XHJcbiAgICAgICAgICAgIGxldCBSMjE6ZjMyID0gUjEyO1xyXG4gICAgICAgICAgICBsZXQgVDEyMTpmMzIgPSAxLjAgLSBSMTI7XHJcbiAgICAgICAgICAgIGxldCBwaGkxMjpmMzIgPSAwLjA7XHJcbiAgICAgICAgICAgIGlmICggaXJpZGVzY2VuY2VJT1IgPCBvdXRzaWRlSU9SICkgcGhpMTIgPSBQSTtcclxuICAgICAgICAgICAgbGV0IHBoaTIxOmYzMiA9IFBJIC0gcGhpMTI7XHJcbiAgICAgICAgICAgIGxldCBiYXNlSU9SOnZlYzM8ZjMyPiA9IEZyZXNuZWwwVG9Jb3IoIGNsYW1wKCBiYXNlRjAsIDAuMCwgMC45OTk5ICkgKTtcclxuICAgICAgICAgICAgbGV0IFIxOnZlYzM8ZjMyPiA9IElvclRvRnJlc25lbDAoIGJhc2VJT1IsIGlyaWRlc2NlbmNlSU9SICk7XHJcbiAgICAgICAgICAgIGxldCBSMjM6dmVjMzxmMzI+ID0gRl9TY2hsaWNrKCBSMSwgMS4wLCBjb3NUaGV0YTIgKTtcclxuICAgICAgICAgICAgbGV0IHBoaTIzOnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggMC4wICk7XHJcbiAgICAgICAgICAgIGlmICggYmFzZUlPUlsgMCBdIDwgaXJpZGVzY2VuY2VJT1IgKSBwaGkyM1sgMCBdID0gUEk7XHJcbiAgICAgICAgICAgIGlmICggYmFzZUlPUlsgMSBdIDwgaXJpZGVzY2VuY2VJT1IgKSBwaGkyM1sgMSBdID0gUEk7XHJcbiAgICAgICAgICAgIGlmICggYmFzZUlPUlsgMiBdIDwgaXJpZGVzY2VuY2VJT1IgKSBwaGkyM1sgMiBdID0gUEk7XHJcbiAgICAgICAgICAgIGxldCBPUEQ6ZjMyID0gMi4wICogaXJpZGVzY2VuY2VJT1IgKiB0aGluRmlsbVRoaWNrbmVzcyAqIGNvc1RoZXRhMjtcclxuICAgICAgICAgICAgbGV0IHBoaTp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIHBoaTIxICkgKyBwaGkyMztcclxuICAgICAgICAgICAgbGV0IFIxMjM6dmVjMzxmMzI+ID0gY2xhbXAoIFIxMiAqIFIyMywgMWUtNSwgMC45OTk5ICk7XHJcbiAgICAgICAgICAgIGxldCByMTIzOnZlYzM8ZjMyPiA9IHNxcnQoIFIxMjMgKTtcclxuICAgICAgICAgICAgbGV0IFJzOnZlYzM8ZjMyPiA9IHBvdzIoIFQxMjEgKSAqIFIyMyAvICggdmVjMzxmMzI+KCAxLjAgKSAtIFIxMjMgKTtcclxuICAgICAgICAgICAgbGV0IEMwOnZlYzM8ZjMyPiA9IFIxMiArIFJzO1xyXG4gICAgICAgICAgICBJID0gQzA7XHJcbiAgICAgICAgICAgIGxldCBDbTp2ZWMzPGYzMj4gPSBScyAtIFQxMjE7XHJcbiAgICAgICAgICAgIGZvciAoIGxldCBtIDogdTMyID0gMTttIDw9IDI7ICsrIG0gKSB7XHJcbiAgICAgICAgICAgICAgICBDbSAqPSByMTIzO1xyXG4gICAgICAgICAgICAgICAgU206dmVjMzxmMzI+ID0gMi4wICogZXZhbFNlbnNpdGl2aXR5KCBmMzIoIG0gKSAqIE9QRCwgZjMyKCBtICkgKiBwaGkgKTtcclxuICAgICAgICAgICAgICAgIEkgKz0gQ20gKiBTbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbWF4KCBJLCB2ZWMzPGYzMj4oIDAuMCApICk7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcbiAgICBjb25zdCBjbGVhcmNvYXRTcGVjdWxhcjp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIDAuMCApO1xyXG4gICAgY29uc3Qgc2hlZW5TcGVjdWxhcjp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIDAuMCApO1xyXG5cclxuICAgIGZuIElCTFNoZWVuQlJERiggbm9ybWFsOnZlYzM8ZjMyPiwgdmlld0Rpcjp2ZWMzPGYzMj4sIHJvdWdobmVzczpmMzIgKS0+ZjMyIHtcclxuICAgICAgICBsZXQgZG90TlY6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcclxuICAgICAgICBsZXQgcjI6ZjMyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xyXG4gICAgICAgIGxldCBhOmYzMiA9c2VsZWN0KC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NSwtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSxyb3VnaG5lc3MgPCAwLjI1KTtcclxuICAgICAgICAvL2xldCBhOmYzMiA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTtcclxuICAgICAgICBsZXQgYjpmMzI9c2VsZWN0KDEuOTcgKiByMiAtIDMuMjcgKiByb3VnaG5lc3MgKyAwLjcyLDQ0LjAgKiByMiAtIDIzLjcgKiByb3VnaG5lc3MgKyAzLjI2LCByb3VnaG5lc3MgPCAwLjI1KTtcclxuICAgICAgICAvL2xldCBiOmYzMiA9IHJvdWdobmVzcyA8IDAuMjUgPyA0NC4wICogcjIgLSAyMy43ICogcm91Z2huZXNzICsgMy4yNiA6IDEuOTcgKiByMiAtIDMuMjcgKiByb3VnaG5lc3MgKyAwLjcyO1xyXG4gICAgICAgIC8vbGV0IERHOmYzMiA9IGV4cCggYSAqIGRvdE5WICsgYiApICsgKCByb3VnaG5lc3MgPCAwLjI1ID8gMC4wIDogMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICkgKTtcclxuICAgICAgICBsZXQgREc6ZjMyID0gZXhwKCBhICogZG90TlYgKyBiICkgKyBzZWxlY3QoMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICksMC4wLHJvdWdobmVzcyA8IDAuMjUpO1xyXG4gICAgICAgIHJldHVybiBzYXR1cmF0ZSggREcgKiBSRUNJUFJPQ0FMX1BJICk7XHJcbiAgICB9XHJcbiAgICBmbiBERkdBcHByb3goIHNwZWN1bGFyQ29sb3I6dmVjMzxmMzI+LCByb3VnaG5lc3M6ZjMyLGRvdE5WOmYzMiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIGNvbnN0IGMwOnZlYzQ8ZjMyPiA9IHZlYzQ8ZjMyPiggLSAxLCAtIDAuMDI3NSwgLSAwLjU3MiwgMC4wMjIgKTtcclxuICAgICAgICBsZXQgYzE6dmVjNDxmMzI+ID0gdmVjNDxmMzI+KCAxLCAwLjA0MjUsIDEuMDQsIC0gMC4wNCApO1xyXG4gICAgICAgIGxldCByOnZlYzQ8ZjMyPiA9IHJvdWdobmVzcyAqIGMwICsgYzE7XHJcbiAgICAgICAgbGV0IGEwMDQ6ZjMyID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcclxuICAgICAgICBsZXQgZmFiOnZlYzI8ZjMyPiA9IHZlYzI8ZjMyPiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dztcclxuICAgICAgICByZXR1cm4gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgZmFiLnk7XHJcbiAgICB9XHJcbiAgICBmbiBFbnZpcm9ubWVudEJSREYoIG5vcm1hbDp2ZWMzPGYzMj4sdmlld0Rpcjp2ZWMzPGYzMj4sc3BlY3VsYXJDb2xvcjp2ZWMzPGYzMj4sIHNwZWN1bGFyRjkwOmYzMixyb3VnaG5lc3M6ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgbGV0IGZhYjp2ZWMyPGYzMj4gPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XHJcbiAgICAgICAgcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZuIGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlY6ZjMyLCBhbWJpZW50T2NjbHVzaW9uOmYzMiwgcm91Z2huZXNzOmYzMiApLT5mMzIge1xyXG4gICAgICAgIHJldHVybiBzYXR1cmF0ZSggcG93KCBkb3ROViArIGFtYmllbnRPY2NsdXNpb24sIGV4cDIoIC0gMTYuMCAqIHJvdWdobmVzcyAtIDEuMCApICkgLSAxLjAgKyBhbWJpZW50T2NjbHVzaW9uICk7XHJcbiAgICB9XHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9UUkFOU01JU1NJT059XHJcblxyXG4gICAgZm4gZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBuOnZlYzM8ZjMyPiwgdjp2ZWMzPGYzMj4sIHRoaWNrbmVzczpmMzIsIGlvcjpmMzIsIG1vZGVsTWF0cml4Om1hdDR4NDpmMzIpLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIHZhciByZWZyYWN0aW9uVmVjdG9yOnZlYzM8ZjMyPiA9IHJlZnJhY3QoIC0gdiwgbm9ybWFsaXplKCBuICksIDEuMCAvIGlvciApO1xyXG4gICAgICAgIHZhciBtb2RlbFNjYWxlOnZlYzM8ZjMyPjtcclxuICAgICAgICBtb2RlbFNjYWxlLnggPSBsZW5ndGgoIHZlYzM8ZjMyPiggbW9kZWxNYXRyaXhbMF0ueHl6ICkgKTtcclxuICAgICAgICBtb2RlbFNjYWxlLnkgPSBsZW5ndGgoIHZlYzM8ZjMyPiggbW9kZWxNYXRyaXhbMV0ueHl6ICkgKTtcclxuICAgICAgICBtb2RlbFNjYWxlLnogPSBsZW5ndGgoIHZlYzM8ZjMyPiggbW9kZWxNYXRyaXhbMl0ueHl6ICkgKTtcclxuICAgICAgICByZXR1cm4gbm9ybWFsaXplKCByZWZyYWN0aW9uVmVjdG9yICkgKiB0aGlja25lc3MgKiBtb2RlbFNjYWxlO1xyXG4gICAgfVxyXG4gICAgZm4gYXBwbHlJb3JUb1JvdWdobmVzcyhyb3VnaG5lc3M6ZjMyLCBpb3I6ZjMyICktPmYzMiB7XHJcbiAgICAgICAgcmV0dXJuIHJvdWdobmVzcyAqIGNsYW1wKCBpb3IgKiAyLjAgLSAyLjAsIDAuMCwgMS4wICk7XHJcbiAgICB9XHJcbiAgICBmbiBnZXRUcmFuc21pc3Npb25TYW1wbGUoIGZyYWdDb29yZDp2ZWMyPGYzMj4sIHJvdWdobmVzczpmMzIsaW9yOmYzMiApLT52ZWM0PGYzMj4ge1xyXG4gICAgICAgIGxldCBmcmFtZWJ1ZmZlckxvZDpmMzIgPSBsb2cyKCBtYXRlcmlhbFVuaWZvcm0udHJhbnNtaXNzaW9uU2FtcGxlclNpemUueCApICogYXBwbHlJb3JUb1JvdWdobmVzcyggcm91Z2huZXNzLCBpb3IgKTtcclxuICAgICAgICByZXR1cm4gdGV4dHVyZVNhbXBsZUxldmVsKHRyYW5zbWlzc2lvblNhbXBsZXJUZXh0dXJlLGJhc2VTYW1wbGVyLGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QpO1xyXG5cclxuICAgIH1cclxuICAgIGZuIGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIHJhZGlhbmNlOnZlYzM8dmVjMz4sIHRyYW5zbWlzc2lvbkRpc3RhbmNlOmYzMixhdHRlbnVhdGlvbkNvbG9yOnZlYzM8ZjMyPixhdHRlbnVhdGlvbkRpc3RhbmNlOmYzMiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIGlmICggaXNpbmYoIGF0dGVudWF0aW9uRGlzdGFuY2UgKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJhZGlhbmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGF0dGVudWF0aW9uQ29lZmZpY2llbnQ6dmVjMzxmMzI+ID0gLWxvZyggYXR0ZW51YXRpb25Db2xvciApIC8gYXR0ZW51YXRpb25EaXN0YW5jZTtcclxuICAgICAgICAgICAgbGV0IHRyYW5zbWl0dGFuY2U6dmVjMzxmMzI+ID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNtaXR0YW5jZSAqIHJhZGlhbmNlO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgfVxyXG4gICAgZm4gZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbiggbjp2ZWMzPGYzMj4sdjp2ZWMzPGYzMj4sIHJvdWdobmVzczpmMzIsIGRpZmZ1c2VDb2xvcjp2ZWMzPGYzMj4sc3BlY3VsYXJDb2xvcjp2ZWMzPGYzMj4sIHNwZWN1bGFyRjkwOmYzMixwb3NpdGlvbjp2ZWMzPGYzMj4sIG1vZGVsTWF0cml4Om1hdDR4NDxmMzI+LCB2aWV3TWF0cml4Om1hdDR4NDxmMzI+LHByb2pNYXRyaXg6bWF0NHg0PGYzMj4saW9yOmYzMiwgdGhpY2tuZXNzOmYzMixhdHRlbnVhdGlvbkNvbG9yOnZlYzM8ZjMyPixhdHRlbnVhdGlvbkRpc3RhbmNlOmYzMiApLT52ZWM0PGYzMj4ge1xyXG4gICAgICAgIGxldCB0cmFuc21pc3Npb25SYXk6dmVjMzxmMzI+ID0gZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBuLCB2LCB0aGlja25lc3MsIGlvciwgbW9kZWxNYXRyaXggKTtcclxuICAgICAgICBsZXQgcmVmcmFjdGVkUmF5RXhpdDp2ZWMzPGYzMj4gPSBwb3NpdGlvbiArIHRyYW5zbWlzc2lvblJheTtcclxuICAgICAgICBsZXQgbmRjUG9zOnZlYzQ8ZjMyPiA9IHByb2pNYXRyaXggKiB2aWV3TWF0cml4ICogdmVjNCggcmVmcmFjdGVkUmF5RXhpdCwgMS4wICk7XHJcbiAgICAgICAgbGV0IHJlZnJhY3Rpb25Db29yZHM6dmVjMjxmMzI+ID0gbmRjUG9zLnh5IC8gbmRjUG9zLnc7XHJcbiAgICAgICAgcmVmcmFjdGlvbkNvb3JkcyArPSAxLjA7XHJcbiAgICAgICAgcmVmcmFjdGlvbkNvb3JkcyAvPSAyLjA7XHJcbiAgICAgICAgbGV0IHRyYW5zbWl0dGVkTGlnaHQ6dmVjNDxmMzI+ID0gZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCByZWZyYWN0aW9uQ29vcmRzLCByb3VnaG5lc3MsIGlvciApO1xyXG4gICAgICAgIGxldCBhdHRlbnVhdGVkQ29sb3I6dmVjMzxmMzI+ID0gYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggdHJhbnNtaXR0ZWRMaWdodC5yZ2IsIGxlbmd0aCggdHJhbnNtaXNzaW9uUmF5ICksIGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgRjp2ZWMzPGYzMj4gPSBFbnZpcm9ubWVudEJSREYoIG4sIHYsIHNwZWN1bGFyQ29sb3IsIHNwZWN1bGFyRjkwLCByb3VnaG5lc3MgKTtcclxuICAgICAgICByZXR1cm4gdmVjNDxmMzI+KCAoIDEuMCAtIEYgKSAqIGF0dGVudWF0ZWRDb2xvciAqIGRpZmZ1c2VDb2xvciwgdHJhbnNtaXR0ZWRMaWdodC5hICk7XHJcbiAgICB9XHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9CVU1QVEVYVFVSRX1cclxuICAgICAgICBmbiBkSGR4eV9md2QoKS0+dmVjMjxmMzI+IHtcclxuICAgICAgICAgICAgbGV0IGRTVGR4OnZlYzI8ZjMyPiA9IGRwZHgoIHZVdiApO1xyXG4gICAgICAgICAgICBsZXQgZFNUZHk6dmVjMjxmMzI+ID0gZHBkeSggdlV2ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgSGxsOmYzMiA9IG1hdGVyaWFsVW5pZm9ybS5idW1wU2NhbGUgKiB0ZXh0dXJlU2FtcGxlKGJ1bXBUZXh0dXJlLCBiYXNlU2FtcGxlciwgdlV2KS54O1xyXG4gICAgICAgICAgICBsZXQgZEJ4OmYzMiA9IG1hdGVyaWFsVW5pZm9ybS5idW1wU2NhbGUgKiB0ZXh0dXJlU2FtcGxlKGJ1bXBUZXh0dXJlLCBiYXNlU2FtcGxlciwgdlV2ICsgZFNUZHgpLnggLSBIbGw7XHJcbiAgICAgICAgICAgIGxldCBkQnk6ZjMyID0gbWF0ZXJpYWxVbmlmb3JtLmJ1bXBTY2FsZSAqIHRleHR1cmVTYW1wbGUoYnVtcFRleHR1cmUsIGJhc2VTYW1wbGVyLCB2VXYgKyBkU1RkeSkueCAtIEhsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHZlYzI8ZjMyPiggZEJ4LCBkQnkgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gcGVydHVyYk5vcm1hbEFyYiggc3VyZl9wb3M6dmVjMzxmMzI+LCBzdXJmX25vcm06dmVjMzxmMzI+LCBkSGR4eTp2ZWMyPGYzMj4sIGZhY2VEaXJlY3Rpb246ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCB2U2lnbWFYOnZlYzM8ZjMyPiA9IGRwZHgoIHN1cmZfcG9zLnh5eiApO1xyXG4gICAgICAgICAgICBsZXQgdlNpZ21hWTp2ZWMzPGYzMj4gPSBkcGR5KCBzdXJmX3Bvcy54eXogKTtcclxuICAgICAgICAgICAgbGV0IHZOOnZlYzM8ZjMyPiA9IHN1cmZfbm9ybTtcclxuICAgICAgICAgICAgbGV0IFIxOnZlYzM8ZjMyPiA9IGNyb3NzKCB2U2lnbWFZLCB2TiApO1xyXG4gICAgICAgICAgICBsZXQgUjI6dmVjMzxmMzI+ID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7XHJcbiAgICAgICAgICAgIGxldCBmRGV0OmYzMiA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247XHJcbiAgICAgICAgICAgIGxldCB2R3JhZDp2ZWMzPGYzMj4gPSBzaWduKCBmRGV0ICkgKiAoIGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApO1xyXG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKCBhYnMoIGZEZXQgKSAqIHN1cmZfbm9ybSAtIHZHcmFkICk7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgLy8hIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxURVhUVVJFICkgfHwgZGVmaW5lZCAoIFVTRV9DTEVBUkNPQVRfTk9STUFMVEVYVFVSRSApIClcclxuICAgICNpZiAkeyghZGVmaW5lcy5VU0VfVEFOR0VOVCAmJiBkZWZpbmVzLlRBTkdFTlRTUEFDRV9OT1JNQUxURVhUVVJFKSB8fCBkZWZpbmVzLlVTRV9DTEVBUkNPQVRfTk9STUFMVEVYVFVSRX1cclxuICAgIGZuIHBlcnR1cmJOb3JtYWwyQXJiKCBleWVfcG9zOnZlYzM8ZjMyPiwgc3VyZl9ub3JtOnZlYzM8ZjMyPiwgdGV4dHVyZU46dmVjMzxmMzI+LCBmYWNlRGlyZWN0aW9uOmYzMiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIGxldCBxMDp2ZWMzPGYzMj4gPSBkcGR4KCBleWVfcG9zLnh5eiApO1xyXG4gICAgICAgIGxldCBxMTp2ZWMzPGYzMj4gPSBkcGR5KCBleWVfcG9zLnh5eiApO1xyXG4gICAgICAgIGxldCBzdDA6dmVjMjxmMzI+ID0gZHBkeCggdlV2LnN0ICk7XHJcbiAgICAgICAgbGV0IHN0MTp2ZWMyPGYzMj4gPSBkcGR5KCB2VXYuc3QgKTtcclxuICAgICAgICBsZXQgTjp2ZWMzPGYzMj4gPSBzdXJmX25vcm07XHJcbiAgICAgICAgbGV0IHExcGVycDp2ZWMzPGYzMj4gPSBjcm9zcyggcTEsIE4gKTtcclxuICAgICAgICBsZXQgcTBwZXJwOnZlYzM8ZjMyPiA9IGNyb3NzKCBOLCBxMCApO1xyXG4gICAgICAgIGxldCBUOnZlYzM8ZjMyPiA9IHExcGVycCAqIHN0MC54ICsgcTBwZXJwICogc3QxLng7XHJcbiAgICAgICAgbGV0IEI6dmVjMzxmMzI+ID0gcTFwZXJwICogc3QwLnkgKyBxMHBlcnAgKiBzdDEueTtcclxuICAgICAgICBsZXQgZGV0OmYzMiA9IG1heCggZG90KCBULCBUICksIGRvdCggQiwgQiApICk7XHJcbiAgICAgICAgbGV0IHNjYWxlOmYzMiA9ICggZGV0ID09IDAuMCApID8gMC4wIDogZmFjZURpcmVjdGlvbiAqIGludmVyc2VzcXJ0KCBkZXQgKTtcclxuICAgICAgICByZXR1cm4gbm9ybWFsaXplKCBUICogKCB0ZXh0dXJlTi54ICogc2NhbGUgKSArIEIgKiAoIHRleHR1cmVOLnkgKiBzY2FsZSApICsgTiAqIHRleHR1cmVOLnogKTtcclxuICAgIH1cclxuICAgICNlbmRpZlxyXG4gICAgc3RydWN0IE11bHRpQW5kU2luZ2xlU2NhdHRlcntcclxuICAgICAgICBtdWx0aVNjYXR0ZXI6dmVjMzxmMzI+LFxyXG4gICAgICAgIHNpbmdsZVNjYXR0ZXI6dmVjMzxmMzI+XHJcbiAgICB9XHJcbiAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAvLy8vLy8vL2lub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXJcclxuICAgICAgIGZuIGNvbXB1dGVNdWx0aXNjYXR0ZXJpbmdJcmlkZXNjZW5jZSggbm9ybWFsOnZlYzM8ZjMyPiwgdmlld0Rpcjp2ZWMzPGYzMj4sIHNwZWN1bGFyQ29sb3I6dmVjMzxmMzI+LCBzcGVjdWxhckY5MDpmMzIsIGlyaWRlc2NlbmNlOmYzMixpcmlkZXNjZW5jZUYwOnZlYzM8ZjMyPiwgcm91Z2huZXNzOmYzMiApLT5NdWx0aUFuZFNpbmdsZVNjYXR0ZXIge1xyXG4gICAjZWxzZVxyXG4gICAvLy8vLy8vL2lub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXJcclxuICAgICAgIGZuIGNvbXB1dGVNdWx0aXNjYXR0ZXJpbmcoIG5vcm1hbDp2ZWMzPGYzMj4sdmlld0Rpcjp2ZWMzPGYzMj4sIHNwZWN1bGFyQ29sb3I6dmVjMzxmMzI+LCBzcGVjdWxhckY5MDpmMzIsIHJvdWdobmVzczpmMzIpLT5NdWx0aUFuZFNpbmdsZVNjYXR0ZXIge1xyXG4gICAjZW5kaWZcclxuICAgbGV0IGZhYjp2ZWMyPGYzMj4gPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XHJcblxyXG4gICB2YXIgbXVsdGlBbmRTaW5nbGVTY2F0dGVyOk11bHRpQW5kU2luZ2xlU2NhdHRlcjtcclxuXHJcbiAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAgICAgbGV0IEZyOnZlYzM8ZjMyPiA9IG1peCggc3BlY3VsYXJDb2xvciwgaXJpZGVzY2VuY2VGMCwgaXJpZGVzY2VuY2UgKTtcclxuICAgI2Vsc2VcclxuICAgICAgIGxldCBGcjp2ZWMzPGYzMj4gPSBzcGVjdWxhckNvbG9yO1xyXG4gICAjZW5kaWZcclxuICAgICAgIGxldCBGc3NFc3M6dmVjMzxmMzI+ID0gRnIgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7XHJcbiAgICAgICBsZXQgRXNzOmYzMiA9IGZhYi54ICsgZmFiLnk7XHJcbiAgICAgICBsZXQgRW1zOmYzMiA9IDEuMCAtIEVzcztcclxuICAgICAgIGxldCBGYXZnOnZlYzM8ZjMyPiA9IEZyICsgKCAxLjAgLSBGciApICogMC4wNDc2MTk7XHJcbiAgICAgICBsZXQgRm1zOnZlYzM8ZjMyPiA9IEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTtcclxuICAgIC8vICAgIHNpbmdsZVNjYXR0ZXIgKz0gRnNzRXNzO1xyXG4gICAgLy8gICAgbXVsdGlTY2F0dGVyICs9IEZtcyAqIEVtcztcclxuICAgICAgIG11bHRpQW5kU2luZ2xlU2NhdHRlci5tdWx0aVNjYXR0ZXI9Rm1zICogRW1zO1xyXG4gICAgICAgbXVsdGlBbmRTaW5nbGVTY2F0dGVyLnNpbmdsZVNjYXR0ZXI9RnNzRXNzO1xyXG4gICAgICAgcmV0dXJuIG11bHRpQW5kU2luZ2xlU2NhdHRlcjtcclxuICAgfVxyXG4gICAvL+ebtOaOpeWFieeFp1xyXG4gICBmbiBSRV9EaXJlY3RfUGh5c2ljYWwoIGRpcmVjdExpZ2h0OkluY2lkZW50TGlnaHQsIGdlb21ldHJ5Okdlb21ldHJpY0NvbnRleHQsICBtYXRlcmlhbDpQaHlzaWNhbE1hdGVyaWFsKS0+UmVmbGVjdGVkTGlnaHQge1xyXG4gICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAgbGV0IGRvdE5MOmYzMiA9IHNhdHVyYXRlKGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24pKTtcclxuICAgICAgIGxldCBpcnJhZGlhbmNlOnZlYzM8ZjMyPiA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XHJcbiAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVR9XHJcbiAgICAgICAgICAgbGV0IGRvdE5MY2M6ZjMyID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xyXG4gICAgICAgICAgIGxldCBjY0lycmFkaWFuY2U6dmVjMzxmMzI+ID0gZG90TkxjYyAqIGRpcmVjdExpZ2h0LmNvbG9yO1xyXG4gICAgICAgICAgIGNsZWFyY29hdFNwZWN1bGFyICs9IGNjSXJyYWRpYW5jZSAqIEJSREZfR0dYKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7XHJcbiAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTn1cclxuICAgICAgICAgICBzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX1NoZWVuKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc2hlZW5Db2xvciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTtcclxuICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyID0gaXJyYWRpYW5jZSAqIEJSREZfR0dYX0lyaWRlc2NlbmNlKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsIG1hdGVyaWFsLmlyaWRlc2NlbmNlLCBtYXRlcmlhbC5pcmlkZXNjZW5jZUZyZXNuZWwsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xyXG4gICAgICAgI2Vsc2VcclxuICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciA9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcclxuICAgICAgICNlbmRpZlxyXG4gICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xyXG4gICAgICAgcmV0dXJuIHJlZmxlY3RlZExpZ2h0O1xyXG4gICB9XHJcbiAgIC8v6Ze05o6l5YWJ54WnXHJcbiAgIGZuIFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbCggaXJyYWRpYW5jZTp2ZWMzPGYzMj4sIGdlb21ldHJ5Okdlb21ldHJpY0NvbnRleHQsIG1hdGVyaWFsOlBoeXNpY2FsTWF0ZXJpYWwgKS0+UmVmbGVjdGVkTGlnaHQge1xyXG4gICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlID0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XHJcbiAgICAgICByZXR1cm4gcmVmbGVjdGVkTGlnaHQ7XHJcbiAgIH1cclxuICAgLy/pl7TmjqXpq5jlhYlcclxuICAgZm4gUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbCggcmFkaWFuY2U6dmVjMzxmMzI+LCBpcnJhZGlhbmNlOnZlYzM8ZjMyPiwgY2xlYXJjb2F0UmFkaWFuY2U6dmVjMzxmMzI+LCBnZW9tZXRyeTpHZW9tZXRyaWNDb250ZXh0LCBtYXRlcmlhbDpQaHlzaWNhbE1hdGVyaWFsKS0+UmVmbGVjdGVkTGlnaHQge1xyXG4gICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUfVxyXG4gICAgICAgICAgIGNsZWFyY29hdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogRW52aXJvbm1lbnRCUkRGKCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xyXG4gICAgICAgI2VuZGlmXHJcbiAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTn1cclxuICAgICAgICAgICBzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBtYXRlcmlhbC5zaGVlbkNvbG9yICogSUJMU2hlZW5CUkRGKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7XHJcbiAgICAgICAjZW5kaWZcclxuICAgICAgIHZhciBzaW5nbGVTY2F0dGVyaW5nOnZlYzM8ZjMyPjtcclxuICAgICAgIHZhciBtdWx0aVNjYXR0ZXJpbmc6dmVjMzxmMzI+O1xyXG4gICAgICAgbGV0IGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTp2ZWMzPGYzMj4gPSBpcnJhZGlhbmNlICogUkVDSVBST0NBTF9QSTtcclxuICAgICAgIHZhciB0ZW1wTXVsdGlBbmRTaW5nbGVTY2F0dGVyOk11bHRpQW5kU2luZ2xlU2NhdHRlcjtcclxuICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAgICAgICAgICAgdGVtcE11bHRpQW5kU2luZ2xlU2NhdHRlcj1jb21wdXRlTXVsdGlzY2F0dGVyaW5nSXJpZGVzY2VuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsIG1hdGVyaWFsLmlyaWRlc2NlbmNlLCBtYXRlcmlhbC5pcmlkZXNjZW5jZUZyZXNuZWwsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xyXG4gICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgdGVtcE11bHRpQW5kU2luZ2xlU2NhdHRlcj0gY29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzICk7XHJcbiAgICAgICAjZW5kaWZcclxuICAgICAgIHNpbmdsZVNjYXR0ZXJpbmc9dGVtcE11bHRpQW5kU2luZ2xlU2NhdHRlci5zaW5nbGVTY2F0dGVyOyBcclxuICAgICAgIG11bHRpU2NhdHRlcmluZz10ZW1wTXVsdGlBbmRTaW5nbGVTY2F0dGVyLm11bHRpU2NhdHRlcjtcclxuICAgICAgIGxldCB0b3RhbFNjYXR0ZXJpbmc6dmVjMzxmMzI+ID0gc2luZ2xlU2NhdHRlcmluZyArIG11bHRpU2NhdHRlcmluZztcclxuICAgICAgIGxldCBkaWZmdXNlOnZlYzM8ZjMyPiA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gbWF4KCBtYXgoIHRvdGFsU2NhdHRlcmluZy5yLCB0b3RhbFNjYXR0ZXJpbmcuZyApLCB0b3RhbFNjYXR0ZXJpbmcuYiApICk7XHJcbiAgICAgICByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyID0gcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nO1xyXG4gICAgICAgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciA9IG11bHRpU2NhdHRlcmluZyAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTtcclxuICAgICAgIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSA9IGRpZmZ1c2UgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XHJcbiAgICAgICByZXR1cm4gcmVmbGVjdGVkTGlnaHQ7XHJcbiAgIH1cclxuICAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBiclN0cnVjdChkZWZpbmVzKSB7XHJcbiAgcmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXHJcbiAgICAgICAgc3RydWN0IE1hdGVyaWFsVW5pZm9ybXtcclxuXHJcbiAgICAgICAgICAgIG1vZGVsTWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgIFxyXG4gICAgICAgICAgICBkaWZmdXNlOnZlYzM8ZjMyPixcclxuICAgIFxyXG4gICAgICAgICAgICBvcGFjaXR5OmYzMixcclxuICAgIFxyXG4gICAgICAgICAgICBub3JtYWxNYXRyaXg6IG1hdDN4MzxmMzI+LFxyXG4gICAgXHJcbiAgICAgICAgICAgIGVtaXNzaXZlOnZlYzM8ZjMyPixcclxuICAgIFxyXG4gICAgICAgICAgICByb3VnaG5lc3M6ZjMyLFxyXG4gICAgXHJcbiAgICAgICAgICAgIG1ldGFsbmVzczpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5UT05FX01BUFBJTkd9XHJcbiAgICAgICAgICAgICAgICB0b25lTWFwcGluZ0V4cG9zdXJlOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuU1BFQ1VMQVJ9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICBzcGVjdWxhckNvbG9yOnZlYzM8ZjMyPixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgIHNwZWN1bGFySW50ZW5zaXR5OmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTn1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgc2hlZW5Db2xvcjp2ZWMzPGYzMj4sXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHNoZWVuUm91Z2huZXNzOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UUkFOU01JU1NJT059XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGF0dGVudWF0aW9uQ29sb3I6dmVjMzxmMzI+LFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICB0cmFuc21pc3Npb246ZjMyLFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTp2ZWMyPGYzMj4sXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHRoaWNrbmVzczpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGF0dGVudWF0aW9uRGlzdGFuY2U6ZjMyLFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0tJTk5JTkd9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGJpbmRNYXRyaXg6bWF0NHg0PGYzMj4sXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGJpbmRNYXRyaXhJbnZlcnNlOm1hdDR4NDxmMzI+LFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBib25lVGV4dHVyZVNpemU6dTMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX05PUk1BTFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICAgbm9ybWFsU2NhbGU6dmVjMjxmMzI+LFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLklPUn1cclxuICAgICAgICAgICAgICAgIGlvcjpmMzIsXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUX05PUk1BTFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJjb2F0Tm9ybWFsU2NhbGU6dmVjMjxmMzI+LFxyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICBjbGVhcmNvYXQ6ZjMyLFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgY2xlYXJjb2F0Um91Z2huZXNzOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICBcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0V9XHJcbiAgICAgICAgICAgICAgICBpcmlkZXNjZW5jZTpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGlyaWRlc2NlbmNlSU9SOmYzMixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VUaGlja25lc3NNaW5pbXVtOmYzMixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VUaGlja25lc3NNYXhpbXVtOmYzMixcclxuICAgIFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0FPVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICBhb1RleHR1cmVJbnRlbnNpdHk6ZjMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0xJR0hUVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICBsaWdodFRleHR1cmVJbnRlbnNpdHk6ZjMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9FTlZURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgZW52VGV4dHVyZUludGVuc2l0eTpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGZsaXBFbnZUZXh0dXJlOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9CVU1QVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIGJ1bXBTY2FsZTpmMzI7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfRElTUExBQ0VNRU5UVEVYVFVSRX1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgZGlzcGxhY2VtZW50U2NhbGU6ZjMyLFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBkaXNwbGFjZW1lbnRCaWFzOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9NT1JQSFRBUkdFVFN9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuTU9SUEhUQVJHRVRTX1RFWFRVUkV9IFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU6dmVjMjx1MzI+LFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgTU9SUEhUQVJHRVRTX0NPVU5UOnUzMixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIG1vcnBoVGFyZ2V0SW5mbHVlbmNlczphcnJheTxmMzI+LFxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICB9XHJcblxyXG4gICBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGJyVGV4dHVyZShkZWZpbmVzKSB7XHJcbiAgcmV0dXJuIHdnc2xQYXJzZURlZmluZXNgICAgICAgICBcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQlVNUFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmJ1bXBUZXh0dXJlQmluZGluZ30pIHZhciBidW1wVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVFJBTlNNSVNTSU9OfVxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVFJBTlNNSVNTSU9OVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnRyYW5zbWlzc2lvblRleHR1cmVCaW5kaW5nfSkgdmFyIHRyYW5zbWlzc2lvblRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEhJQ0tORVNTVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnRoaWNrbmVzc1RleHR1cmVCaW5kaW5nfSkgdmFyIHRoaWNrbmVzc1RleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy50cmFuc21pc3Npb25TYW1wbGVyVGV4dHVyZUJpbmRpbmd9KSB2YXIgdHJhbnNtaXNzaW9uU2FtcGxlclRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0VOVlRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmVudlRleHR1cmVCaW5kaW5nfSkgdmFyIGVudlRleHR1cmU6IHRleHR1cmVfY3ViZTxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTk9STUFMVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMubm9ybWFsVGV4dHVyZUJpbmRpbmd9KSB2YXIgbm9ybWFsVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmNsZWFyY29hdFRleHR1cmVCaW5kaW5nfSkgdmFyIGNsZWFyY29hdFRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVRfUk9VR0hORVNTVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuY2xlYXJjb2F0UmNsZWFyY29hdFJvdWdobmVzc1RleHR1cmVCaW5kaW5nfSkgdmFyIGNsZWFyY29hdFJvdWdobmVzc1RleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVRfTk9STUFMVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuY2xlYXJjb2F0Tm9ybWFsVGV4dHVyZUJpbmRpbmd9KSB2YXIgY2xlYXJjb2F0Tm9ybWFsVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuaXJpZGVzY2VuY2VUZXh0dXJlQmluZGluZ30pIHZhciBpcmlkZXNjZW5jZVRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JUklERVNDRU5DRV9USElDS05FU1NURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5pcmlkZXNjZW5jZVRoaWNrbmVzc1RleHR1cmVCaW5kaW5nfSkgdmFyIGlyaWRlc2NlbmNlVGhpY2tuZXNzVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1JPVUdITkVTU1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnJvdWdobmVzc1RleHR1cmVCaW5kaW5nfSkgdmFyIHJvdWdobmVzc1RleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9NRVRBTE5FU1NURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5tZXRhbG5lc3NUZXh0dXJlQmluZGluZ30pIHZhciBtZXRhbG5lc3NUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5TUEVDVUxBUn1cclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NQRUNVTEFSSU5URU5TSVRZVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnNwZWN1bGFySW50ZW5zaXR5VGV4dHVyZUJpbmRpbmd9KSB2YXIgc3BlY3VsYXJJbnRlbnNpdHlUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TUEVDVUxBUkNPTE9SVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnNwZWN1bGFyQ29sb3JUZXh0dXJlQmluZGluZ30pIHZhciBzcGVjdWxhckNvbG9yVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0hFRU59XHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTkNPTE9SVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnNoZWVuQ29sb3JUZXh0dXJlQmluZGluZ30pIHZhciBzaGVlbkNvbG9yVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTlJPVUdITkVTU1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5zaGVlblJvdWdobmVzc1RleHR1cmVCaW5kaW5nfSkgdmFyIHNoZWVuUm91Z2huZXNzVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYmFzZVNhbXBsZXJCaW5kaW5nfSkgdmFyIGJhc2VTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5iYXNlVGV4dHVyZUJpbmRpbmd9KSB2YXIgYmFzZVRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9BTFBIQVRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmFscGhhVGV4dHVyZUJpbmRpbmd9KSB2YXIgYWxwaGFUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQU9URVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5hb1RleHR1cmVCaW5kaW5nfSkgdmFyIGFvVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9MSUdIVFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmxpZ2h0VGV4dHVyZUJpbmRpbmd9KSB2YXIgbGlnaHRUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfRU1JU1NJVkVURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5lbWlzc2l2ZVRleHR1cmVCaW5kaW5nfSkgdmFyIGVtaXNzaXZlVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGJyVXRpbHMoZGVmaW5lcykge1xyXG4gIHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAgY29uc3QgUEk6ZjMyPSAzLjE0MTU5MjY1MzU4OTc5MztcclxuICAgIGNvbnN0IFBJMjpmMzI9IDYuMjgzMTg1MzA3MTc5NTg2O1xyXG4gICAgY29uc3QgUElfSEFMRjpmMzI9IDEuNTcwNzk2MzI2Nzk0ODk2NjtcclxuICAgIGNvbnN0IFJFQ0lQUk9DQUxfUEk6ZjMyPSAwLjMxODMwOTg4NjE4Mzc5MDc7XHJcbiAgICBjb25zdCBSRUNJUFJPQ0FMX1BJMjpmMzI9IDAuMTU5MTU0OTQzMDkxODk1MzU7XHJcbiAgICBjb25zdCBFUFNJTE9OOmYzMj0gMWUtNjtcclxuXHJcbiAgICBmbiBwb3cyKHg6ZjMyICktPmYzMiB7XHJcbiAgICAgICAgcmV0dXJuIHgqeDtcclxuICAgIH1cclxuICAgIGZuIHBvdzJWZWN0b3IoeDp2ZWMzPGYzMj4gKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICByZXR1cm4geCp4O1xyXG4gICAgfVxyXG4gICAgZm4gcG93MyggeDpmMzIgKS0+ZjMyIHtcclxuICAgICAgICByZXR1cm4geCp4Kng7XHJcbiAgICB9XHJcbiAgICBmbiBwb3c0KCB4OmYzMiApLT5mMzIge1xyXG4gICAgICAgIGxldCB4MjpmMzIgPSB4Kng7XHJcbiAgICAgICAgcmV0dXJuIHgyKngyO1xyXG4gICAgfVxyXG4gICAgZm4gbWF4Myggdjp2ZWMzPGYzMj4gKS0+ZjMyIHtcclxuICAgICAgICByZXR1cm4gbWF4KCBtYXgoIHYueCwgdi55ICksIHYueiApO1xyXG4gICAgfVxyXG4gICAgZm4gYXZlcmFnZSh2OnZlYzM8ZjMyPiApLT5mMzIge1xyXG4gICAgICAgIHJldHVybiBkb3QoIHYsIHZlYzM8ZjMyPiggMC4zMzMzMzMzICkgKTtcclxuICAgIH1cclxuICAgIGZuIHJhbmQoIHV2OnZlYzI8ZjMyPiApLT5mMzIge1xyXG4gICAgICAgIGxldCBhOmYzMiA9IDEyLjk4OTg7XHJcbiAgICAgICAgbGV0IGI6ZjMyID0gNzguMjMzO1xyXG4gICAgICAgIGxldCBjOmYzMiA9IDQzNzU4LjU0NTM7XHJcbiAgICAgICAgbGV0IGR0OmYzMiA9IGRvdCggdXYueHksIHZlYzI8ZjMyPiggYSwgYiApICk7XHJcbiAgICAgICAgbGV0IHNuOmYzMiA9IGR0ICUgUEk7XHJcbiAgICAgICAgcmV0dXJuIGZyYWN0KCBzaW4oIHNuICkgKiBjICk7XHJcbiAgICB9XHJcbiAgICBmbiB0cmFuc2Zvcm1EaXJlY3Rpb24oIGRpcjp2ZWMzPGYzMj4sIG1hdHJpeDptYXQ0eDQ8ZjMyPiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNDxmMzI+KCBkaXIsIDAuMCApICkueHl6ICk7XHJcbiAgICB9XHJcblxyXG4gICAgZm4gdHJhbnNwb3NlTWF0MyggbTptYXQzeDM8ZjMyPiApLT5tYXQzeDM8ZjMyPiB7XHJcbiAgICAgICAgdmFyIHRtcDptYXQzeDM8ZjMyPjtcclxuICAgICAgICB0bXBbIDAgXSA9IHZlYzM8ZjMyPiggbVsgMCBdLngsIG1bIDEgXS54LCBtWyAyIF0ueCApO1xyXG4gICAgICAgIHRtcFsgMSBdID0gdmVjMzxmMzI+KCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7XHJcbiAgICAgICAgdG1wWyAyIF0gPSB2ZWMzPGYzMj4oIG1bIDAgXS56LCBtWyAxIF0ueiwgbVsgMiBdLnogKTtcclxuICAgICAgICByZXR1cm4gdG1wO1xyXG4gICAgfVxyXG4gICAgZm4gbHVtaW5hbmNlKCByZ2I6dmVjMzxmMzI+ICktPmYzMiB7XHJcbiAgICAgICAgbGV0IHdlaWdodHM6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KDAuMjEyNjcyOSwgMC43MTUxNTIyLCAwLjA3MjE3NTAgKTtcclxuICAgICAgICByZXR1cm4gZG90KCB3ZWlnaHRzLCByZ2IgKTtcclxuICAgIH1cclxuICAgIGZuIExpbmVhclRvbmVNYXBwaW5nKCBjb2xvcjp2ZWMzPGYzMj4sdG9uZU1hcHBpbmdFeHBvc3VyZTpmMzIgICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRvbmVNYXBwaW5nRXhwb3N1cmUgKiBjb2xvcjtcclxuICAgIH1cclxuXHJcbiAgICBmbiBSZWluaGFyZFRvbmVNYXBwaW5nKCBjb2xvcjp2ZWMzPGYzMj4sdG9uZU1hcHBpbmdFeHBvc3VyZTpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICB2YXIgdGVtcENvbG9yOnZlYzM8ZjMyPjtcclxuICAgICAgICB0ZW1wQ29sb3I9Y29sb3I7XHJcbiAgICAgICAgdGVtcENvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XHJcbiAgICAgICAgcmV0dXJuIHNhdHVyYXRlKCB0ZW1wQ29sb3IgLyAoIHZlYzM8ZjMyPiggMS4wICkgKyB0ZW1wQ29sb3IgKSApO1xyXG4gICAgfVxyXG4gICAgZm4gQ3VzdG9tVG9uZU1hcHBpbmcoIGNvbG9yOnZlYzM8ZjMyPiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgIH1cclxuICAgIGZuIHRvbmVNYXBwaW5nKCBjb2xvcjp2ZWMzPGYzMj4sdG9uZU1hcHBpbmdFeHBvc3VyZTpmMzIgICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgcmV0dXJuIFJlaW5oYXJkVG9uZU1hcHBpbmcoIGNvbG9yLHRvbmVNYXBwaW5nRXhwb3N1cmUgKTtcclxuICAgIH1cclxuXHJcbiAgICBmbiBMaW5lYXJUb0xpbmVhciggdmFsdWU6dmVjNDxmMzI+ICktPnZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgZm4gbGVzc1RoYW5FcXVhbChhOnZlYzM8ZjMyPixiOnZlYzM8ZjMyPiktPnZlYzM8ZjMyPntcclxuICAgICAgIGxldCB4VmFsdWU6ZjMyPXNlbGVjdChiLngsYS54LGEueDw9Yi54KTtcclxuICAgICAgIGxldCB5VmFsdWU6ZjMyPXNlbGVjdChiLnksYS55LGEueTw9Yi55KTtcclxuICAgICAgIGxldCB6VmFsdWU6ZjMyPXNlbGVjdChiLnosYS56LGEuejw9Yi56KTtcclxuICAgICAgIHJldHVybiB2ZWMzPGYzMj4oeFZhbHVlLHlWYWx1ZSx6VmFsdWUpOyAgICBcclxuICAgIH1cclxuICAgIGZuIExpbmVhclRvc1JHQiggdmFsdWU6dmVjNDxmMzI+ICktPnZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQ8ZjMyPiggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMzxmMzI+KCAwLjQxNjY2ICkgKSAqIDEuMDU1IC0gdmVjMzxmMzI+KCAwLjA1NSApLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMzxmMzI+KCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzM8ZjMyPiggMC4wMDMxMzA4ICkgKSApICksIHZhbHVlLmEgKTtcclxuICAgIH1cclxuICAgIGZuIGxpbmVhclRvT3V0cHV0VGV4ZWwodmFsdWU6dmVjNDxmMzI+ICktPnZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgcmV0dXJuIExpbmVhclRvc1JHQiggdmFsdWUgKTtcclxuICAgIH1cclxuICAgIGA7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmxpbm5fcGhvbmcoZGVmaW5lcykge1xyXG5cdHJldHVybiBgXHJcbiAgICAgICBmbiBnZXRQb2ludExpZ2h0SW5mbyhwb2ludExpZ2h0OlBvaW50TGlnaHQsd29ybGRQb3M6dmVjMzxmMzI+LHNoaW5pbmVzczpmMzIsTjp2ZWMzPGYzMj4sVjp2ZWMzPGYzMj4pLT52ZWMzPGYzMj57XHJcbiAgICAgICAgdmFyIGNvbG9yPXZlYzM8ZjMyPigwLjAsMC4wLDAuMCk7XHJcbiAgICAgICAgdmFyIGRpcmVjdGlvbjp2ZWMzPGYzMj4gPSB3b3JsZFBvcyAtIHBvaW50TGlnaHQucG9zaXRpb247XHJcbiAgICAgICAgbGV0IGRpc3Q6ZjMyID0gbGVuZ3RoKCBkaXJlY3Rpb24gKTtcclxuICAgICAgICBkaXJlY3Rpb24gPSBub3JtYWxpemUoZGlyZWN0aW9uKTtcclxuICAgICAgICBsZXQgZGVjYXkgPSBjbGFtcCgxLjAgLSBwb3coZGlzdCAvIHBvaW50TGlnaHQuZGlzdGFuY2UsIDQuMCksIDAuMCwgMS4wKTtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAgbWF4KCBkb3QoIE4sIC1kaXJlY3Rpb24gKSwgMC4wICkgKiBkZWNheTtcclxuICAgICAgICBjb2xvciArPSBwb2ludExpZ2h0LmNvbG9yICogZDtcclxuXHJcbiAgICAgICAgbGV0IGhhbGZEaXI6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBWIC0gZGlyZWN0aW9uICk7XHJcbiAgICAgICAgbGV0IHM6ZjMyID0gcG93KCBjbGFtcCggZG90KCBOLCBoYWxmRGlyICksIDAuMCwgMS4wICksIHNoaW5pbmVzcyApICAqIGRlY2F5O1xyXG4gICAgICAgIGNvbG9yICs9IHBvaW50TGlnaHQuY29sb3IgKiBzO1xyXG4gICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgIH1cclxuICAgICAgIGZuIGdldFNwb3RMaWdodEluZm8oc3BvdExpZ2h0OlNwb3RMaWdodCx3b3JsZFBvczp2ZWMzPGYzMj4sc2hpbmluZXNzOmYzMixOOnZlYzM8ZjMyPixWOnZlYzM8ZjMyPiktPnZlYzM8ZjMyPntcclxuICAgICAgICB2YXIgY29sb3I9dmVjMzxmMzI+KDAuMCwwLjAsMC4wKTtcclxuICAgICAgICAgICAgdmFyIGRpcmVjdGlvbjp2ZWMzPGYzMj4gPSBzcG90TGlnaHQucG9zaXRpb24gLSB3b3JsZFBvcztcclxuICAgICAgICAgICAgbGV0IGxpZ2h0RGlzdGFuY2U6ZjMyID0gbGVuZ3RoKGRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZShkaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICBsZXQgYW5nbGVDb3M6ZjMyID0gZG90KCBkaXJlY3Rpb24sIC1zcG90TGlnaHQuZGlyZWN0aW9uICk7XHJcbiAgICAgICAgICAgIGxldCBkZWNheTpmMzIgPSBjbGFtcCgxLjAgLSBwb3cobGlnaHREaXN0YW5jZS9zcG90TGlnaHQuZGlzdGFuY2UsIDQuMCksIDAuMCwgMS4wKTtcclxuICAgICAgICAgICAgbGV0IHNwb3RFZmZlY3Q6ZjMyID0gc21vb3Roc3RlcCggc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBzcG90TGlnaHQuY29uZUNvcywgYW5nbGVDb3MgKTtcclxuICAgICAgICAgICAgbGV0IGRlY2F5VG90YWw6ZjMyID0gZGVjYXkgKiBzcG90RWZmZWN0O1xyXG4gICAgICAgICAgICBsZXQgZDpmMzIgPSBtYXgoIGRvdCggTiwgZGlyZWN0aW9uICksIDAuMCApICAqIGRlY2F5VG90YWw7XHJcbiAgICAgICAgICAgIGNvbG9yICs9IHNwb3RMaWdodC5jb2xvciAqIGQ7XHJcbiAgICAgICAgICAgIGxldCBoYWxmRGlyOnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggViArIGRpcmVjdGlvbiApO1xyXG4gICAgICAgICAgICBsZXQgczpmMzIgPSBwb3coIGNsYW1wKCBkb3QoIE4sIGhhbGZEaXIgKSwgMC4wLCAxLjAgKSwgc2hpbmluZXNzICkgKiBkZWNheVRvdGFsO1xyXG4gICAgICAgICAgICBjb2xvciArPSBzcG90TGlnaHQuY29sb3IgKiBzO1xyXG4gICAgICAgICAgICByZXR1cm4gY29sb3I7XHJcbiAgICAgICB9XHJcbiAgICBzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7XHJcbiAgICAgICAgZGlyZWN0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgY29sb3I6IHZlYzM8ZjMyPixcclxuICAgIH07XHJcbiAgICAgIGZuIGdldERpcmVjdExpZ2h0SW5mbyhkaXJlY3Rpb25hbExpZ2h0OkRpcmVjdGlvbmFsTGlnaHQsc2hpbmluZXNzOmYzMixOOnZlYzM8ZjMyPixWOnZlYzM8ZjMyPiktPnZlYzM8ZjMyPntcclxuICAgICAgICB2YXIgY29sb3I9dmVjMzxmMzI+KDAuMCwwLjAsMC4wKTtcclxuICAgICAgICBsZXQgZDpmMzIgPSBtYXgoZG90KE4sIC1kaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbiksIDAuMCk7XHJcbiAgICAgICAgY29sb3IgKz0gZGlyZWN0aW9uYWxMaWdodC5jb2xvciAqIGQ7XHJcblxyXG4gICAgICAgIGxldCBoYWxmRGlyOnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggViAtIGRpcmVjdGlvbmFsTGlnaHQuZGlyZWN0aW9uICk7XHJcbiAgICAgICAgbGV0IHM6ZjMyID0gcG93KCBjbGFtcCggZG90KCBOLCBoYWxmRGlyICksIDAuMCwgMS4wICksIHNoaW5pbmVzcyApO1xyXG4gICAgICAgIGNvbG9yICs9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3IgKiBzO1xyXG4gICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgIH1cclxuICAgIGA7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGhvbmdGdW5jdGlvbihkZWZpbmVzKSB7XHJcbiAgcmV0dXJuIGBcclxuICAgIGZuIEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKS0+ZjMyIHtcclxuXHJcbiAgICAgICAgLy8gZ2VvbWV0cnkgdGVybSBpcyAobiBkb3QgbCkobiBkb3QgdikgLyA0KG4gZG90IGwpKG4gZG90IHYpXHJcbiAgICAgICAgcmV0dXJuIDAuMjU7XHJcblxyXG4gICAgfVxyXG4gICAgZm4gRF9CbGlublBob25nKCBzaGluaW5lc3M6ZjMyLCBkb3ROSDpmMzIgKS0+ZjMyIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KGRvdE5ILCBzaGluaW5lc3MpO1xyXG5cclxuICAgIH1cclxuICAgIGZuIEJSREZfQmxpbm5QaG9uZyggbGlnaHREaXI6dmVjMzxmMzI+LCB2aWV3RGlyOnZlYzM8ZjMyPiwgbm9ybWFsOnZlYzM8ZjMyPiwgc3BlY3VsYXJDb2xvcjp2ZWMzPGYzMj4sIHNoaW5pbmVzczpmMzIgKS0+dmVjMzxmMzI+IHtcclxuXHJcbiAgICAgICAgbGV0ICBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcclxuXHJcbiAgICAgICAgbGV0ICBkb3ROSDpmMzIgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xyXG4gICAgICAgIGxldCBkb3RWSDpmMzIgPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTtcclxuXHJcbiAgICAgICAgbGV0IEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIDEuMCwgZG90VkggKTtcclxuXHJcbiAgICAgICAgbGV0IEc6ZjMyID0gR19CbGlublBob25nX0ltcGxpY2l0KCApO1xyXG5cclxuICAgICAgICBsZXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApO1xyXG5cclxuICAgICAgICByZXR1cm4gRiAqICggRyAqIEQgKTtcclxuXHJcbiAgICB9IFxyXG4gICAgZm4gUkVfRGlyZWN0X0JsaW5uUGhvbmcoICBkaXJlY3RMaWdodDpJbmNpZGVudExpZ2h0LGdlb21ldHJ5Okdlb21ldHJpY0NvbnRleHQsIG1hdGVyaWFsOkJsaW5uUGhvbmdNYXRlcmlhbCApLT5SZWZsZWN0ZWRMaWdodHtcclxuICAgICAgICB2YXIgcmVmbGVjdGVkTGlnaHQ6UmVmbGVjdGVkTGlnaHQ7IFxyXG4gICAgICAgIGxldCBkb3ROTDpmMzIgPSBzYXR1cmF0ZShkb3QoZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24pKTtcclxuICAgICAgICBsZXQgaXJyYWRpYW5jZTp2ZWMzPGYzMj4gPSBkb3ROTCpkaXJlY3RMaWdodC5jb2xvcjtcclxuXHJcbiAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZT0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XHJcblxyXG4gICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyPSBpcnJhZGlhbmNlICogQlJERl9CbGlublBob25nKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKSAqIG1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIHJlZmxlY3RlZExpZ2h0O1xyXG4gICAgfVxyXG4gICAgZm4gUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGlycmFkaWFuY2U6dmVjMzxmMzI+LCBnZW9tZXRyeTpHZW9tZXRyaWNDb250ZXh0LCBtYXRlcmlhbDpCbGlublBob25nTWF0ZXJpYWwpLT5SZWZsZWN0ZWRMaWdodCB7XHJcbiAgICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0OyBcclxuICAgICAgICByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XHJcbiAgICAgICAgcmV0dXJuIHJlZmxlY3RlZExpZ2h0O1xyXG4gICAgfVxyXG4gICAgYDtcclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaG9uZ1V0aWxzKGRlZmluZXMpIHtcclxuICByZXR1cm4gYFxyXG4gICBzdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHtcclxuICAgICAgICBkaWZmdXNlQ29sb3I6dmVjMzxmMzI+LFxyXG4gICAgICAgIHNwZWN1bGFyQ29sb3I6dmVjMzxmMzI+LFxyXG4gICAgICAgIHNwZWN1bGFyU2hpbmluZXNzOmYzMixcclxuICAgICAgICBzcGVjdWxhclN0cmVuZ3RoOmYzMixcclxuICAgIH07XHJcbiAgICBjb25zdCBSRUNJUFJPQ0FMX1BJOmYzMj0gMC4zMTgzMDk4ODYxODM3OTA3O1xyXG4gICBmbiBwb3cyKCB4OmYzMiApLT5mMzIgeyByZXR1cm4geCp4OyB9XHJcbiAgIGZuIHBvdzMoIHg6ZjMyICktPmYzMiB7IHJldHVybiB4KngqeDsgfVxyXG4gICBmbiBwb3c0KHg6ZjMyICktPmYzMiB7IGxldCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9XHJcbiAgIGZuIG1heDMoIHY6dmVjMzxmMzI+ICktPmYzMiB7IHJldHVybiBtYXgoIG1heCggdi54LCB2LnkgKSwgdi56ICk7IH1cclxuICAgZm4gYXZlcmFnZSh2OnZlYzM8ZjMyPiApLT5mMzIgeyBcclxuICAgICAgIGxldCByZXN1bHQ9dmVjMzxmMzI+KCAwLjMzMzMzMzMsICAwLjMzMzMzMzMsIDAuMzMzMzMzMyk7XHJcbiAgICAgICByZXR1cm4gZG90KCB2LHJlc3VsdCApOyBcclxuICAgfVxyXG4gICBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2tpbk1hdHJpeChkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgI2lmICR7ZGVmaW5lcy5IQVNfU0tJTn0gXG4gICAgICAgIHN0cnVjdCBKb2ludHNVbmlmb3Jte1xuICAgICAgICAgICAgIG1hdHJpeHM6YXJyYXk8bWF0NHg0Zj4sXG4gICAgICAgIH1cbiAgICAgICAgc3RydWN0IEludmVyc2VCaW5kTWF0cmljZXNVbmlmb3Jte1xuICAgICAgICAgICAgbWF0cml4czphcnJheTxtYXQ0eDRmPixcbiAgICAgICAgfVxuICAgICAgICBAYmluZGluZygke2RlZmluZXMuc2tpbkpvaW50c0J1ZmZlckJpbmRpbmd9KSBAZ3JvdXAoMCkgdmFyPHN0b3JhZ2UsIHJlYWQ+IGpvaW50c1VuaWZvcm0gOiBKb2ludHNVbmlmb3JtO1xuICAgICAgICBAYmluZGluZygke2RlZmluZXMuaW52c0J1ZmZlckJpbmRpbmd9KSBAZ3JvdXAoMCkgdmFyPHN0b3JhZ2UsIHJlYWQ+IGludmVyc2VCaW5kTWF0cmljZXNVbmlmb3JtIDogSW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm07XG4gICAgICAgIGZuIGdldFNraW5NYXRyaXgoam9pbnRzOiB2ZWM0Ziwgd2VpZ2h0czogdmVjNGYpIC0+IG1hdDR4NDxmMzI+IHtcbiAgICAgICAgICAgIGxldCBqb2ludDAgPSBqb2ludHNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy54KV0gKiBpbnZlcnNlQmluZE1hdHJpY2VzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMueCldO1xuICAgICAgICAgICAgbGV0IGpvaW50MSA9IGpvaW50c1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLnkpXSAqIGludmVyc2VCaW5kTWF0cmljZXNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy55KV07XG4gICAgICAgICAgICBsZXQgam9pbnQyID0gam9pbnRzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMueildICogaW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLnopXTtcbiAgICAgICAgICAgIGxldCBqb2ludDMgPSBqb2ludHNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy53KV0gKiBpbnZlcnNlQmluZE1hdHJpY2VzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMudyldO1xuICAgICAgICBcbiAgICAgICAgICAgIGxldCBza2luTWF0cml4ID0gam9pbnQwICogd2VpZ2h0cy54ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2ludDEgKiB3ZWlnaHRzLnkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaW50MiAqIHdlaWdodHMueiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbnQzICogd2VpZ2h0cy53O1xuICAgICAgICAgICAgcmV0dXJuIHNraW5NYXRyaXg7XG4gICAgICAgIH1cbiAgICAgICAgI2VuZGlmXG4gICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNraW5WZXJ0SGVhZGVyKGRlZmluZXMpIHtcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXG4gICAjaWYgJHtkZWZpbmVzLkhBU19TS0lOfSBcbiAgICAgICAgc3RydWN0IEpvaW50c1VuaWZvcm17XG4gICAgICAgICAgICAgbWF0cml4czphcnJheTxtYXQ0eDRmPixcbiAgICAgICAgfVxuICAgICAgICBzdHJ1Y3QgSW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm17XG4gICAgICAgICAgICBtYXRyaXhzOmFycmF5PG1hdDR4NGY+LFxuICAgICAgICB9XG4gICAgICAgIEBiaW5kaW5nKCR7ZGVmaW5lcy5za2luSm9pbnRzQnVmZmVyQmluZGluZ30pIEBncm91cCgwKSB2YXI8c3RvcmFnZSwgcmVhZD4gam9pbnRzVW5pZm9ybSA6IEpvaW50c1VuaWZvcm07XG4gICAgICAgIEBiaW5kaW5nKCR7ZGVmaW5lcy5pbnZzQnVmZmVyQmluZGluZ30pIEBncm91cCgwKSB2YXI8c3RvcmFnZSwgcmVhZD4gaW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm0gOiBJbnZlcnNlQmluZE1hdHJpY2VzVW5pZm9ybTtcbiAgICAgICAgZm4gZ2V0U2tpbk1hdHJpeChqb2ludHM6IHZlYzRmLCB3ZWlnaHRzOiB2ZWM0ZikgLT4gbWF0NHg0PGYzMj4ge1xuICAgICAgICAgICAgbGV0IGpvaW50MCA9IGpvaW50c1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLngpXSAqIGludmVyc2VCaW5kTWF0cmljZXNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy54KV07XG4gICAgICAgICAgICBsZXQgam9pbnQxID0gam9pbnRzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMueSldICogaW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLnkpXTtcbiAgICAgICAgICAgIGxldCBqb2ludDIgPSBqb2ludHNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy56KV0gKiBpbnZlcnNlQmluZE1hdHJpY2VzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMueildO1xuICAgICAgICAgICAgbGV0IGpvaW50MyA9IGpvaW50c1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLncpXSAqIGludmVyc2VCaW5kTWF0cmljZXNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy53KV07XG4gICAgICAgIFxuICAgICAgICAgICAgbGV0IHNraW5NYXRyaXggPSBqb2ludDAgKiB3ZWlnaHRzLnggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaW50MSAqIHdlaWdodHMueSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbnQyICogd2VpZ2h0cy56ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2ludDMgKiB3ZWlnaHRzLnc7XG4gICAgICAgICAgICByZXR1cm4gc2tpbk1hdHJpeDtcbiAgICAgICAgfVxuICAgICAgICAjZW5kaWZcbiAgIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gc2tpblZlcnRNYWluKGRlZmluZXMpIHtcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXG4gICAgICAgICNpZiAke2RlZmluZXMuSEFTX1NLSU59XG4gICAgICAgICAgICBtb2RlbE1hdHJpeCA9Z2V0U2tpbk1hdHJpeChpbnB1dC5qb2ludDAsaW5wdXQud2VpZ2h0MCk7XG4gICAgICAgICAgICB2Tm9ybWFsVmlldyA9IG5vcm1hbGl6ZSgobWF0ZXJpYWxVbmlmb3JtLm5vcm1hbE1hdHJpeCAqIG1vZGVsTWF0cml4ICogdmVjNDxmMzI+KGlucHV0Lm5vcm1hbCwgMC4wKSkueHl6KTtcbiAgICAgICAgI2VuZGlmXG4gIGA7XG59XG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIFBick1hdGVyaWFsU3RydWN0KGRlZmluZXMpIHtcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXG4gICAgc3RydWN0IE1hdGVyaWFsVW5pZm9ybSB7XG4gICAgICAgICAgbW9kZWxNYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgICAgIGNvbG9yOiB2ZWMzPGYzMj4sXG4gICAgICAgICAgb3BhY2l0eTpmMzIsXG4gICAgICAgICAgbm9ybWFsTWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgICAgICAgICBlbWlzc2l2ZTp2ZWMzPGYzMj4sXG4gICAgICAgICAgbWV0YWxsaWM6ZjMyLFxuICAgICAgICAgIHJvdWdobmVzczpmMzIsXG4gICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTk9STUFMVEVYVFVSRX1cbiAgICAgICAgICAgICAgbm9ybWFsVGV4dHVyZVNjYWxlOnZlYzI8ZjMyPixcbiAgICAgICAgICAjZW5kaWZcbiAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9BT1RFWFRVUkV9XG4gICAgICAgICAgICAgIG9jY2x1c2lvblN0cmVuZ3RoOmYzMixcbiAgICAgICAgICAjZW5kaWZcbiAgICAgIH1cbiAgIGA7XG59XG4iLCJpbXBvcnQgeyBGcmFnSW5wdXQgfSBmcm9tIFwiLi9hdHRyaWJ1dGUvRnJhZ0lucHV0XCI7XG5pbXBvcnQgeyBWZXJ0ZXhJbnB1dCB9IGZyb20gXCIuL2F0dHJpYnV0ZS9WZXJ0ZXhJbnB1dFwiO1xuaW1wb3J0IHsgVmVydGV4T3V0cHV0IH0gZnJvbSBcIi4vYXR0cmlidXRlL1ZlcnRleE91dHB1dFwiO1xuaW1wb3J0IHsgU3lzdGVtVW5pZm9ybSB9IGZyb20gXCIuL2NvbW1vbi9TeXN0ZW1Vbmlmb3JtXCI7XG5pbXBvcnQgeyBUZXh0dXJlQW5kU2FtcGxlckRlZmluZSB9IGZyb20gXCIuL2NvbW1vbi9UZXh0dXJlQW5kU2FtcGxlckRlZmluZVwiO1xuaW1wb3J0IGVudmlyb25tZW50IGZyb20gXCIuL2Vudmlyb25tZW50L2Vudmlyb25tZW50XCI7XG5pbXBvcnQgeyBpbnN0YW5jZVZlcnRIZWFkZXIsIGluc3RhbmNlVmVydE1haW4gfSBmcm9tIFwiLi9pbnN0YW5jZS9JbnN0YW5jZVwiO1xuaW1wb3J0IGxpZ2h0IGZyb20gXCIuL2xpZ2h0L2xpZ2h0XCI7XG5pbXBvcnQgbGlnaHRDb21tb24gZnJvbSBcIi4vbGlnaHQvbGlnaHRDb21tb25cIjtcbmltcG9ydCB7IGdldE5vcm1hbEJ5Tm9ybWFsVGV4dHVyZSwgZ2V0VEJOLCBnZXROb3JtYWwgfSBmcm9tIFwiLi9ub3JtYWwvZ2V0Tm9ybWFsQmFja1VwXCI7XG5pbXBvcnQgYnJkZiBmcm9tIFwiLi9wYnIvYnJkZlwiO1xuaW1wb3J0IGlibCBmcm9tIFwiLi9wYnIvaWJsXCI7XG5pbXBvcnQgcGJyRnVuY3Rpb24gZnJvbSBcIi4vcGJyL3BickZ1bmN0aW9uXCI7XG5pbXBvcnQgcGJyU3RydWN0IGZyb20gXCIuL3Bici9wYnJTdHJ1Y3RcIjtcbmltcG9ydCBwYnJUZXh0dXJlIGZyb20gXCIuL3Bici9wYnJUZXh0dXJlXCI7XG5pbXBvcnQgcGJyVXRpbHMgZnJvbSBcIi4vcGJyL3BiclV0aWxzXCI7XG5pbXBvcnQgYmxpbm5fcGhvbmcgZnJvbSBcIi4vcGhvbmcvYmxpbm5fcGhvbmdcIjtcbmltcG9ydCBwaG9uZ0Z1bmN0aW9uIGZyb20gXCIuL3Bob25nL3Bob25nRnVuY3Rpb25cIjtcbmltcG9ydCBwaG9uZ1V0aWxzIGZyb20gXCIuL3Bob25nL3Bob25nVXRpbHNcIjtcbi8vIGltcG9ydCBnZXROb3JtYWwgZnJvbSBcIi4vbm9ybWFsL2dldE5vcm1hbFwiO1xuaW1wb3J0IHsgc2tpblZlcnRIZWFkZXIsIHNraW5WZXJ0TWFpbiB9IGZyb20gXCIuL3NraW4vU2tpblZlcnRcIjtcbmltcG9ydCB7IFBick1hdGVyaWFsU3RydWN0IH0gZnJvbSBcIi4vc3RydWN0L1Bick1hdGVyaWFsU3RydWN0XCI7XG5jb25zdCBTaGFkZXJDaHVuayA9IHtcblx0bGlnaHQ6IGxpZ2h0LFxuXHRicmRmOiBicmRmLFxuXHRwaG9uZ0Z1bmN0aW9uOiBwaG9uZ0Z1bmN0aW9uLFxuXHRwaG9uZ1V0aWxzOiBwaG9uZ1V0aWxzLFxuXHRsaWdodENvbW1vbjogbGlnaHRDb21tb24sXG5cdHBiclN0cnVjdDogcGJyU3RydWN0LFxuXHRwYnJGdW5jdGlvbjogcGJyRnVuY3Rpb24sXG5cdHBiclRleHR1cmU6IHBiclRleHR1cmUsXG5cdHBiclV0aWxzOiBwYnJVdGlscyxcblx0ZW52aXJvbm1lbnQ6IGVudmlyb25tZW50LFxuXHRibGlubl9waG9uZzogYmxpbm5fcGhvbmcsXG5cdGdldE5vcm1hbDogZ2V0Tm9ybWFsLFxuXHRnZXRUQk46IGdldFRCTixcblx0Z2V0Tm9ybWFsQnlOb3JtYWxUZXh0dXJlOiBnZXROb3JtYWxCeU5vcm1hbFRleHR1cmUsXG5cdGlibDogaWJsLFxuXHRza2luVmVydE1haW4sXG5cdHNraW5WZXJ0SGVhZGVyLFxuXHRGcmFnSW5wdXQsXG5cdFZlcnRleElucHV0LFxuXHRWZXJ0ZXhPdXRwdXQsXG5cdFBick1hdGVyaWFsU3RydWN0LFxuXHRTeXN0ZW1Vbmlmb3JtLFxuXHRpbnN0YW5jZVZlcnRNYWluLFxuXHRpbnN0YW5jZVZlcnRIZWFkZXIsXG5cdFRleHR1cmVBbmRTYW1wbGVyRGVmaW5lXG59O1xuZXhwb3J0IGRlZmF1bHQgU2hhZGVyQ2h1bms7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaGFkb3dNYXBEZWJ1Z2dlckZyYWcoZGVmaW5lcykge1xyXG5cdHJldHVybiBgXHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMSkgdmFyIHNoYWRvd1NhbXBsZXI6IHNhbXBsZXI7XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgdmFyIHNoYWRvd01hcDogdGV4dHVyZV9kZXB0aF8yZDtcclxuICAgIFxyXG4gICAgLy8gQGdyb3VwKDApIEBiaW5kaW5nKDApIHZhciBzaGFkb3dNYXA6IHRleHR1cmVfZGVwdGhfMmRfYXJyYXk7XHJcbiAgICAvLyBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgdmFyIHNoYWRvd01hcDogdGV4dHVyZV8yZDxmMzI+O1xyXG5cclxuICAgIHN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxyXG4gICAgICAgIEBsb2NhdGlvbigwKSB1djogdmVjMjxmMzI+LFxyXG4gICAgfTtcclxuXHJcbiAgICBmbiBsaW5lYXJpemVEZXB0aChkZXB0aDogZjMyLCBuZWFyOiBmMzIsIGZhcjogZjMyKS0+ZjMyIHtcclxuICAgICAgcmV0dXJuIDIgKiAobmVhciAqIGZhcikgLyAoZmFyICsgbmVhciAtIGRlcHRoICogKGZhciAtIG5lYXIpKTtcclxuICAgIH1cclxuXHJcbiAgICBAZnJhZ21lbnRcclxuICAgIGZuIG1haW4oaW5wdXQ6VmVydGV4T3V0cHV0KSAtPiBAbG9jYXRpb24oMCkgdmVjNDxmMzI+IHtcclxuXHRcdFx0bGV0IGNvbG9yOiB2ZWM0PGYzMj4gPSB0ZXh0dXJlR2F0aGVyKHNoYWRvd01hcCwgc2hhZG93U2FtcGxlciwgdmVjMjxmMzI+KGlucHV0LnV2LngsMS4wLWlucHV0LnV2LnkpKTtcclxuICAgICAgbGV0IGRlcHRoID0gKGxpbmVhcml6ZURlcHRoKGNvbG9yLnIsIDAuMSwgNTAwKSAtIDAuMSkgLyAoNTAwIC0gMC4xKTtcclxuICAgICAgcmV0dXJuIHZlYzQodmVjMyhkZXB0aCksIDEuMCk7IC8vIFBlcnNwZWN0aXZlQ2FtZXJhXHJcbiAgICAgIC8vIHJldHVybiBjb2xvcjtcclxuXHJcbiAgICAgIC8vIHJldHVybiB0ZXh0dXJlU2FtcGxlKHNoYWRvd01hcCwgc2hhZG93U2FtcGxlciwgdmVjMjxmMzI+KGlucHV0LnV2LngsMS4wLWlucHV0LnV2LnkpKTtcclxuXHJcbiAgICB9XHJcbiAgICBgO1xyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNoYWRvd01hcERlYnVnZ2VyVmVydChkZWZpbmVzKSB7XHJcblx0cmV0dXJuIGBcclxuICAgIHN0cnVjdCBWZXJ0ZXhJbnB1dCB7XHJcbiAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMucG9zaXRpb25Mb2NhdGlvbn0pIHBvc2l0aW9uOiB2ZWMyPGYzMj4sICAgICAgIFxyXG4gICAgfVxyXG4gICAgc3RydWN0IFZlcnRleE91dHB1dCB7XHJcbiAgICAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxyXG4gICAgICAgICBAbG9jYXRpb24oMCkgdXY6IHZlYzI8ZjMyPixcclxuICAgICB9O1xyXG4gICAgQHZlcnRleFxyXG4gICAgZm4gbWFpbihpbnB1dDogVmVydGV4SW5wdXQpIC0+IFZlcnRleE91dHB1dCB7XHJcbiAgICAgdmFyIG91dHB1dDpWZXJ0ZXhPdXRwdXQ7XHJcbiAgICAgb3V0cHV0LnV2ID0gaW5wdXQucG9zaXRpb24gKiAwLjUgKyAwLjU7XHJcbiAgICAgb3V0cHV0LnBvc2l0aW9uID0gdmVjNDxmMzI+KGlucHV0LnBvc2l0aW9uLCAwLjAsIDEuMCk7O1xyXG4gICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9XHJcbiAgICBgO1xyXG59XHJcbiIsIi8vIGltcG9ydCBDb2xvciBmcm9tIFwiLi4vLi4vbWF0aC9Db2xvclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hhZG93TWFwRnJhZyhkZWZpbmVzKSB7XHJcblx0cmV0dXJuIGBcclxuICAgIHN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxyXG4gICAgICAgIEBsb2NhdGlvbigwKSBjb2xvcjogdmVjNDxmMzI+LFxyXG4gICAgfTtcclxuICAgIEBmcmFnbWVudFxyXG4gICAgZm4gbWFpbihpbnB1dDpWZXJ0ZXhPdXRwdXQpIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4ge1xyXG4gICAgICByZXR1cm4gaW5wdXQuY29sb3I7XHJcbiAgICB9XHJcbiAgICBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaGFkb3dNYXBWZXJ0KGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICAgc3RydWN0IFZlcnRleElucHV0IHtcclxuICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5wb3NpdGlvbkxvY2F0aW9ufSkgcG9zaXRpb246IHZlYzM8ZjMyPiwgICAgICAgXHJcbiAgIH07XHJcbiAgIHN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb246IHZlYzQ8ZjMyPixcclxuICAgIH07XHJcbiAgIHN0cnVjdCBTZWxmVW5pZm9ybSB7XHJcbiAgICAgIG1vZGVsTWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgfTtcclxuICAgc3RydWN0IFN5c3RlbVVuaWZvcm0ge1xyXG4gICAgICBwcm9qZWN0aW9uTWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgdmlld01hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgIGludmVyc2VWaWV3TWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgY2FtZXJhUG9zaXRpb246IHZlYzM8ZjMyPixcclxuICAgfTtcclxuXHJcbiAgICNpZiAke2RlZmluZXMuaXNQb2ludExpZ2h0U2hhZG93TWFwfVxyXG4gICAgICBzdHJ1Y3QgUG9pbnRMaWdodFVuaWZvcm0ge1xyXG4gICAgICAgICB2cE1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgICAgIC8vIHZwTWF0cml4QXJyYXk6IGFycmF5PG1hdDR4NDxmMzI+LCA2PixcclxuICAgICAgfTtcclxuICAgICAgQGdyb3VwKDEpIEBiaW5kaW5nKCR7ZGVmaW5lcy5wb2ludExpZ2h0U2hhZG93Q2FtZXJhQmluZGluZ30pIHZhcjxzdG9yYWdlLCByZWFkPiBwb2ludExpZ2h0VW5pZm9ybTogUG9pbnRMaWdodFVuaWZvcm07XHJcbiAgICNlbmRpZlxyXG5cclxuICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5zZWxmQmluZGluZ30pIHZhcjx1bmlmb3JtPiBzZWxmVW5pZm9ybSA6IFNlbGZVbmlmb3JtO1xyXG4gICBAZ3JvdXAoMSkgQGJpbmRpbmcoJHtkZWZpbmVzLmNhbWVyYUJpbmRpbmd9KSB2YXI8dW5pZm9ybT4gc3lzdGVtVW5pZm9ybSA6IFN5c3RlbVVuaWZvcm07XHJcblxyXG4gICBAdmVydGV4XHJcbiAgIGZuIG1haW4oaW5wdXQ6IFZlcnRleElucHV0KSAtPiBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgICB2YXIgb3V0cHV0OlZlcnRleE91dHB1dDtcclxuICAgICAgI2lmICR7ZGVmaW5lcy5pc1BvaW50TGlnaHRTaGFkb3dNYXB9XHJcbiAgICAgICAgIG91dHB1dC5wb3NpdGlvbiA9IHBvaW50TGlnaHRVbmlmb3JtLnZwTWF0cml4ICogc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXggKiB2ZWM0PGYzMj4oaW5wdXQucG9zaXRpb24sMS4wKTtcclxuICAgICAgI2Vsc2VcclxuICAgICAgICAgb3V0cHV0LnBvc2l0aW9uID0gc3lzdGVtVW5pZm9ybS5wcm9qZWN0aW9uTWF0cml4ICogc3lzdGVtVW5pZm9ybS52aWV3TWF0cml4ICogc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXggKiB2ZWM0PGYzMj4oaW5wdXQucG9zaXRpb24sMS4wKTtcclxuICAgICAgI2VuZGlmXHJcbiAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgIH1cclxuICAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyBiaWxsYm9hcmRfZnMgfSBmcm9tIFwiLi9tYXRlcmlhbC9iaWxsYm9hcmRfZnNcIjtcclxuaW1wb3J0IHsgYmlsbGJvYXJkX3ZzIH0gZnJvbSBcIi4vbWF0ZXJpYWwvYmlsbGJvYXJkX3ZzXCI7XHJcbmltcG9ydCBjb2xvckZyYWcgZnJvbSBcIi4vbWF0ZXJpYWwvY29sb3JGcmFnXCI7XHJcbmltcG9ydCBjb2xvclZlcnQgZnJvbSBcIi4vbWF0ZXJpYWwvY29sb3JWZXJ0XCI7XHJcbmltcG9ydCBwYnJfZnMgZnJvbSBcIi4vbWF0ZXJpYWwvcGJyX2ZzXCI7XHJcbmltcG9ydCBwYnJfdnMgZnJvbSBcIi4vbWF0ZXJpYWwvcGJyX3ZzXCI7XHJcbmltcG9ydCBwYnJGcmFnIGZyb20gXCIuL21hdGVyaWFsL3BickZyYWdcIjtcclxuaW1wb3J0IHBiclZlcnQgZnJvbSBcIi4vbWF0ZXJpYWwvcGJyVmVydFwiO1xyXG5pbXBvcnQgcGhvbmdGcmFnIGZyb20gXCIuL21hdGVyaWFsL3Bob25nRnJhZ1wiO1xyXG5pbXBvcnQgcGhvbmdWZXJ0IGZyb20gXCIuL21hdGVyaWFsL3Bob25nVmVydFwiO1xyXG5pbXBvcnQgcXVhZEZyYWcgZnJvbSBcIi4vbWF0ZXJpYWwvcXVhZEZyYWdcIjtcclxuaW1wb3J0IHF1YWRWZXJ0IGZyb20gXCIuL21hdGVyaWFsL3F1YWRWZXJ0XCI7XHJcbmltcG9ydCBza3lCb3hGcmFnIGZyb20gXCIuL21hdGVyaWFsL3NreUJveEZyYWdcIjtcclxuaW1wb3J0IHNreUJveFZlcnQgZnJvbSBcIi4vbWF0ZXJpYWwvc2t5Qm94VmVydFwiO1xyXG5pbXBvcnQgYmxlbmRGcmFnIGZyb20gXCIuL3Bvc3RQcm9jZXNzL2JsZW5kL2JsZW5kRnJhZ1wiO1xyXG5pbXBvcnQgQmx1ciBmcm9tIFwiLi9wb3N0UHJvY2Vzcy9ibG9vbS9CbHVyXCI7XHJcbmltcG9ydCBMdW1pbm9zaXR5SGlnaCBmcm9tIFwiLi9wb3N0UHJvY2Vzcy9ibG9vbS9MdW1pbm9zaXR5SGlnaFwiO1xyXG5pbXBvcnQgU2hhZGVyQ2h1bmsgZnJvbSBcIi4vc2hhZGVyQ2h1bmsvU2hhZGVyQ2h1bmtcIjtcclxuaW1wb3J0IHNoYWRvd01hcERlYnVnZ2VyRnJhZyBmcm9tIFwiLi9zaGFkZXJDaHVuay9zaGFkb3cvc2hhZG93TWFwRGVidWdnZXJGcmFnXCI7XHJcbmltcG9ydCBzaGFkb3dNYXBEZWJ1Z2dlclZlcnQgZnJvbSBcIi4vc2hhZGVyQ2h1bmsvc2hhZG93L3NoYWRvd01hcERlYnVnZ2VyVmVydFwiO1xyXG5pbXBvcnQgc2hhZG93TWFwRnJhZyBmcm9tIFwiLi9zaGFkZXJDaHVuay9zaGFkb3cvc2hhZG93TWFwRnJhZ1wiO1xyXG5pbXBvcnQgc2hhZG93TWFwVmVydCBmcm9tIFwiLi9zaGFkZXJDaHVuay9zaGFkb3cvc2hhZG93TWFwVmVydFwiO1xyXG5cclxuZnVuY3Rpb24gcmVkdWNlQ29tbWEoc2hhZGVyKSB7XHJcblx0Ly8g5a+55omA5pyJ55qEaW5jbHVkZeWkhOeQhlxyXG5cdGNvbnN0IHN0ciA9IHJlc29sdmVJbmNsdWRlcyhzaGFkZXIpO1xyXG5cdHJldHVybiBzdHI7XHJcbn1cclxuY29uc3QgaW5jbHVkZVBhdHRlcm4gPSAvXlsgXFx0XSojaW5jbHVkZSArPChbXFx3XFxkLi9dKyk+L2dtO1xyXG5sZXQgY3VycmVudERlZmluZXMgPSB7fTtcclxuY29uc3Qgc2hhZGVycyA9IHtcclxuXHRwaG9uZzoge1xyXG5cdFx0ZnJhZzogcGhvbmdGcmFnLFxyXG5cdFx0dmVydDogcGhvbmdWZXJ0XHJcblx0fSxcclxuXHRjb2xvcjoge1xyXG5cdFx0ZnJhZzogY29sb3JGcmFnLFxyXG5cdFx0dmVydDogY29sb3JWZXJ0XHJcblx0fSxcclxuXHRwYnI6IHtcclxuXHRcdGZyYWc6IHBickZyYWcsXHJcblx0XHR2ZXJ0OiBwYnJWZXJ0XHJcblx0fSxcclxuXHRza3lib3g6IHtcclxuXHRcdGZyYWc6IHNreUJveEZyYWcsXHJcblx0XHR2ZXJ0OiBza3lCb3hWZXJ0XHJcblx0fSxcclxuXHRyZXNvbHZlOiB7XHJcblx0XHRmcmFnOiBxdWFkRnJhZyxcclxuXHRcdHZlcnQ6IHF1YWRWZXJ0XHJcblx0fSxcclxuXHRwYnJfbWF0OiB7XHJcblx0XHRmcmFnOiBwYnJfZnMsXHJcblx0XHR2ZXJ0OiBwYnJfdnNcclxuXHR9LFxyXG5cdGJsdXI6IHtcclxuXHRcdGZyYWc6IEJsdXIsXHJcblx0XHR2ZXJ0OiBxdWFkVmVydFxyXG5cdH0sXHJcblx0bHVtaW5vc2l0eUhpZ2g6IHtcclxuXHRcdGZyYWc6IEx1bWlub3NpdHlIaWdoLFxyXG5cdFx0dmVydDogcXVhZFZlcnRcclxuXHR9LFxyXG5cdGJsZW5kOiB7XHJcblx0XHRmcmFnOiBibGVuZEZyYWcsXHJcblx0XHR2ZXJ0OiBxdWFkVmVydFxyXG5cdH0sXHJcblx0c2hhZG93TWFwRGVidWdnZXI6IHtcclxuXHRcdGZyYWc6IHNoYWRvd01hcERlYnVnZ2VyRnJhZyxcclxuXHRcdHZlcnQ6IHNoYWRvd01hcERlYnVnZ2VyVmVydFxyXG5cdH0sXHJcblx0c2hhZG93TWFwOiB7XHJcblx0XHR2ZXJ0OiBzaGFkb3dNYXBWZXJ0LFxyXG5cdFx0ZnJhZzogc2hhZG93TWFwRnJhZ1xyXG5cdH0sXHJcblx0YmlsbGJvYXJkOntcclxuXHRcdHZlcnQ6IGJpbGxib2FyZF92cyxcclxuXHRcdGZyYWc6IGJpbGxib2FyZF9mc1xyXG5cdH1cclxufTtcclxuXHJcbmZ1bmN0aW9uIHJlc29sdmVJbmNsdWRlcyhzdHJpbmcpIHtcclxuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoaW5jbHVkZVBhdHRlcm4sIGluY2x1ZGVSZXBsYWNlcik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluY2x1ZGVSZXBsYWNlcihtYXRjaCwgaW5jbHVkZSkge1xyXG5cdGNvbnN0IGV4Y3V0ZSA9IFNoYWRlckNodW5rW2luY2x1ZGVdO1xyXG5cdGlmIChleGN1dGUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0dGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IHJlc29sdmUgI2luY2x1ZGUgPCR7aW5jbHVkZX0+YCk7XHJcblx0fVxyXG5cdGNvbnN0IHJlc3VsdCA9IGV4Y3V0ZShjdXJyZW50RGVmaW5lcyk7XHJcblx0cmV0dXJuIHJlc29sdmVJbmNsdWRlcyhyZXN1bHQpO1xyXG59XHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZlcnRGcmFnKHR5cGUsIGRlZmluZXMgPSB7fSkge1xyXG5cdGNvbnN0IGV4Y3V0ZUZ1bmMgPSBzaGFkZXJzW3R5cGVdO1xyXG5cdGN1cnJlbnREZWZpbmVzID0gZGVmaW5lcztcclxuXHRyZXR1cm4ge1xyXG5cdFx0dmVydDogcmVkdWNlQ29tbWEoZXhjdXRlRnVuYy52ZXJ0KGN1cnJlbnREZWZpbmVzKSksXHJcblx0XHRmcmFnOiByZWR1Y2VDb21tYShleGN1dGVGdW5jLmZyYWcoY3VycmVudERlZmluZXMpKVxyXG5cdH07XHJcbn1cclxuIiwiaW1wb3J0IGRlZmF1bHRWYWx1ZSBmcm9tIFwiLi4vdXRpbHMvZGVmYXVsdFZhbHVlXCI7XHJcbmltcG9ydCBnZXRWZXJ0RnJhZyBmcm9tIFwiLi9TaGFkZXJzXCI7XHJcbmV4cG9ydCBpbnRlcmZhY2UgR1BVU2hhZGVyTW9kdWxlT2JqZWN0IHtcclxuXHR2ZXJ0OiBHUFVTaGFkZXJNb2R1bGU7XHJcblx0ZnJhZzogR1BVU2hhZGVyTW9kdWxlO1xyXG59XHJcbmV4cG9ydCBjbGFzcyBTaGFkZXJTb3VyY2Uge1xyXG5cdHZlcnRFbnRyeVBvaW50Pzogc3RyaW5nO1xyXG5cdGZyYWdFbnRyeVBvaW50Pzogc3RyaW5nO1xyXG5cdHZlcnQ/OiBzdHJpbmcgfCBGdW5jdGlvbjtcclxuXHRmcmFnPzogc3RyaW5nIHwgRnVuY3Rpb247XHJcblx0Y29tcHV0ZT86IHN0cmluZyB8IEZ1bmN0aW9uO1xyXG5cdGNvbXB1dGVNYWluPzogc3RyaW5nO1xyXG5cdGRlZmluZXM/OiB7fTtcclxuXHRkaXJ0eTogYm9vbGVhbjtcclxuXHRyZW5kZXI6IGJvb2xlYW47XHJcblx0dHlwZTogc3RyaW5nO1xyXG5cdHByaXZhdGUgX3VpZDogc3RyaW5nO1xyXG5cdHByaXZhdGUgY3VzdG9tOiBib29sZWFuO1xyXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcclxuXHRcdHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcclxuXHRcdHRoaXMuZGVmaW5lcyA9IG9wdGlvbnMuZGVmaW5lcztcclxuXHRcdHRoaXMuY3VzdG9tID0gZGVmYXVsdFZhbHVlKG9wdGlvbnMuY3VzdG9tLCBmYWxzZSk7XHJcblx0XHR0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHRcdGlmIChvcHRpb25zLnJlbmRlcikge1xyXG5cdFx0XHR0aGlzLnJlbmRlciA9IHRydWU7XHJcblx0XHRcdHRoaXMudmVydEVudHJ5UG9pbnQgPSBvcHRpb25zLnZlcnRNYWluIHx8IFwibWFpblwiO1xyXG5cdFx0XHR0aGlzLmZyYWdFbnRyeVBvaW50ID0gb3B0aW9ucy5mcmFnTWFpbiB8fCBcIm1haW5cIjtcclxuXHRcdFx0dGhpcy52ZXJ0ID0gb3B0aW9ucy52ZXJ0IHx8IHVuZGVmaW5lZDtcclxuXHRcdFx0dGhpcy5mcmFnID0gb3B0aW9ucy5mcmFnIHx8IHVuZGVmaW5lZDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuY29tcHV0ZSA9IG9wdGlvbnMuY29tcHV0ZSB8fCB1bmRlZmluZWQ7XHJcblx0XHRcdHRoaXMuY29tcHV0ZU1haW4gPSBvcHRpb25zLmNvbXB1dGVNYWluIHx8IFwibWFpblwiO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRnZXQgdWlkKCkge1xyXG5cdFx0dGhpcy5fdWlkID0gdGhpcy50eXBlLmNvbmNhdChKU09OLnN0cmluZ2lmeSh0aGlzLmRlZmluZXMpKTtcclxuXHRcdHJldHVybiB0aGlzLl91aWQ7XHJcblx0fVxyXG5cdHByaXZhdGUgdXBkYXRlU2hhZGVyU3RyKCkge1xyXG5cdFx0aWYgKHRoaXMuY3VzdG9tKSB7XHJcblx0XHRcdGlmICh0aGlzLmNvbXB1dGUpIHtcclxuXHRcdFx0XHR0aGlzLmNvbXB1dGUgPSAoPEZ1bmN0aW9uPnRoaXMuY29tcHV0ZSkodGhpcy5kZWZpbmVzKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLnZlcnQgPSB0aGlzLnZlcnQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IHRoaXMudmVydCh0aGlzLmRlZmluZXMpIDogdGhpcy52ZXJ0O1xyXG5cdFx0XHRcdHRoaXMuZnJhZyA9IHRoaXMuZnJhZyBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gdGhpcy5mcmFnKHRoaXMuZGVmaW5lcykgOiB0aGlzLmZyYWc7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnN0IHNvdXJjZSA9IGdldFZlcnRGcmFnKHRoaXMudHlwZSwgdGhpcy5kZWZpbmVzKTtcclxuXHJcblx0XHRcdHRoaXMudmVydCA9IHNvdXJjZS52ZXJ0O1xyXG5cdFx0XHR0aGlzLmZyYWcgPSBzb3VyY2UuZnJhZztcclxuXHRcdH1cclxuXHR9XHJcblx0cHVibGljIHNldERlZmluZXMoZGVmaW5lcykge1xyXG5cdFx0aWYgKCFkZWZpbmVzKSByZXR1cm47XHJcblx0XHR0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuZGVmaW5lcyA9IE9iamVjdC5hc3NpZ24odGhpcy5kZWZpbmVzLCBkZWZpbmVzKTtcclxuXHR9XHJcblx0Y3JlYXRlU2hhZGVyTW9kdWxlKGRldmljZTogR1BVRGV2aWNlKTogeyB2ZXJ0OiBHUFVTaGFkZXJNb2R1bGU7IGZyYWc6IEdQVVNoYWRlck1vZHVsZSB9IHwgR1BVU2hhZGVyTW9kdWxlIHtcclxuXHRcdGlmICh0aGlzLmRpcnR5KSB7XHJcblx0XHRcdHRoaXMudXBkYXRlU2hhZGVyU3RyKCk7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLnJlbmRlcikge1xyXG5cdFx0XHRjb25zdCB2ZXJ0ID0gdGhpcy52ZXJ0XHJcblx0XHRcdFx0PyBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtcclxuXHRcdFx0XHRcdFx0Y29kZTogPHN0cmluZz50aGlzLnZlcnRcclxuXHRcdFx0XHQgIH0pXHJcblx0XHRcdFx0OiB1bmRlZmluZWQ7XHJcblx0XHRcdGNvbnN0IGZyYWcgPSB0aGlzLmZyYWdcclxuXHRcdFx0XHQ/IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe1xyXG5cdFx0XHRcdFx0XHRjb2RlOiA8c3RyaW5nPnRoaXMuZnJhZ1xyXG5cdFx0XHRcdCAgfSlcclxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcclxuXHJcblx0XHRcdHJldHVybiB7IHZlcnQsIGZyYWcgfTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnN0IGNvbXB1dGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtcclxuXHRcdFx0XHRjb2RlOiA8c3RyaW5nPnRoaXMuY29tcHV0ZVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0cmV0dXJuIGNvbXB1dGU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHN0YXRpYyByZXBsYWNlTWFpbihzb3VyY2U6IHN0cmluZywgcmVuYW1lZE1haW46IHN0cmluZykge1xyXG5cdFx0cmVuYW1lZE1haW4gPSBgdm9pZCAke3JlbmFtZWRNYWlufSgpYDtcclxuXHRcdHJldHVybiBzb3VyY2UucmVwbGFjZSgvdm9pZFxccyttYWluXFxzKlxcKFxccyooPzp2b2lkKT9cXHMqXFwpL2csIHJlbmFtZWRNYWluKTtcclxuXHR9XHJcblx0c3RhdGljIGNvbXBpbGVDdXN0b21TaGFkZXJiYWNrVXAodGVtcGxhdGUsIGRlZmluZXMpOiBzdHJpbmcge1xyXG5cdFx0Y29uc3QgcmVnID0gL1xce1xceyhcXHcrKVxcfVxcfS87XHJcblx0XHRpZiAocmVnLnRlc3QodGVtcGxhdGUpKSB7XHJcblx0XHRcdGNvbnN0IG5hbWUgPSByZWcuZXhlYyh0ZW1wbGF0ZSlbMV07XHJcblx0XHRcdHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZShyZWcsIGRlZmluZXNbbmFtZV0pO1xyXG5cdFx0XHRyZXR1cm4gU2hhZGVyU291cmNlLmNvbXBpbGVDdXN0b21TaGFkZXIodGVtcGxhdGUsIGRlZmluZXMpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRlbXBsYXRlO1xyXG5cdH1cclxuXHRzdGF0aWMgY29tcGlsZUN1c3RvbVNoYWRlcih0ZW1wbGF0ZSwgZGVmaW5lcyk6IHN0cmluZyB7XHJcblx0XHRjb25zdCByZWcgPSAvXFwkeyhcXHcrKS4oXFx3Kyl9LztcclxuXHRcdGlmIChyZWcudGVzdCh0ZW1wbGF0ZSkpIHtcclxuXHRcdFx0Y29uc3QgcmVnVmFsdWUgPSByZWcuZXhlYyh0ZW1wbGF0ZSk7XHJcblx0XHRcdGNvbnN0IGRlZmluZSA9IHJlZ1ZhbHVlWzJdO1xyXG5cdFx0XHRjb25zdCBuYW1lID0gcmVnVmFsdWVbMF07XHJcblx0XHRcdHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZShuYW1lLCBkZWZpbmVzW2RlZmluZV0pO1xyXG5cdFx0XHRyZXR1cm4gU2hhZGVyU291cmNlLmNvbXBpbGVDdXN0b21TaGFkZXIodGVtcGxhdGUsIGRlZmluZXMpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRlbXBsYXRlO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJVW5pZm9ybSwgVW5pZm9ybXMgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xyXG5pbXBvcnQgU2hhZGVyRGF0YSBmcm9tIFwiLi4vcmVuZGVyL1NoYWRlckRhdGFcIjtcclxuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XHJcbmltcG9ydCB7IFVuaWZvcm1FbnVtIH0gZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3Jtc1wiO1xyXG5jb25zdCB1bmlmb3JtQXJyYXlOYW1lcyA9IFtcImZsb2F0LWFycmF5XCIsIFwidmVjMi1hcnJheVwiLCBcInZlYzMtYXJyYXlcIiwgXCJ2ZWM0LWFycmF5XCJdO1xyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDb250YWluRmxvYXRUeXBlKHVuaWZvcm1zKSB7XHJcblx0bGV0IHJlc3VsdCA9IDA7XHJcblx0bGV0IGhhc0FycmF5dHlwZSA9IGZhbHNlO1xyXG5cdGNvbnN0IHVuaWZvcm1zTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh1bmlmb3Jtcyk7XHJcblx0dW5pZm9ybXNOYW1lcy5tYXAoKHVuaWZvcm1zTmFtZSkgPT4ge1xyXG5cdFx0aWYgKHVuaWZvcm1zW3VuaWZvcm1zTmFtZV0udHlwZSA9PSBcInRleHR1cmVcIiB8fCB1bmlmb3Jtc1t1bmlmb3Jtc05hbWVdLnR5cGUgPT0gXCJzYW1wbGVyXCIpIHtcclxuXHRcdFx0cmVzdWx0ICs9IDA7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dW5pZm9ybUFycmF5TmFtZXMuZmluZCgobmFtZSkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIG5hbWUgPT09IHVuaWZvcm1zW3VuaWZvcm1zTmFtZV0udHlwZTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRoYXNBcnJheXR5cGUgPSB0cnVlO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJlc3VsdCArPSAxO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSk7XHJcblx0cmV0dXJuIHtcclxuXHRcdGhhc0Zsb2F0OiByZXN1bHQsXHJcblx0XHRoYXNBcnJheXR5cGVcclxuXHR9O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBhZGRVbmlmb3JtVG9TaGFkZXJEYXRhKFxyXG5cdG5hbWU6IHN0cmluZyxcclxuXHR1bmlmb3JtOiBJVW5pZm9ybSxcclxuXHR1bmlmb3JtczogVW5pZm9ybXMsXHJcblx0c2hhZGVyRGF0YTogU2hhZGVyRGF0YSxcclxuXHRtZXNoPzpNZXNoLFxyXG5cdHVuaWZvcm1CdWZmZXI/OiBVbmlmb3JtQnVmZmVyXHJcbikge1xyXG5cdHN3aXRjaCAodW5pZm9ybS50eXBlKSB7XHJcblx0XHRjYXNlIFwiZmxvYXRcIjpcclxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcdG5hbWUsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm1zW25hbWVdLnZhbHVlO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uRmxvYXRcclxuXHRcdFx0KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFwidmVjMlwiOlxyXG5cdFx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0bmFtZSxcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdW5pZm9ybXNbbmFtZV0udmFsdWU7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRVbmlmb3JtRW51bS5GbG9hdFZlYzJcclxuXHRcdFx0KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFwidmVjM1wiOlxyXG5cdFx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0bmFtZSxcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdW5pZm9ybXNbbmFtZV0udmFsdWU7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRVbmlmb3JtRW51bS5GbG9hdFZlYzNcclxuXHRcdFx0KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFwiY29sb3JcIjpcclxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcdG5hbWUsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm1zW25hbWVdLnZhbHVlO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uQ29sb3JcclxuXHRcdFx0KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFwidmVjNFwiOlxyXG5cdFx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0bmFtZSxcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdW5pZm9ybXNbbmFtZV0udmFsdWU7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRVbmlmb3JtRW51bS5GbG9hdFZlYzRcclxuXHRcdFx0KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFwibWF0MlwiOlxyXG5cdFx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0bmFtZSxcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdW5pZm9ybXNbbmFtZV0udmFsdWU7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRVbmlmb3JtRW51bS5NYXQyXHJcblx0XHRcdCk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSBcIm1hdDNcIjpcclxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcdG5hbWUsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm1zW25hbWVdLnZhbHVlO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uTWF0M1xyXG5cdFx0XHQpO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgXCJtYXQ0XCI6XHJcblx0XHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XHRuYW1lLFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdHJldHVybiBuYW1lPT1cIm1vZGVsTWF0cml4XCI/IG1lc2g/Lm1vZGVsTWF0cml4OiBuYW1lPT09XCJub3JtYWxNYXRyaXhcIj9tZXNoLm5vcm1hbE1hdHJpeDp1bmlmb3Jtc1tuYW1lXS52YWx1ZTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdFVuaWZvcm1FbnVtLk1hdDRcclxuXHRcdFx0KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFwiZmxvYXQtYXJyYXlcIjpcclxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcdG5hbWUsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm1zW25hbWVdLnZhbHVlO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uRmxvYXRBcnJheSxcclxuXHRcdFx0XHR1bmlmb3Jtc1tuYW1lXS52YWx1ZS5sZW5ndGhcclxuXHRcdFx0KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFwidmVjMi1hcnJheVwiOlxyXG5cdFx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0bmFtZSxcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdW5pZm9ybXNbbmFtZV0udmFsdWU7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRVbmlmb3JtRW51bS5WZWMyQXJyYXksXHJcblx0XHRcdFx0dW5pZm9ybXNbbmFtZV0udmFsdWUubGVuZ3RoXHJcblx0XHRcdCk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSBcInZlYzMtYXJyYXlcIjpcclxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcdG5hbWUsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm1zW25hbWVdLnZhbHVlO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uVmVjM0FycmF5LFxyXG5cdFx0XHRcdHVuaWZvcm1zW25hbWVdLnZhbHVlLmxlbmd0aFxyXG5cdFx0XHQpO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgXCJ2ZWM0LWFycmF5XCI6XHJcblx0XHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XHRuYW1lLFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdHJldHVybiB1bmlmb3Jtc1tuYW1lXS52YWx1ZTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdFVuaWZvcm1FbnVtLlZlYzRBcnJheSxcclxuXHRcdFx0XHR1bmlmb3Jtc1tuYW1lXS52YWx1ZS5sZW5ndGhcclxuXHRcdFx0KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFwidGV4dHVyZVwiOlxyXG5cdFx0XHRzaGFkZXJEYXRhLnNldFRleHR1cmUobmFtZSwgKCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB1bmlmb3Jtc1tuYW1lXS52YWx1ZTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSBcInNhbXBsZXJcIjpcclxuXHRcdFx0c2hhZGVyRGF0YS5zZXRTYW1wbGVyKG5hbWUsICgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdW5pZm9ybXNbbmFtZV0udmFsdWU7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGRlZmF1bHQ6XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vdCBtYXRjaCB1bmlmcm9tIHR5cGVcIik7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBCaW5kR3JvdXBMYXlvdXRFbnRyeSBmcm9tIFwiLi9CaW5kR3JvdXBMYXlvdXRFbnRyeVwiO1xyXG5jb25zdCBsYXlvdXRDYWNoZSA9IG5ldyBNYXAoKTtcclxuY2xhc3MgQmluZEdyb3VwTGF5b3V0IHtcclxuXHRwdWJsaWMgZ3B1QmluZEdyb3VwTGF5b3V0OiBHUFVCaW5kR3JvdXBMYXlvdXQ7XHJcblx0aW5kZXg6IG51bWJlcjtcclxuXHRwcml2YXRlIGNvbnN0cnVjdG9yKGRldmljZTogR1BVRGV2aWNlLCBsYWJlbDogc3RyaW5nLCBwdWJsaWMgZW50cmllczogQmluZEdyb3VwTGF5b3V0RW50cnlbXSA9IFtdLCBpbmRleCA9IDApIHtcclxuXHRcdHRoaXMuaW5kZXggPSBpbmRleCB8fCAwO1xyXG5cdFx0dGhpcy5ncHVCaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KHtcclxuXHRcdFx0bGFiZWw6IGxhYmVsLFxyXG5cdFx0XHRlbnRyaWVzOiBlbnRyaWVzLm1hcCgoeyB2aXNpYmlsaXR5LCBidWZmZXIsIHNhbXBsZXIsIHRleHR1cmUsIHN0b3JhZ2VUZXh0dXJlLCBiaW5kaW5nIH0pID0+ICh7XHJcblx0XHRcdFx0YmluZGluZyxcclxuXHRcdFx0XHR2aXNpYmlsaXR5LFxyXG5cdFx0XHRcdGJ1ZmZlcixcclxuXHRcdFx0XHRzYW1wbGVyLFxyXG5cdFx0XHRcdHRleHR1cmUsXHJcblx0XHRcdFx0c3RvcmFnZVRleHR1cmVcclxuXHRcdFx0fSkpXHJcblx0XHR9KTtcclxuXHR9XHJcblx0c3RhdGljIGdldEJpbmRHcm91cExheW91dEZyb21DYWNoZShcclxuXHRcdGRldmljZTogR1BVRGV2aWNlLFxyXG5cdFx0bGFiZWw6IHN0cmluZyxcclxuXHRcdGVudGlyZXM6IEJpbmRHcm91cExheW91dEVudHJ5W10sXHJcblx0XHRpbmRleFxyXG5cdCk6IEJpbmRHcm91cExheW91dCB7XHJcblx0XHRpZiAobGF5b3V0Q2FjaGUuaGFzKGxhYmVsKSkge1xyXG5cdFx0XHRyZXR1cm4gbGF5b3V0Q2FjaGUuZ2V0KGxhYmVsKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnN0IGJpbmRHcm91cExheW91dCA9IG5ldyBCaW5kR3JvdXBMYXlvdXQoZGV2aWNlLCBsYWJlbCwgZW50aXJlcywgaW5kZXgpO1xyXG5cdFx0XHRsYXlvdXRDYWNoZS5zZXQobGFiZWwsIGJpbmRHcm91cExheW91dCk7XHJcblx0XHRcdHJldHVybiBiaW5kR3JvdXBMYXlvdXQ7XHJcblx0XHR9XHJcblx0fVxyXG5cdHN0YXRpYyByZW1vdmVCaW5kR3JvdXBMYXlvdXRGcm9tQ2FjaGUoYmluZEdyb3VwTGF5b3V0OiBCaW5kR3JvdXBMYXlvdXQpIHtcclxuXHRcdGxheW91dENhY2hlLmRlbGV0ZShiaW5kR3JvdXBMYXlvdXQpO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmluZEdyb3VwTGF5b3V0O1xyXG4iLCJpbXBvcnQgeyBCaW5kR3JvdXBMYXlvdXRFbnRyeVR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaW5kR3JvdXBMYXlvdXRFbnRyeSB7XHJcbiAgYmluZGluZzogbnVtYmVyO1xyXG4gIHZpc2liaWxpdHk6IEdQVVNoYWRlclN0YWdlRmxhZ3M7XHJcbiAgdW5pZm9ybXM/OiBhbnlbXTtcclxuICBidWZmZXI/OiBHUFVCdWZmZXJCaW5kaW5nTGF5b3V0O1xyXG4gIHNhbXBsZXI/OiBHUFVTYW1wbGVyQmluZGluZ0xheW91dDtcclxuICB0ZXh0dXJlPzogR1BVVGV4dHVyZUJpbmRpbmdMYXlvdXQ7XHJcbiAgc3RvcmFnZVRleHR1cmU/OiBHUFVTdG9yYWdlVGV4dHVyZUJpbmRpbmdMYXlvdXQ7XHJcbiAgZXh0ZXJuYWxUZXh0dXJlPzogR1BVRXh0ZXJuYWxUZXh0dXJlQmluZGluZ0xheW91dDtcclxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCaW5kR3JvdXBMYXlvdXRFbnRyeVR5cGUpIHtcclxuICAgIHRoaXMuYmluZGluZyA9IG9wdGlvbnMuYmluZGluZztcclxuICAgIHRoaXMudmlzaWJpbGl0eSA9IG9wdGlvbnMudmlzaWJpbGl0eTtcclxuICAgIHRoaXMuYnVmZmVyID0gb3B0aW9ucy5idWZmZXI7XHJcbiAgICB0aGlzLnNhbXBsZXIgPSBvcHRpb25zLnNhbXBsZXI7XHJcbiAgICB0aGlzLnRleHR1cmUgPSBvcHRpb25zLnRleHR1cmU7XHJcbiAgICB0aGlzLnN0b3JhZ2VUZXh0dXJlID0gb3B0aW9ucy5zdG9yYWdlVGV4dHVyZTtcclxuICAgIHRoaXMuZXh0ZXJuYWxUZXh0dXJlID0gb3B0aW9ucy5zdG9yYWdlVGV4dHVyZTtcclxuICB9XHJcbiAgZ2V0R1BVTGF5b3V0RW50aXR5KCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYmluZGluZzogdGhpcy5iaW5kaW5nLFxyXG4gICAgICB2aXNpYmlsaXR5OiB0aGlzLnZpc2liaWxpdHksXHJcbiAgICAgIGJ1ZmZlcjogdGhpcy5idWZmZXIsXHJcbiAgICAgIHNhbXBsZXI6IHRoaXMuc2FtcGxlcixcclxuICAgICAgdGV4dHVyZTogdGhpcy50ZXh0dXJlLFxyXG4gICAgICBzdG9yYWdlVGV4dHVyZTogdGhpcy5zdG9yYWdlVGV4dHVyZSxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xyXG5pbXBvcnQgQmluZEdyb3VwIGZyb20gXCIuL0JpbmRHcm91cFwiO1xyXG5pbXBvcnQgQmluZEdyb3VwRW50aXR5IGZyb20gXCIuL0JpbmRHcm91cEVudGl0eVwiO1xyXG5pbXBvcnQgQmluZEdyb3VwTGF5b3V0IGZyb20gXCIuL0JpbmRHcm91cExheW91dFwiO1xyXG5pbXBvcnQgQmluZEdyb3VwTGF5b3V0RW50cnkgZnJvbSBcIi4vQmluZEdyb3VwTGF5b3V0RW50cnlcIjtcclxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4vQ29udGV4dFwiO1xyXG5pbXBvcnQgU2FtcGxlciBmcm9tIFwiLi9TYW1wbGVyXCI7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuL1RleHR1cmVcIjtcclxuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4vVW5pZm9ybUJ1ZmZlclwiO1xyXG5pbXBvcnQgeyBVbmlmb3JtU2FtcGxlciwgVW5pZm9ybVRleHR1cmUgfSBmcm9tIFwiLi9Vbmlmb3Jtc1wiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFkZXJEYXRhIHtcclxuXHRjdXJyZW50QmluZGluZzogbnVtYmVyO1xyXG5cclxuXHRkZWZpbmVzOiB7IFtwcm9wOiBzdHJpbmddOiBib29sZWFuIHwgbnVtYmVyIH07XHJcblxyXG5cdGRlZmluZURpcnR5OiBib29sZWFuO1xyXG5cclxuXHRsYWJlbDogc3RyaW5nO1xyXG5cclxuXHRiaW5kR3JvdXA6IEJpbmRHcm91cDtcclxuXHJcblx0Z3JvdXBMYXlvdXQ6IEJpbmRHcm91cExheW91dDtcclxuXHJcblx0bGF5b3V0SW5kZXg6IG51bWJlcjtcclxuXHJcblx0Z3JvdXBJbmRleDogbnVtYmVyO1xyXG5cclxuXHRwcm90ZWN0ZWQgX3VuaWZvcm1zOiBNYXA8c3RyaW5nLCBhbnk+O1xyXG5cclxuXHRjb25zdHJ1Y3RvcihsYWJlbDogc3RyaW5nLCBzaXplPzogbnVtYmVyLCBsYXlvdXRJbmRleD86IG51bWJlciwgZ3JvdXBJbmRleD8pIHtcclxuXHRcdHRoaXMubGFiZWwgPSBsYWJlbDtcclxuXHRcdHRoaXMuY3VycmVudEJpbmRpbmcgPSAwO1xyXG5cdFx0dGhpcy5kZWZpbmVEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmRlZmluZXMgPSB7fTtcclxuXHRcdHRoaXMuX3VuaWZvcm1zID0gbmV3IE1hcCgpO1xyXG5cdFx0dGhpcy5ncm91cEluZGV4ID0gZGVmYXVsdFZhbHVlKGdyb3VwSW5kZXgsIDApO1xyXG5cdFx0dGhpcy5sYXlvdXRJbmRleCA9IGRlZmF1bHRWYWx1ZShsYXlvdXRJbmRleCwgMCk7XHJcblx0fVxyXG5cdGdldFVuaWZvcm1CdWZmZXIobmFtZTogc3RyaW5nKTogVW5pZm9ybUJ1ZmZlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5fdW5pZm9ybXMuZ2V0KG5hbWUpO1xyXG5cdH1cclxuXHRzZXRVbmlmb3JtQnVmZmVyKG5hbWU6IHN0cmluZywgdW5pZm9ybUJ1ZmZlcjogVW5pZm9ybUJ1ZmZlcikge1xyXG5cdFx0aWYgKHRoaXMuX3VuaWZvcm1zLmdldChuYW1lKSkgcmV0dXJuO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5iaW5kaW5nID0gdGhpcy5jdXJyZW50QmluZGluZztcclxuXHRcdHRoaXMuc2V0RGVmaW5lKG5hbWUuY29uY2F0KFwiQmluZGluZ1wiKSwgdGhpcy5jdXJyZW50QmluZGluZyk7XHJcblx0XHR0aGlzLmN1cnJlbnRCaW5kaW5nICs9IDE7XHJcblx0XHR0aGlzLl91bmlmb3Jtcy5zZXQobmFtZSwgdW5pZm9ybUJ1ZmZlcik7XHJcblx0fVxyXG5cdHNldFRleHR1cmUobmFtZTogc3RyaW5nLCB2YWx1ZTogRnVuY3Rpb24gfCBUZXh0dXJlLCBiaW5kaW5nPzogbnVtYmVyKSB7XHJcblx0XHRpZiAodGhpcy5fdW5pZm9ybXMuZ2V0KG5hbWUpKSByZXR1cm47XHJcblx0XHRjb25zdCB1bmlmb3JtID0gbmV3IFVuaWZvcm1UZXh0dXJlKG5hbWUsIHRoaXMuY3VycmVudEJpbmRpbmcsIHZhbHVlKTtcclxuXHRcdHRoaXMuc2V0RGVmaW5lKG5hbWUuY29uY2F0KFwiQmluZGluZ1wiKSwgdGhpcy5jdXJyZW50QmluZGluZyk7XHJcblx0XHR0aGlzLmN1cnJlbnRCaW5kaW5nICs9IDE7XHJcblx0XHR0aGlzLl91bmlmb3Jtcy5zZXQobmFtZSwgdW5pZm9ybSk7XHJcblx0fVxyXG5cdHNldFNhbXBsZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogRnVuY3Rpb24gfCBTYW1wbGVyLCBiaW5kaW5nPzogbnVtYmVyKSB7XHJcblx0XHRpZiAodGhpcy5fdW5pZm9ybXMuZ2V0KG5hbWUpKSByZXR1cm47XHJcblx0XHRjb25zdCB1bmlmb3JtID0gbmV3IFVuaWZvcm1TYW1wbGVyKG5hbWUsIHRoaXMuY3VycmVudEJpbmRpbmcsIHZhbHVlKTtcclxuXHRcdHRoaXMuc2V0RGVmaW5lKG5hbWUuY29uY2F0KFwiQmluZGluZ1wiKSwgdGhpcy5jdXJyZW50QmluZGluZyk7XHJcblx0XHR0aGlzLmN1cnJlbnRCaW5kaW5nICs9IDE7XHJcblx0XHR0aGlzLl91bmlmb3Jtcy5zZXQobmFtZSwgdW5pZm9ybSk7XHJcblx0fVxyXG5cdHNldERlZmluZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuIHwgbnVtYmVyKSB7XHJcblx0XHRpZiAodGhpcy5kZWZpbmVzW25hbWVdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dGhpcy5kZWZpbmVEaXJ0eSA9IHRydWU7XHJcblx0XHRcdHRoaXMuZGVmaW5lc1tuYW1lXSA9IHZhbHVlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKHRoaXMuZGVmaW5lc1tuYW1lXSA9PT0gdmFsdWUpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5kZWZpbmVEaXJ0eSA9IHRydWU7XHJcblx0XHRcdFx0dGhpcy5kZWZpbmVzW25hbWVdID0gdmFsdWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0cmVwbGFjZVVuaWZvcm1CdWZmZXJWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBGdW5jdGlvbiB8IG51bWJlciB8IE9iamVjdCkge1xyXG5cdFx0dGhpcy5fdW5pZm9ybXMuZm9yRWFjaCgodW5pZm9ybSkgPT4ge1xyXG5cdFx0XHRpZiAodW5pZm9ybT8uaXNVbmlmb3JtQnVmZmVyKSB7XHJcblx0XHRcdFx0dW5pZm9ybS5yZXBsYWNlVW5pZm9ybVZhbHVlKG5hbWUsIHZhbHVlKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdGJpbmQoY29udGV4dDogQ29udGV4dCwgcGFzc0VuY29kZXI6IEdQVVJlbmRlclBhc3NFbmNvZGVyKSB7XHJcblx0XHR0aGlzLnVwbG9hZFVuaWZvcm0oY29udGV4dCk7XHJcblx0XHRpZiAoIXRoaXMuZ3JvdXBMYXlvdXQpXHJcblx0XHRcdHRoaXMuZ3JvdXBMYXlvdXQgPSB0aGlzLmNyZWF0ZUJpbmRHcm91cExheW91dChjb250ZXh0LmRldmljZSwgdGhpcy5sYWJlbCwgdGhpcy5sYXlvdXRJbmRleCk7XHJcblx0XHRpZiAoIXRoaXMuYmluZEdyb3VwKSB0aGlzLmJpbmRHcm91cCA9IHRoaXMuY3JlYXRlQmluZEdyb3VwKGNvbnRleHQuZGV2aWNlLCB0aGlzLmxhYmVsLCB0aGlzLmdyb3VwSW5kZXgpO1xyXG5cdFx0dGhpcy5iaW5kR3JvdXAuYmluZChwYXNzRW5jb2Rlcik7XHJcblx0fVxyXG5cdGRlc3Ryb3koKSB7XHJcblx0XHR0aGlzLl91bmlmb3Jtcy5mb3JFYWNoKCh1bmlmb3JtKSA9PiB7XHJcblx0XHRcdGlmICh1bmlmb3JtLmRlc3Ryb3kpIHVuaWZvcm0/LmRlc3Ryb3koKTtcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5sYWJlbCA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuY3VycmVudEJpbmRpbmcgPSAxO1xyXG5cdFx0dGhpcy5kZWZpbmVEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmRlZmluZXMgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLl91bmlmb3Jtcy5jbGVhcigpO1xyXG5cdFx0QmluZEdyb3VwTGF5b3V0LnJlbW92ZUJpbmRHcm91cExheW91dEZyb21DYWNoZSh0aGlzLmdyb3VwTGF5b3V0KTtcclxuXHRcdHRoaXMuYmluZEdyb3VwID0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZUJpbmRHcm91cChkZXZpY2U6IEdQVURldmljZSwgbGFiZWw6IHN0cmluZywgZ3JvdXBJbmRleD86IG51bWJlcikge1xyXG5cdFx0Y29uc3QgeyBlbnRpdGllcywgZHluYW1pYywgYWxpZ25lZFNpemUsIG1heE9mZnNldCB9ID0gdGhpcy5jcmVhdGVCaW5kR3JvdXBFbnRpdHkoKTtcclxuXHRcdGNvbnN0IGJpbmRHcm91cCA9IG5ldyBCaW5kR3JvdXAoe1xyXG5cdFx0XHRsYWJlbDogbGFiZWwsXHJcblx0XHRcdGVudGlyZXM6IGVudGl0aWVzLFxyXG5cdFx0XHRkZXZpY2U6IGRldmljZSxcclxuXHRcdFx0bGF5b3V0OiB0aGlzLmdyb3VwTGF5b3V0LFxyXG5cdFx0XHRpbmRleDogZ3JvdXBJbmRleCB8fCAwLCAvLyDlkI7nu63mlLnmiJBncm91cEluZGV4XHJcblx0XHRcdGR5bmFtaWMsXHJcblx0XHRcdGFsaWduZWRTaXplLFxyXG5cdFx0XHRtYXhPZmZzZXRcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIGJpbmRHcm91cDtcclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVhdGVCaW5kR3JvdXBMYXlvdXQoZGV2aWNlOiBHUFVEZXZpY2UsIGxhYmVsOiBzdHJpbmcsIGxheW91dEluZGV4PzogbnVtYmVyKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmNyZWF0ZUJpbmRHcm91cExheW91dEVudHJ5KCk7XHJcblx0XHRjb25zdCBncm91cExheW91dCA9IEJpbmRHcm91cExheW91dC5nZXRCaW5kR3JvdXBMYXlvdXRGcm9tQ2FjaGUoXHJcblx0XHRcdGRldmljZSxcclxuXHRcdFx0bGFiZWwgKyBcIi1cIiArIHJlc3VsdC51aWQsXHJcblx0XHRcdHJlc3VsdC5sYXlvdXRzLFxyXG5cdFx0XHRsYXlvdXRJbmRleCB8fCAwXHJcblx0XHQpO1xyXG5cdFx0cmV0dXJuIGdyb3VwTGF5b3V0O1xyXG5cdH1cclxuXHRwcm90ZWN0ZWQgdXBsb2FkVW5pZm9ybShjb250ZXh0OiBDb250ZXh0KSB7XHJcblx0XHR0aGlzLl91bmlmb3Jtcy5mb3JFYWNoKCh1bmlmb3JtKSA9PiB7XHJcblx0XHRcdHVuaWZvcm0uYmluZChjb250ZXh0KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZUJpbmRHcm91cExheW91dEVudHJ5KCkge1xyXG5cdFx0bGV0IHVpZCA9IFwiXCI7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XHJcblx0XHR0aGlzLl91bmlmb3Jtcy5mb3JFYWNoKCh1bmlmb3JtKSA9PiB7XHJcblx0XHRcdGlmICghcmVzdWx0Lmhhcyh1bmlmb3JtLm5hbWUpKSB7XHJcblx0XHRcdFx0dWlkID0gdWlkID09PSBcIlwiID8gdWlkLmNvbmNhdCh1bmlmb3JtLm5hbWUpIDogdWlkLmNvbmNhdChcIiwgXCIpLmNvbmNhdCh1bmlmb3JtLm5hbWUpO1xyXG5cdFx0XHRcdHJlc3VsdC5zZXQodW5pZm9ybS5uYW1lLCB0aGlzLmNyZWF0ZU9uZUxheW91dEVudHJ5KHVuaWZvcm0pKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR1aWQgPSBgdW5pZm9ybXNbJHt1aWR9XWA7XHJcblx0XHRyZXR1cm4geyB1aWQsIGxheW91dHM6IFsuLi5yZXN1bHQudmFsdWVzKCldIH07XHJcblx0fVxyXG5cdHByaXZhdGUgY3JlYXRlQmluZEdyb3VwRW50aXR5KCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xyXG5cdFx0bGV0IGR5bmFtaWMgPSBmYWxzZSxcclxuXHRcdFx0YWxpZ25lZFNpemUgPSAwLFxyXG5cdFx0XHRtYXhPZmZzZXQgPSAwO1xyXG5cdFx0dGhpcy5fdW5pZm9ybXMuZm9yRWFjaCgodW5pZm9ybSkgPT4ge1xyXG5cdFx0XHRpZiAoIXJlc3VsdC5oYXModW5pZm9ybS5uYW1lKSkge1xyXG5cdFx0XHRcdGlmICh1bmlmb3JtPy5oYXNEeW5hbWljT2Zmc2V0KSB7XHJcblx0XHRcdFx0XHRkeW5hbWljID0gdHJ1ZTtcclxuXHRcdFx0XHRcdG1heE9mZnNldCA9IHVuaWZvcm0ubWF4T2Zmc2V0O1xyXG5cdFx0XHRcdFx0YWxpZ25lZFNpemUgPSBNYXRoLmNlaWwodW5pZm9ybS51bmlmb3Jtc1NpemUgLyAoNCAqIDI1NikpICogMjU2O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXN1bHQuc2V0KHVuaWZvcm0ubmFtZSwgdGhpcy5jcmVheWVPbmVHcm91cEVudGl0eSh1bmlmb3JtKSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0ZW50aXRpZXM6IFsuLi5yZXN1bHQudmFsdWVzKCldLFxyXG5cdFx0XHRkeW5hbWljLFxyXG5cdFx0XHRhbGlnbmVkU2l6ZSxcclxuXHRcdFx0bWF4T2Zmc2V0XHJcblx0XHR9O1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZU9uZUxheW91dEVudHJ5KHVuaWZvcm0pIHtcclxuXHRcdGxldCBsYXlvdXRFbnRpdHk7XHJcblx0XHRpZiAodW5pZm9ybS5pc1VuaWZvcm1CdWZmZXIpIHtcclxuXHRcdFx0bGF5b3V0RW50aXR5ID0gbmV3IEJpbmRHcm91cExheW91dEVudHJ5KHtcclxuXHRcdFx0XHRiaW5kaW5nOiB1bmlmb3JtLmJpbmRpbmcsXHJcblx0XHRcdFx0YnVmZmVyOiB1bmlmb3JtLmxheW91dFR5cGUsXHJcblx0XHRcdFx0dmlzaWJpbGl0eTogdW5pZm9ybS52aXNpYmlsaXR5XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIGlmICh1bmlmb3JtLmlzVGV4dHVyZSkge1xyXG5cdFx0XHRsYXlvdXRFbnRpdHkgPSBuZXcgQmluZEdyb3VwTGF5b3V0RW50cnkoe1xyXG5cdFx0XHRcdGJpbmRpbmc6IHVuaWZvcm0uYmluZGluZyxcclxuXHRcdFx0XHR2aXNpYmlsaXR5OiB1bmlmb3JtLnZpc2liaWxpdHksXHJcblx0XHRcdFx0dGV4dHVyZTogdW5pZm9ybS5sYXlvdXRUeXBlXHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIGlmICh1bmlmb3JtLmlzU2FtcGxlcikge1xyXG5cdFx0XHRsYXlvdXRFbnRpdHkgPSBuZXcgQmluZEdyb3VwTGF5b3V0RW50cnkoe1xyXG5cdFx0XHRcdGJpbmRpbmc6IHVuaWZvcm0uYmluZGluZyxcclxuXHRcdFx0XHR2aXNpYmlsaXR5OiB1bmlmb3JtLnZpc2liaWxpdHksXHJcblx0XHRcdFx0c2FtcGxlcjogdW5pZm9ybS5sYXlvdXRUeXBlXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGxheW91dEVudGl0eTtcclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVheWVPbmVHcm91cEVudGl0eSh1bmlmb3JtKSB7XHJcblx0XHRsZXQgZ3JvdXBFbnRpdHk7XHJcblx0XHRpZiAodW5pZm9ybS5pc1VuaWZvcm1CdWZmZXIpIHtcclxuXHRcdFx0Z3JvdXBFbnRpdHkgPSBuZXcgQmluZEdyb3VwRW50aXR5KHtcclxuXHRcdFx0XHRiaW5kaW5nOiB1bmlmb3JtLmJpbmRpbmcsXHJcblx0XHRcdFx0cmVzb3VyY2U6IHtcclxuXHRcdFx0XHRcdGJ1ZmZlcjogdW5pZm9ybS5idWZmZXIuZ3B1QnVmZmVyLFxyXG5cdFx0XHRcdFx0b2Zmc2V0OiB1bmlmb3JtLm9mZnNldCxcclxuXHRcdFx0XHRcdHNpemU6IHVuaWZvcm0uYnVmZmVyU2l6ZVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9IGVsc2UgaWYgKHVuaWZvcm0uaXNUZXh0dXJlKSB7XHJcblx0XHRcdGdyb3VwRW50aXR5ID0gbmV3IEJpbmRHcm91cEVudGl0eSh7XHJcblx0XHRcdFx0YmluZGluZzogdW5pZm9ybS5iaW5kaW5nLFxyXG5cdFx0XHRcdHJlc291cmNlOiB1bmlmb3JtLnRleHR1cmUudGV4dHVyZVZpZXdcclxuXHRcdFx0fSk7XHJcblx0XHR9IGVsc2UgaWYgKHVuaWZvcm0uaXNTYW1wbGVyKSB7XHJcblx0XHRcdGdyb3VwRW50aXR5ID0gbmV3IEJpbmRHcm91cEVudGl0eSh7XHJcblx0XHRcdFx0YmluZGluZzogdW5pZm9ybS5iaW5kaW5nLFxyXG5cdFx0XHRcdHJlc291cmNlOiB1bmlmb3JtLnNhbXBsZXIuZ3B1U2FtcGxlclxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBncm91cEVudGl0eTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0ZyYW1lU3RhdGVcIjtcclxuaW1wb3J0IHsgQ3VsbE1vZGUsIFByaW1pdGl2ZVRvcG9sb2d5IH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IENvbG9yIGZyb20gXCIuLi9tYXRoL0NvbG9yXCI7XHJcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi4vbWVzaC9NZXNoXCI7XHJcbmltcG9ydCB7IERlcHRoU3RlbmNpbCwgUmVuZGVyU3RhdGUsIFRhcmdldCwgUHJpbWl0aXZlIH0gZnJvbSBcIi4uL3JlbmRlci9SZW5kZXJTdGF0ZVwiO1xyXG5pbXBvcnQgU2FtcGxlciBmcm9tIFwiLi4vcmVuZGVyL1NhbXBsZXJcIjtcclxuaW1wb3J0IFNoYWRlckRhdGEgZnJvbSBcIi4uL3JlbmRlci9TaGFkZXJEYXRhXCI7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5pbXBvcnQgeyBTaGFkZXJTb3VyY2UgfSBmcm9tIFwiLi4vc2hhZGVyL1NoYWRlclNvdXJjZVwiO1xyXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWwge1xyXG5cdHB1YmxpYyBzaGFkZXJEYXRhOiBTaGFkZXJEYXRhO1xyXG5cclxuXHRjb2xvcj86IENvbG9yO1xyXG5cclxuXHRiYXNlU2FtcGxlcj86IFNhbXBsZXI7XHJcblxyXG5cdGJhc2VUZXh0dXJlPzogVGV4dHVyZTtcclxuXHJcblx0dHlwZTogc3RyaW5nO1xyXG5cclxuXHRsYWJlbDogc3RyaW5nO1xyXG5cclxuXHRzaGFkZXJTb3VyY2U6IFNoYWRlclNvdXJjZTtcclxuXHJcblx0dHJhbnNwYXJlbnQ6IGJvb2xlYW47XHJcblxyXG5cdGRpcnR5OiBib29sZWFuO1xyXG5cclxuXHRsaWdodDogYm9vbGVhbjtcclxuXHJcblx0cmVhZHk6IGJvb2xlYW47XHJcblxyXG5cdHByaXZhdGUgX2VtaXNzaXZlOiBDb2xvcjtcclxuXHJcblx0cHJpdmF0ZSBfb3BhY2l0eTogbnVtYmVyO1xyXG5cclxuXHRwcml2YXRlIF9lbWlzc2l2ZUludGVuc2l0eTogbnVtYmVyO1xyXG5cclxuXHRwcml2YXRlIF9kaWZmdXNlOiBDb2xvcjtcclxuXHJcblx0cHJpdmF0ZSBfcmVuZGVyU3RhdGU6IFJlbmRlclN0YXRlO1xyXG5cclxuXHRwcml2YXRlIF9kb3VibGVTaWRlZDogYm9vbGVhbjtcclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHR0aGlzLmxhYmVsID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy50eXBlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5iYXNlVGV4dHVyZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuYmFzZVNhbXBsZXIgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLl9kaWZmdXNlID0gbmV3IENvbG9yKDAuMCwgMC4wLCAwLjApO1xyXG5cdFx0dGhpcy5fb3BhY2l0eSA9IDEuMDtcclxuXHRcdC8vIEJ1ZmZlclxyXG5cdFx0dGhpcy5zaGFkZXJEYXRhID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5zaGFkZXJTb3VyY2UgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX2VtaXNzaXZlID0gbmV3IENvbG9yKDAuMCwgMC4wLCAwKTtcclxuXHRcdHRoaXMuX2VtaXNzaXZlSW50ZW5zaXR5ID0gMS4wO1xyXG5cdFx0dGhpcy5fZG91YmxlU2lkZWQgPSB0cnVlO1xyXG5cdFx0dGhpcy5saWdodCA9IGZhbHNlO1xyXG5cdFx0dGhpcy5yZWFkeSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5pbml0KCk7XHJcblx0fVxyXG5cdHB1YmxpYyBzZXQgd2lyZWZyYW1lKHZhbHVlOiBib29sZWFuKSB7XHJcblx0XHR0aGlzLnJlbmRlclN0YXRlLnByaW1pdGl2ZS50b3BvbG9neSA9IHZhbHVlID8gUHJpbWl0aXZlVG9wb2xvZ3kuTGluZUxpc3QgOiBQcmltaXRpdmVUb3BvbG9neS5UcmlhbmdsZUxpc3Q7XHJcblx0fVxyXG5cdHB1YmxpYyBnZXQgZG91YmxlU2lkZWQoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fZG91YmxlU2lkZWQ7XHJcblx0fVxyXG5cdHB1YmxpYyBzZXQgZG91YmxlU2lkZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuXHRcdHRoaXMuX3JlbmRlclN0YXRlLnByaW1pdGl2ZS5jdWxsTW9kZSA9IHZhbHVlID8gQ3VsbE1vZGUuTm9uZSA6IEN1bGxNb2RlLkJhY2s7XHJcblx0XHR0aGlzLl9kb3VibGVTaWRlZCA9IHZhbHVlO1xyXG5cdH1cclxuXHRwdWJsaWMgZ2V0IHJlbmRlclN0YXRlKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX3JlbmRlclN0YXRlO1xyXG5cdH1cclxuXHRwdWJsaWMgc2V0IHJlbmRlclN0YXRlKHZhbHVlOiBSZW5kZXJTdGF0ZSkge1xyXG5cdFx0dGhpcy5fcmVuZGVyU3RhdGUgPSB2YWx1ZTtcclxuXHR9XHJcblx0cHVibGljIGdldCBkaWZmdXNlKCk6IENvbG9yIHtcclxuXHRcdHJldHVybiB0aGlzLl9kaWZmdXNlO1xyXG5cdH1cclxuXHRwdWJsaWMgc2V0IGRpZmZ1c2UodjogQ29sb3IpIHtcclxuXHRcdHRoaXMuX2RpZmZ1c2UgPSB2O1xyXG5cdH1cclxuXHRwdWJsaWMgZ2V0IGVtaXNzaXZlKCk6IENvbG9yIHtcclxuXHRcdHJldHVybiB0aGlzLl9lbWlzc2l2ZTtcclxuXHR9XHJcblx0cHVibGljIHNldCBlbWlzc2l2ZSh2OiBDb2xvcikge1xyXG5cdFx0dGhpcy5fZW1pc3NpdmUgPSB2O1xyXG5cdH1cclxuXHRwdWJsaWMgZ2V0IGVtaXNzaXZlSW50ZW5zaXR5KCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5fZW1pc3NpdmVJbnRlbnNpdHk7XHJcblx0fVxyXG5cdHB1YmxpYyBzZXQgZW1pc3NpdmVJbnRlbnNpdHkodjogbnVtYmVyKSB7XHJcblx0XHR0aGlzLl9lbWlzc2l2ZUludGVuc2l0eSA9IHY7XHJcblx0fVxyXG5cdHB1YmxpYyBnZXQgb3BhY2l0eSgpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuX29wYWNpdHk7XHJcblx0fVxyXG5cdHB1YmxpYyBzZXQgb3BhY2l0eSh2OiBudW1iZXIpIHtcclxuXHRcdHRoaXMuX29wYWNpdHkgPSB2O1xyXG5cdH1cclxuXHRvbkJlZm9yZVJlbmRlcigpIHtcclxuXHRcdC8vIGNhbGxiYWNrXHJcblx0fVxyXG5cclxuXHRvbkJlZm9yZUNvbXBpbGUoKSB7XHJcblx0XHQvLyBjYWxsYmFja1xyXG5cdH1cclxuXHRjbG9uZSgpOiBNYXRlcmlhbCB7XHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblx0dXBkYXRlKGZyYW1lU3RhdGU/OiBGcmFtZVN0YXRlLCBtZXNoPzogTWVzaCkge1xyXG5cdFx0Ly8gdXBkYXRlIG1hdGVyaWFsXHJcblx0fVxyXG5cdHByb3RlY3RlZCBjcmVhdGVTaGFkZXJEYXRhKCkge1xyXG5cdFx0aWYgKHRoaXMuc2hhZGVyRGF0YSkgdGhpcy5zaGFkZXJEYXRhLmRlc3Ryb3koKTtcclxuXHRcdHRoaXMuc2hhZGVyRGF0YSA9IG5ldyBTaGFkZXJEYXRhKHRoaXMudHlwZSwgMCk7XHJcblx0XHR0aGlzLnJlYWR5ID0gdHJ1ZTtcclxuXHR9XHJcblx0cHJpdmF0ZSBpbml0KCkge1xyXG5cdFx0Ly8g6buY6K6k5riy5p+T54q25oCBXHJcblx0XHRjb25zdCBwcmltaXRpdmUgPSBuZXcgUHJpbWl0aXZlKCk7XHJcblx0XHRjb25zdCB0YXJnZXQgPSBuZXcgVGFyZ2V0KCk7XHJcblx0XHRjb25zdCBkZXB0aFN0ZW5jaWwgPSBuZXcgRGVwdGhTdGVuY2lsKCk7XHJcblx0XHR0aGlzLl9yZW5kZXJTdGF0ZSA9IG5ldyBSZW5kZXJTdGF0ZSgpO1xyXG5cdFx0dGhpcy5fcmVuZGVyU3RhdGUucHJpbWl0aXZlID0gcHJpbWl0aXZlO1xyXG5cdFx0dGhpcy5fcmVuZGVyU3RhdGUudGFyZ2V0cyA9IFt0YXJnZXRdO1xyXG5cdFx0dGhpcy5fcmVuZGVyU3RhdGUuZGVwdGhTdGVuY2lsID0gZGVwdGhTdGVuY2lsO1xyXG5cdH1cclxuXHRwdWJsaWMgZGVzdHJveSgpIHtcclxuXHRcdHRoaXMubGFiZWwgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLnR5cGUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLmJhc2VUZXh0dXJlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5iYXNlU2FtcGxlciA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuY29sb3IgPSB1bmRlZmluZWQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XHJcbmltcG9ydCB7IEJ1ZmZlckJpbmRpbmdUeXBlLCBCdWZmZXJVc2FnZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCB7IFNoYWRlck1hdGVyaWFsUGFybXMsIFVuaWZvcm1zIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcclxuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XHJcbmltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XHJcbmltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xyXG5pbXBvcnQgeyBhZGRVbmlmb3JtVG9TaGFkZXJEYXRhLCBjaGVja0NvbnRhaW5GbG9hdFR5cGUgfSBmcm9tIFwiLi4vdXRpbHMvdW5pZm9ybVV0aWxzXCI7XHJcbmltcG9ydCB7IE1hdGVyaWFsIH0gZnJvbSBcIi4vTWF0ZXJpYWxcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYWRlck1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xyXG5cdHVuaWZvcm1zOiBVbmlmb3JtcztcclxuXHR1bmlmb3JtQnVmZmVyOiBVbmlmb3JtQnVmZmVyO1xyXG5cdHByaXZhdGUgc2hhZGVyTWF0ZXJpYWxQYXJtczogU2hhZGVyTWF0ZXJpYWxQYXJtcztcclxuXHRjb25zdHJ1Y3RvcihvcHRpb25zOiBTaGFkZXJNYXRlcmlhbFBhcm1zKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0Y29uc3QgeyB0eXBlLCBmcmFnLCB2ZXJ0LCBkZWZpbmVzLCBsaWdodCB9ID0gb3B0aW9ucztcclxuXHRcdHRoaXMudHlwZSA9IHR5cGU7XHJcblx0XHR0aGlzLnNoYWRlck1hdGVyaWFsUGFybXMgPSBvcHRpb25zO1xyXG5cdFx0dGhpcy5zaGFkZXJTb3VyY2UgPSBuZXcgU2hhZGVyU291cmNlKHtcclxuXHRcdFx0dHlwZSxcclxuXHRcdFx0ZnJhZyxcclxuXHRcdFx0dmVydCxcclxuXHRcdFx0Y3VzdG9tOiB0cnVlLFxyXG5cdFx0XHRkZWZpbmVzOiBkZWZhdWx0VmFsdWUoZGVmaW5lcywge30pLFxyXG5cdFx0XHRyZW5kZXI6IHRydWVcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy51bmlmb3JtcyA9IG9wdGlvbnMudW5pZm9ybXM7XHJcblx0XHR0aGlzLnVuaWZvcm1CdWZmZXIgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLmxpZ2h0ID0gbGlnaHQgfHwgZmFsc2U7XHJcblx0fVxyXG5cdHVwZGF0ZShmcmFtZVN0YXRlPzogRnJhbWVTdGF0ZSwgbWVzaD86IE1lc2gpIHtcclxuXHRcdGlmICghdGhpcy5zaGFkZXJEYXRhIHx8IHRoaXMuZGlydHkpIHRoaXMuY3JlYXRlU2hhZGVyRGF0YShtZXNoKTtcclxuXHR9XHJcblx0Y2xvbmUoKSB7XHJcblx0XHRyZXR1cm4gbmV3IFNoYWRlck1hdGVyaWFsKHRoaXMuc2hhZGVyTWF0ZXJpYWxQYXJtcyk7XHJcblx0fVxyXG5cdHByb3RlY3RlZCBjcmVhdGVTaGFkZXJEYXRhKG1lc2g/OiBNZXNoKSB7XHJcblx0XHRzdXBlci5jcmVhdGVTaGFkZXJEYXRhKCk7XHJcblx0XHRjb25zdCByZXN1bHQgPSBjaGVja0NvbnRhaW5GbG9hdFR5cGUodGhpcy51bmlmb3Jtcyk7XHJcblx0XHRpZiAocmVzdWx0Lmhhc0Zsb2F0KSB7XHJcblx0XHRcdHRoaXMudW5pZm9ybUJ1ZmZlciA9IHJlc3VsdC5oYXNBcnJheXR5cGVcclxuXHRcdFx0XHQ/IG5ldyBVbmlmb3JtQnVmZmVyKHtcclxuXHRcdFx0XHRcdFx0bGFiZWw6IHRoaXMudHlwZSArIFwiVW5pZm9ybUJ1ZmZlclwiLFxyXG5cdFx0XHRcdFx0XHR0eXBlOiBCdWZmZXJCaW5kaW5nVHlwZS5SZWFkT25seVN0b3JhZ2UsXHJcblx0XHRcdFx0XHRcdHVzYWdlOiBCdWZmZXJVc2FnZS5TdG9yYWdlIHwgQnVmZmVyVXNhZ2UuQ29weURzdFxyXG5cdFx0XHRcdCAgfSlcclxuXHRcdFx0XHQ6IG5ldyBVbmlmb3JtQnVmZmVyKHsgbGFiZWw6IHRoaXMudHlwZSArIFwiVW5pZm9ybUJ1ZmZlclwiIH0pO1xyXG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcih0aGlzLnR5cGUsIHRoaXMudW5pZm9ybUJ1ZmZlcik7XHJcblx0XHR9XHJcblx0XHRjb25zdCB1bmlmb3Jtc05hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy51bmlmb3Jtcyk7XHJcblx0XHR1bmlmb3Jtc05hbWVzLm1hcCgodW5pZm9ybXNOYW1lKSA9PiB7XHJcblx0XHRcdGFkZFVuaWZvcm1Ub1NoYWRlckRhdGEoXHJcblx0XHRcdFx0dW5pZm9ybXNOYW1lLFxyXG5cdFx0XHRcdHRoaXMudW5pZm9ybXNbdW5pZm9ybXNOYW1lXSxcclxuXHRcdFx0XHR0aGlzLnVuaWZvcm1zLFxyXG5cdFx0XHRcdHRoaXMuc2hhZGVyRGF0YSxcclxuXHRcdFx0XHRtZXNoLFxyXG5cdFx0XHRcdHRoaXMudW5pZm9ybUJ1ZmZlclxyXG5cdFx0XHQpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcbiIsImZ1bmN0aW9uIGNyZWF0ZUd1aWQoKSB7XHJcbiAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDUwMzQvaG93LXRvLWNyZWF0ZS1hLWd1aWQtdXVpZC1pbi1qYXZhc2NyaXB0XHJcbiAgcmV0dXJuIFwieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4XCIucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xyXG4gICAgY29uc3QgciA9IChNYXRoLnJhbmRvbSgpICogMTYpIHwgMDtcclxuICAgIGNvbnN0IHYgPSBjID09PSBcInhcIiA/IHIgOiAociAmIDB4MykgfCAweDg7XHJcbiAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgfSk7XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlR3VpZDtcclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vY2FtZXJhL0NhbWVyYVwiO1xuaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0ZyYW1lU3RhdGVcIjtcbmltcG9ydCBMaWdodE1hbmdlciBmcm9tIFwiLi4vY29yZS9MaWdodE1hbmdlclwiO1xuaW1wb3J0IFJlbmRlck9iamVjdCBmcm9tIFwiLi4vY29yZS9SZW5kZXJPYmplY3RcIjtcbmltcG9ydCB7IENvbW1hbmRTdWJUeXBlLCBJbnRlcnNlY3QgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xuaW1wb3J0IHsgUmVuZGVyT2JqZWN0VHlwZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5pbXBvcnQgR2VvbWV0cnkgZnJvbSBcIi4uL2dlb21ldHJ5L0dlb21ldHJ5XCI7XG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCIuLi9tYXRlcmlhbC9NYXRlcmlhbFwiO1xuaW1wb3J0IERyYXdDb21tYW5kIGZyb20gXCIuLi9yZW5kZXIvRHJhd0NvbW1hbmRcIjtcbmltcG9ydCBjcmVhdGVHdWlkIGZyb20gXCIuLi91dGlscy9jcmVhdGVHdWlkXCI7XG5leHBvcnQgY2xhc3MgTWVzaCBleHRlbmRzIFJlbmRlck9iamVjdCB7XG5cdFt4OiBzdHJpbmddOiBhbnk7XG5cdHVpZDogc3RyaW5nO1xuXHRmcnVzdHVtQ3VsbDpib29sZWFuO1xuXHRzdWJDb21tYW5kczogeyBbcHJvcDogc3RyaW5nXTogRHJhd0NvbW1hbmQgfTtcblx0Z2VvbWV0cnk/OiBHZW9tZXRyeTtcblx0bWF0ZXJpYWw/OiBNYXRlcmlhbDtcblx0aW5zdGFuY2VDb3VudD86IG51bWJlcjtcblx0cHJpb3JpdHk/OiBudW1iZXI7XG5cdGRyYXdDb21tYW5kPzogRHJhd0NvbW1hbmQ7XG5cdGRpc3RhbmNlVG9DYW1lcmE/OiBudW1iZXI7IFxuXHRjb25zdHJ1Y3RvcihnZW9tZXRyeT86IEdlb21ldHJ5LCBtYXRlcmlhbD86IE1hdGVyaWFsKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmdlb21ldHJ5ID0gZ2VvbWV0cnk7XG5cdFx0dGhpcy5tYXRlcmlhbCA9IG1hdGVyaWFsO1xuXHRcdHRoaXMudHlwZSA9IFJlbmRlck9iamVjdFR5cGUuTWVzaDtcblx0XHR0aGlzLmZydXN0dW1DdWxsPXRydWU7XG5cdFx0dGhpcy51aWQgPSBjcmVhdGVHdWlkKCk7XG5cdFx0dGhpcy5zdWJDb21tYW5kcyA9IHt9O1xuXHR9XG5cdGdldCByZWFkeSgpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXRlcmlhbC5yZWFkeTtcblx0fVxuXHR1cGRhdGUoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSwgY2FtZXJhPzogQ2FtZXJhKSB7XG5cdFx0Ly8gdXBkYXRlIG1hdHJpeFxuXHRcdHRoaXMudXBkYXRlTWF0cml4KHRoaXM/LnBhcmVudD8ubW9kZWxNYXRyaXgpO1xuXHRcdC8vIGNyZWF0ZVxuXHRcdHRoaXMuZ2VvbWV0cnkudXBkYXRlKGZyYW1lU3RhdGUpO1xuXHRcdHRoaXMubWF0ZXJpYWwudXBkYXRlKGZyYW1lU3RhdGUsIHRoaXMpO1xuXHRcdC8vIHVwZGF0ZSBib3VuZGluZ1NwaGVyZVxuXHRcdHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUudXBkYXRlKHRoaXMubW9kZWxNYXRyaXgpO1xuXHRcdHRoaXMubWF0ZXJpYWwuc2hhZGVyU291cmNlLnNldERlZmluZXMoZnJhbWVTdGF0ZS5kZWZpbmVzKTtcblx0XHRpZiAodGhpcy50eXBlID09IFJlbmRlck9iamVjdFR5cGUuRGVidWcpIHtcblx0XHRcdGZyYW1lU3RhdGUucmVuZGVyUXVldWUuZGVidWdRdWV1ZS5wdXNoKHRoaXMpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmRpc3RhbmNlVG9DYW1lcmEgPSB0aGlzLmdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlLmRpc3RhbmNlVG9DYW1lcmEoY2FtZXJhKTtcblxuXHRcdGNvbnN0IHZpc2liaWxpdHkgPSBmcmFtZVN0YXRlLmN1bGxpbmdWb2x1bWUuY29tcHV0ZVZpc2liaWxpdHkodGhpcy5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSk7XG5cdFx0Ly8g6KeG6ZSl5YmU6ZmkXG5cdFx0aWYgKHZpc2liaWxpdHkgPT09IEludGVyc2VjdC5PVVRTSURFKSByZXR1cm47XG5cdFx0aWYgKHRoaXMubWF0ZXJpYWwudHJhbnNwYXJlbnQpIHtcblx0XHRcdGZyYW1lU3RhdGUucmVuZGVyUXVldWUudHJhbnNwYXJlbnQucHVzaCh0aGlzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZnJhbWVTdGF0ZS5yZW5kZXJRdWV1ZS5vcGFxdWUucHVzaCh0aGlzKTtcblx0XHR9XG5cdH1cblx0YmVmb3JlUmVuZGVyKCkge1xuXHRcdC8vIGJlZm9yZSByZW5kZXJcblx0fVxuXHRhZnRlclJlbmRlcigpIHtcblx0XHQvLyBhZnRlciByZW5kZXJcblx0fVxuXHRwdWJsaWMgZ2V0RHJhd0NvbW1hbmQob3ZlcnJpZGVNYXRlcmlhbD86IE1hdGVyaWFsLCBjb21tYW5kU3ViVHlwZT86IENvbW1hbmRTdWJUeXBlLCBsaWdodE1hbmdlcj86IExpZ2h0TWFuZ2VyKSB7XG5cdFx0aWYgKCF0aGlzLmRyYXdDb21tYW5kIHx8IHRoaXMubWF0ZXJpYWwuZGlydHkpIHtcblx0XHRcdHRoaXMubWF0ZXJpYWwuc2hhZGVyU291cmNlLnNldERlZmluZXMoXG5cdFx0XHRcdE9iamVjdC5hc3NpZ24oe30sdGhpcy5tYXRlcmlhbC5zaGFkZXJEYXRhLmRlZmluZXMsIHRoaXMuZ2VvbWV0cnkuZGVmaW5lcylcblx0XHRcdCk7XG5cdFx0XHRpZiAodGhpcy5tYXRlcmlhbC5kaXJ0eSkgdGhpcy5tYXRlcmlhbC5kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5kcmF3Q29tbWFuZCA9IG5ldyBEcmF3Q29tbWFuZCh7XG5cdFx0XHRcdHZlcnRleEJ1ZmZlcjogdGhpcy5nZW9tZXRyeS52ZXJ0QnVmZmVyLFxuXHRcdFx0XHRpbmRleEJ1ZmZlcjogdGhpcy5nZW9tZXRyeS5pbmRleEJ1ZmZlcixcblx0XHRcdFx0c2hhZGVyRGF0YTogdGhpcy5tYXRlcmlhbC5zaGFkZXJEYXRhLFxuXHRcdFx0XHRpbnN0YW5jZXM6IHRoaXMuaW5zdGFuY2VDb3VudCxcblx0XHRcdFx0Y291bnQ6IHRoaXMuZ2VvbWV0cnkuY291bnQsXG5cdFx0XHRcdHJlbmRlclN0YXRlOiB0aGlzLm1hdGVyaWFsLnJlbmRlclN0YXRlLFxuXHRcdFx0XHRzaGFkZXJTb3VyY2U6IHRoaXMubWF0ZXJpYWwuc2hhZGVyU291cmNlLFxuXHRcdFx0XHR0eXBlOiBcInJlbmRlclwiLFxuXHRcdFx0XHRsaWdodDogdGhpcy5tYXRlcmlhbC5saWdodCxcblx0XHRcdFx0bW9kZWxNYXRyaXg6IHRoaXMubW9kZWxNYXRyaXgsXG5cdFx0XHRcdGxpZ2h0U2hhZGVyRGF0YTogdGhpcy5tYXRlcmlhbC5saWdodCA/IGxpZ2h0TWFuZ2VyPy5saWdodFNoYWRlckRhdGEgOiB1bmRlZmluZWRcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAob3ZlcnJpZGVNYXRlcmlhbCkge1xuXHRcdFx0aWYgKCF0aGlzLnN1YkNvbW1hbmRzW2NvbW1hbmRTdWJUeXBlXSkge1xuXHRcdFx0XHRjb25zdCBjb3B5TWF0ID0gb3ZlcnJpZGVNYXRlcmlhbC5jbG9uZSgpO1xuXHRcdFx0XHRjb3B5TWF0LnVwZGF0ZSh1bmRlZmluZWQsdGhpcyk7XG5cdFx0XHRcdGlmIChjb3B5TWF0LmRpcnR5KSBjb3B5TWF0LmRpcnR5ID0gZmFsc2U7XG5cdFx0XHRcdHRoaXMuc3ViQ29tbWFuZHNbY29tbWFuZFN1YlR5cGVdID0gdGhpcy5kcmF3Q29tbWFuZC5zaGFsbG93Q2xvbmUoY29weU1hdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5zdWJDb21tYW5kc1tjb21tYW5kU3ViVHlwZV07XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmRyYXdDb21tYW5kO1xuXHR9XG5cdGRlc3Ryb3koKSB7XG5cdFx0dGhpcy5nZW9tZXRyeS5kZXN0cm95KCk7XG5cdFx0dGhpcy5tYXRlcmlhbC5kZXN0cm95KCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IFJlbmRlck9iamVjdFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSBcIi4uL2dlb21ldHJ5L0dlb21ldHJ5XCI7XHJcbmltcG9ydCBQbGFuZUdlb21ldHJ5IGZyb20gXCIuLi9nZW9tZXRyeS9QbGFuZUdlb21ldHJ5XCI7XHJcbmltcG9ydCB7IExpZ2h0IH0gZnJvbSBcIi4uL2xpZ2h0L0xpZ2h0XCI7XHJcbmltcG9ydCBTaGFkZXJNYXRlcmlhbCBmcm9tIFwiLi4vbWF0ZXJpYWwvU2hhZGVyTWF0ZXJpYWxcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcclxuaW1wb3J0IHsgVmlld1BvcnQgfSBmcm9tIFwiLi4vcmVuZGVyL1JlbmRlclN0YXRlXCI7XHJcbmltcG9ydCBTYW1wbGVyIGZyb20gXCIuLi9yZW5kZXIvU2FtcGxlclwiO1xyXG5pbXBvcnQgeyBTY2VuZSB9IGZyb20gXCIuLi9TY2VuZVwiO1xyXG5pbXBvcnQgZ2V0VmVydEZyYWcgZnJvbSBcIi4uL3NoYWRlci9TaGFkZXJzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2hhZG93TWFwRGVidWdnZXIge1xyXG5cdHByaXZhdGUgbWVzaDogTWVzaDtcclxuXHRwcml2YXRlIGRlYnVnZ2VyU2l6ZTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9O1xyXG5cdHB1YmxpYyBsaWdodDogTGlnaHQ7XHJcblx0cHJpdmF0ZSBnZW9tZXRyeTogR2VvbWV0cnk7XHJcblx0cHJpdmF0ZSBtYXRlcmlhbDogU2hhZGVyTWF0ZXJpYWw7XHJcblx0cHJpdmF0ZSBzY2VuZTogU2NlbmU7XHJcblxyXG5cdGNvbnN0cnVjdG9yKGxpZ2h0OiBMaWdodCwgc2NlbmU6IFNjZW5lKSB7XHJcblx0XHRpZiAoIWxpZ2h0IHx8ICEobGlnaHQgaW5zdGFuY2VvZiBMaWdodCkpIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBMaWdodCBpbnN0YW5jZVwiKTtcclxuXHJcblx0XHR0aGlzLmxpZ2h0ID0gbGlnaHQ7XHJcblx0XHR0aGlzLnNjZW5lID0gc2NlbmU7XHJcblx0XHR0aGlzLmRlYnVnZ2VyU2l6ZSA9IHtcclxuXHRcdFx0d2lkdGg6IDI1NixcclxuXHRcdFx0aGVpZ2h0OiAyNTZcclxuXHRcdH07XHJcblxyXG5cdFx0dGhpcy5tZXNoID0gdGhpcy5fY3JlYXRlU2hhZG93TWFwTWVzaCgpO1xyXG5cdFx0Y29uc3Qgc2hhZG93TWFwID0gdGhpcy5saWdodC5zaGFkb3cuZ2V0U2hhZG93TWFwVGV4dHVyZSgpO1xyXG5cdFx0dGhpcy5tYXRlcmlhbC51bmlmb3Jtcy50ZXh0dXJlLnZhbHVlID0gc2hhZG93TWFwO1xyXG5cdFx0dGhpcy5tZXNoLnR5cGUgPSBSZW5kZXJPYmplY3RUeXBlLkRlYnVnO1xyXG5cdFx0dGhpcy5zY2VuZS5hZGQodGhpcy5tZXNoKTtcclxuXHR9XHJcblxyXG5cdF9jcmVhdGVTaGFkb3dNYXBNZXNoKCkge1xyXG5cdFx0Y29uc3Qgc2hhZGVyID0gZ2V0VmVydEZyYWcoXCJzaGFkb3dNYXBEZWJ1Z2dlclwiLCB7XHJcblx0XHRcdHBvc2l0aW9uTG9jYXRpb246IDBcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5nZW9tZXRyeSA9IG5ldyBQbGFuZUdlb21ldHJ5KDIsIDIpO1xyXG5cdFx0dGhpcy5tYXRlcmlhbCA9IG5ldyBTaGFkZXJNYXRlcmlhbCh7XHJcblx0XHRcdHR5cGU6IFwic2hhZG93TWFwRGVidWdnZXJcIixcclxuXHRcdFx0ZnJhZzogc2hhZGVyLmZyYWcsXHJcblx0XHRcdHZlcnQ6IHNoYWRlci52ZXJ0LFxyXG5cdFx0XHR1bmlmb3Jtczoge1xyXG5cdFx0XHRcdHRleHR1cmU6IHtcclxuXHRcdFx0XHRcdHR5cGU6IFwidGV4dHVyZVwiLFxyXG5cdFx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0c2FtcGxlcjoge1xyXG5cdFx0XHRcdFx0dHlwZTogXCJzYW1wbGVyXCIsXHJcblx0XHRcdFx0XHR2YWx1ZTogbmV3IFNhbXBsZXIoe1xyXG5cdFx0XHRcdFx0XHRtYWdGaWx0ZXI6IFwibGluZWFyXCIsXHJcblx0XHRcdFx0XHRcdG1pbkZpbHRlcjogXCJsaW5lYXJcIlxyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5tYXRlcmlhbC5yZW5kZXJTdGF0ZS52aWV3cG9ydCA9IG5ldyBWaWV3UG9ydCgwLCAwLCB0aGlzLmRlYnVnZ2VyU2l6ZS53aWR0aCwgdGhpcy5kZWJ1Z2dlclNpemUuaGVpZ2h0KTtcclxuXHRcdHJldHVybiBuZXcgTWVzaCh0aGlzLmdlb21ldHJ5LCB0aGlzLm1hdGVyaWFsKTtcclxuXHR9XHJcblxyXG5cdHNldFNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcclxuXHRcdGlmICghd2lkdGggfHwgIWhlaWdodCkgcmV0dXJuO1xyXG5cdFx0dGhpcy5kZWJ1Z2dlclNpemUud2lkdGggPSB3aWR0aDtcclxuXHRcdHRoaXMuZGVidWdnZXJTaXplLmhlaWdodCA9IGhlaWdodDtcclxuXHRcdHRoaXMudXBkYXRlKCk7XHJcblx0fVxyXG5cclxuXHR1cGRhdGUoKSB7XHJcblx0XHR0aGlzLm1hdGVyaWFsLnJlbmRlclN0YXRlLnZpZXdwb3J0ID0gbmV3IFZpZXdQb3J0KDAsIDAsIHRoaXMuZGVidWdnZXJTaXplLndpZHRoLCB0aGlzLmRlYnVnZ2VyU2l6ZS5oZWlnaHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcbmltcG9ydCBVbmlmb3JtQnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybUJ1ZmZlclwiO1xuaW1wb3J0IHsgVW5pZm9ybUVudW0gfSBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1zXCI7XG5pbXBvcnQgeyBTaGFkZXJTb3VyY2UgfSBmcm9tIFwiLi4vc2hhZGVyL1NoYWRlclNvdXJjZVwiO1xuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi9NYXRlcmlhbFwiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sb3JNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSBcImNvbG9yXCI7XG5cdFx0dGhpcy5zaGFkZXJTb3VyY2UgPSBuZXcgU2hhZGVyU291cmNlKHtcblx0XHRcdHR5cGU6IHRoaXMudHlwZSxcblx0XHRcdHJlbmRlcjogdHJ1ZSxcblx0XHRcdGRlZmluZXM6IHt9XG5cdFx0fSk7XG5cdH1cblx0dXBkYXRlKGZyYW1lU3RhdGU/OiBGcmFtZVN0YXRlLCBtZXNoPzogTWVzaCkge1xuXHRcdGlmICghdGhpcy5zaGFkZXJEYXRhIHx8IHRoaXMuZGlydHkpIHRoaXMuY3JlYXRlU2hhZGVyRGF0YSgpO1xuXHRcdGNvbnN0IHVuaWZvcm1CdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7IGxhYmVsOiBcImNvbG9yXCIgfSk7XG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxuXHRcdFx0XCJtb2RlbE1hdHJpeFwiLFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbWVzaC5tb2RlbE1hdHJpeDtcblx0XHRcdH0sXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0XG5cdFx0KTtcblx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcihcImNvbG9yXCIsIHVuaWZvcm1CdWZmZXIpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xyXG5pbXBvcnQgeyBSZW5kZXJPYmplY3RUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuLi9nZW9tZXRyeS9HZW9tZXRyeVwiO1xyXG5pbXBvcnQgQ29sb3JNYXRlcmlhbCBmcm9tIFwiLi4vbWF0ZXJpYWwvQ29sb3JNYXRlcmlhbFwiO1xyXG5pbXBvcnQgeyBGbG9hdDMyQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuL01lc2hcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXhlcyBleHRlbmRzIE1lc2gge1xyXG5cdG1hdGVyaWFsOiBDb2xvck1hdGVyaWFsO1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHRcdHRoaXMudHlwZSA9IFJlbmRlck9iamVjdFR5cGUuQXhlcztcclxuXHRcdHRoaXMuZGlzdGFuY2VUb0NhbWVyYSA9IDEwO1xyXG5cdFx0dGhpcy5tYXRlcmlhbCA9IG5ldyBDb2xvck1hdGVyaWFsKCk7XHJcblx0XHR0aGlzLm1hdGVyaWFsLndpcmVmcmFtZSA9IHRydWU7XHJcblx0XHR0aGlzLmluaXQoKTtcclxuXHR9XHJcblx0dXBkYXRlKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUpIHtcclxuXHRcdHRoaXMudXBkYXRlTWF0cml4KCk7XHJcblx0XHR0aGlzLm1hdGVyaWFsLnVwZGF0ZShmcmFtZVN0YXRlLCB0aGlzKTtcclxuXHRcdGZyYW1lU3RhdGUucmVuZGVyUXVldWUub3BhcXVlLnB1c2godGhpcyk7XHJcblx0fVxyXG5cdHByaXZhdGUgaW5pdCgpIHtcclxuXHRcdGNvbnN0IHBvc2l0aW9uID0gWzAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDFdO1xyXG5cdFx0Y29uc3QgY29sb3JzID0gWzEsIDAsIDAsIDEsIDEsIDAuNSwgMC41LCAxLCAwLCAxLCAwLCAxLCAwLjUsIDEsIDAuNSwgMSwgMCwgMCwgMSwgMSwgMC41LCAwLjUsIDEsIDFdO1xyXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFswLCAxLCAyLCAzLCA0LCA1XTtcclxuXHRcdHRoaXMuZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe30pO1xyXG5cdFx0dGhpcy5nZW9tZXRyeS5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJwb3NpdGlvblwiLCBwb3NpdGlvbiwgMykpO1xyXG5cdFx0dGhpcy5nZW9tZXRyeS5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJjb2xvclwiLCBjb2xvcnMsIDQpKTtcclxuXHRcdHRoaXMuZ2VvbWV0cnkuc2V0SW5kaWNlKGluZGljZXMpO1xyXG5cdFx0dGhpcy5nZW9tZXRyeS5jb3VudCA9IGluZGljZXMubGVuZ3RoO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBGbG9hdDMyQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuL0dlb21ldHJ5XCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNreUJveEdlb21ldHJ5IGV4dGVuZHMgR2VvbWV0cnkge1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoe1xyXG5cdFx0XHR0eXBlOiBcInNreUJveEdlb21ldHJ5XCJcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5pbml0KCk7XHJcblx0fVxyXG5cdHB1YmxpYyB1cGRhdGUoZnJhbWVTdGF0ZSkge1xyXG5cdFx0Y29uc3QgeyBkZXZpY2UgfSA9IGZyYW1lU3RhdGUuY29udGV4dDtcclxuXHR9XHJcblx0cHVibGljIGluaXQoKSB7XHJcblx0XHRjb25zdCBwb3NpdGlvbnMgPSBbXHJcblx0XHRcdDEuMCxcclxuXHRcdFx0MS4wLFxyXG5cdFx0XHQxLjAsIC8vIDBcclxuXHRcdFx0LTEuMCxcclxuXHRcdFx0MS4wLFxyXG5cdFx0XHQxLjAsIC8vIDFcclxuXHRcdFx0MS4wLFxyXG5cdFx0XHQtMS4wLFxyXG5cdFx0XHQxLjAsIC8vIDJcclxuXHRcdFx0LTEuMCxcclxuXHRcdFx0LTEuMCxcclxuXHRcdFx0MS4wLCAvLyAzXHJcblx0XHRcdDEuMCxcclxuXHRcdFx0MS4wLFxyXG5cdFx0XHQtMS4wLCAvLyA0XHJcblx0XHRcdC0xLjAsXHJcblx0XHRcdDEuMCxcclxuXHRcdFx0LTEuMCwgLy8gNVxyXG5cdFx0XHQxLjAsXHJcblx0XHRcdC0xLjAsXHJcblx0XHRcdC0xLjAsIC8vIDZcclxuXHRcdFx0LTEuMCxcclxuXHRcdFx0LTEuMCxcclxuXHRcdFx0LTEuMCAvLyA3XHJcblx0XHRdO1xyXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFtcclxuXHRcdFx0Ly8gUG9zWCAoUmlnaHQpXHJcblx0XHRcdDAsIDIsIDQsIDYsIDQsIDIsXHJcblxyXG5cdFx0XHQvLyBOZWdYIChMZWZ0KVxyXG5cdFx0XHQ1LCAzLCAxLCAzLCA1LCA3LFxyXG5cclxuXHRcdFx0Ly8gUG9zWSAoVG9wKVxyXG5cdFx0XHQ0LCAxLCAwLCAxLCA0LCA1LFxyXG5cclxuXHRcdFx0Ly8gTmVnWSAoQm90dG9tKVxyXG5cdFx0XHQyLCAzLCA2LCA3LCA2LCAzLFxyXG5cclxuXHRcdFx0Ly8gUG9zWiAoRnJvbnQpXHJcblx0XHRcdDAsIDEsIDIsIDMsIDIsIDEsXHJcblxyXG5cdFx0XHQvLyBOZWdaIChCYWNrKVxyXG5cdFx0XHQ2LCA1LCA0LCA1LCA2LCA3XHJcblx0XHRdO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJwb3NpdGlvblwiLCBwb3NpdGlvbnMsIDMpKTtcclxuXHRcdHRoaXMuc2V0SW5kaWNlKGluZGljZXMpO1xyXG5cdFx0dGhpcy5jb3VudCA9IGluZGljZXMubGVuZ3RoO1xyXG5cdH1cclxufVxyXG4iLCJmdW5jdGlvbiByZXR1cm5UcnVlKCkge1xyXG5cdHJldHVybiB0cnVlO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95T2JqZWN0KG9iamVjdCkge1xyXG5cdC8vIG1lc3NhZ2UgPW1lc3NhZ2V8fFwiVGhpcyBvYmplY3Qgd2FzIGRlc3Ryb3llZCwgaS5lLiwgZGVzdHJveSgpIHdhcyBjYWxsZWQuXCI7XHJcblxyXG5cdGZ1bmN0aW9uIHRocm93T25EZXN0cm95ZWQoKSB7XHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG9iamVjdCB3YXMgZGVzdHJveWVkLCBpLmUuLCBkZXN0cm95KCkgd2FzIGNhbGxlZC5cIik7XHJcblx0fVxyXG5cclxuXHRmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcclxuXHRcdGlmICh0eXBlb2Ygb2JqZWN0W2tleV0gPT09IFwiZnVuY3Rpb25cIikge1xyXG5cdFx0XHRvYmplY3Rba2V5XSA9IHRocm93T25EZXN0cm95ZWQ7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRvYmplY3QuaXNEZXN0cm95ZWQgPSByZXR1cm5UcnVlO1xyXG5cclxuXHRyZXR1cm4gdW5kZWZpbmVkO1xyXG59XHJcbiIsImltcG9ydCBTYW1wbGVyIGZyb20gXCIuLi9yZW5kZXIvU2FtcGxlclwiO1xuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XG5pbXBvcnQgZGVmaW5lZCBmcm9tIFwiLi4vdXRpbHMvZGVmaW5lZFwiO1xuaW1wb3J0IHsgZGVzdHJveU9iamVjdCB9IGZyb20gXCIuLi91dGlscy9kZXN0cm95T2JqZWN0XCI7XG50eXBlIFRleHR1cmVDYWNoZVByb3AgPSB7XG5cdHRleHR1cmU6IFRleHR1cmU7XG5cdGNvdW50OiBudW1iZXI7XG59O1xuY2xhc3MgVGV4dHVyZUNhY2hlIHtcblx0cHVibGljIGRlZmF1bHRTYW1wbGVyOiBTYW1wbGVyO1xuXHRwcml2YXRlIF9udW1iZXJPZlRleHR1cmVzOiBudW1iZXI7XG5cdHByaXZhdGUgX3RleHR1cmVzOiBNYXA8c3RyaW5nLCBUZXh0dXJlQ2FjaGVQcm9wPjtcblx0cHJpdmF0ZSBfdGV4dHVyZXNUb1JlbGVhc2U6IE1hcDxzdHJpbmcsIFRleHR1cmVDYWNoZVByb3A+O1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLl9udW1iZXJPZlRleHR1cmVzID0gMDtcblx0XHR0aGlzLl90ZXh0dXJlcyA9IG5ldyBNYXAoKTtcblx0XHR0aGlzLl9udW1iZXJPZlRleHR1cmVzID0gMDtcblx0XHR0aGlzLl90ZXh0dXJlc1RvUmVsZWFzZSA9IG5ldyBNYXAoKTtcblx0XHR0aGlzLmRlZmF1bHRTYW1wbGVyID0gbmV3IFNhbXBsZXIoe1xuXHRcdFx0bWFnRmlsdGVyOiBcImxpbmVhclwiLFxuXHRcdFx0bWluRmlsdGVyOiBcImxpbmVhclwiLFxuXHRcdFx0YWRkcmVzc01vZGVVOiBcInJlcGVhdFwiLFxuXHRcdFx0YWRkcmVzc01vZGVWOiBcInJlcGVhdFwiXG5cdFx0fSk7XG5cdH1cblx0Z2V0IG51bWJlck9mVGV4dHVyZXMoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fbnVtYmVyT2ZUZXh0dXJlcztcblx0fVxuXHRnZXRUZXh0dXJlKGtleXdvcmQpIHtcblx0XHRjb25zdCBjYWNoZWRUZXh0dXJlID0gdGhpcy5fdGV4dHVyZXMuZ2V0KGtleXdvcmQpO1xuXHRcdGlmICghZGVmaW5lZChjYWNoZWRUZXh0dXJlKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Ly8gTm8gbG9uZ2VyIHdhbnQgdG8gcmVsZWFzZSB0aGlzIGlmIGl0IHdhcyBwcmV2aW91c2x5IHJlbGVhc2VkLlxuXHRcdGRlbGV0ZSB0aGlzLl90ZXh0dXJlc1RvUmVsZWFzZVtrZXl3b3JkXTtcblxuXHRcdCsrY2FjaGVkVGV4dHVyZS5jb3VudDtcblx0XHRyZXR1cm4gY2FjaGVkVGV4dHVyZS50ZXh0dXJlO1xuXHR9XG5cdGFkZFRleHR1cmUoa2V5d29yZCwgdGV4dHVyZSkge1xuXHRcdGNvbnN0IGNhY2hlZFRleHR1cmUgPSB7XG5cdFx0XHR0ZXh0dXJlOiB0ZXh0dXJlLFxuXHRcdFx0Y291bnQ6IDFcblx0XHR9O1xuXG5cdFx0dGV4dHVyZS5maW5hbERlc3Ryb3kgPSB0ZXh0dXJlLmRlc3Ryb3k7XG5cblx0XHQvLyBjb25zdCB0aGF0ID0gdGhpcztcblx0XHR0ZXh0dXJlLmRlc3Ryb3kgPSAoKSA9PiB7XG5cdFx0XHRpZiAoLS1jYWNoZWRUZXh0dXJlLmNvdW50ID09PSAwKSB7XG5cdFx0XHRcdHRoaXMuX3RleHR1cmVzVG9SZWxlYXNlLnNldChrZXl3b3JkLCBjYWNoZWRUZXh0dXJlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dGhpcy5fdGV4dHVyZXMuc2V0KGtleXdvcmQsIGNhY2hlZFRleHR1cmUpO1xuXHRcdCsrdGhpcy5fbnVtYmVyT2ZUZXh0dXJlcztcblx0fVxuXHRyZWxlYXNlZFRleHR1cmVzKCkge1xuXHRcdHRoaXMuX3RleHR1cmVzVG9SZWxlYXNlLmZvckVhY2goKGNhY2hlVGV4dHVyZSkgPT4ge1xuXHRcdFx0Y2FjaGVUZXh0dXJlLnRleHR1cmU/LmZpbmFsRGVzdHJveSgpO1xuXHRcdFx0LS10aGlzLl9udW1iZXJPZlRleHR1cmVzO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5fdGV4dHVyZXNUb1JlbGVhc2UuY2xlYXIoKTtcblx0fVxuXHRkZXN0cm95KCkge1xuXHRcdHRoaXMuX3RleHR1cmVzLmZvckVhY2goKGNhY2hlZFRleHR1cmUpID0+IHtcblx0XHRcdGNhY2hlZFRleHR1cmUudGV4dHVyZT8uZmluYWxEZXN0cm95KCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGRlc3Ryb3lPYmplY3QodGhpcyk7XG5cdH1cbn1cbmNvbnN0IHRleHR1cmVDYWNoZSA9IG5ldyBUZXh0dXJlQ2FjaGUoKTtcbmV4cG9ydCBkZWZhdWx0IHRleHR1cmVDYWNoZTtcbiIsImltcG9ydCBTYW1wbGVyIGZyb20gXCIuLi9yZW5kZXIvU2FtcGxlclwiO1xuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIEN1YmVUZXh0dXJlTG9hZGVyKHVybHMpIHtcblx0Y29uc3QgcHJvbWlzZXMgPSB1cmxzLm1hcCgoc3JjKSA9PiB7XG5cdFx0Y29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcblx0XHRpbWcuc3JjID0gc3JjO1xuXHRcdHJldHVybiBpbWcuZGVjb2RlKCkudGhlbigoKSA9PiBjcmVhdGVJbWFnZUJpdG1hcChpbWcpKTtcblx0fSk7XG5cdGNvbnN0IGltYWdlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0YXdhaXQgUHJvbWlzZS5hbGwoaW1hZ2VzKTtcblx0Y29uc3QgYmFzZVNhbXBsZXIgPSBuZXcgU2FtcGxlcih7XG5cdFx0bWFnRmlsdGVyOiBcImxpbmVhclwiLFxuXHRcdG1pbkZpbHRlcjogXCJsaW5lYXJcIlxuXHR9KTtcblx0Y29uc3QgZGF0YSA9IGltYWdlcy5tYXAoKGltYWdlLCBpKSA9PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNvdXJjZTogaW1hZ2UsXG5cdFx0XHR3aWR0aDogaW1hZ2Uud2lkdGgsXG5cdFx0XHRoZWlnaHQ6IGltYWdlLmhlaWdodCxcblx0XHRcdGRlcHRoOiAxLFxuXHRcdFx0eDogMCxcblx0XHRcdHk6IDAsXG5cdFx0XHR6OiBpXG5cdFx0fTtcblx0fSk7XG5cdGNvbnN0IGJhc2VUZXh0dXJlID0gbmV3IFRleHR1cmUoe1xuXHRcdHNpemU6IHtcblx0XHRcdHdpZHRoOiBpbWFnZXNbMF0ud2lkdGgsXG5cdFx0XHRoZWlnaHQ6IGltYWdlc1swXS5oZWlnaHQsXG5cdFx0XHRkZXB0aDogNlxuXHRcdH0sXG5cdFx0Zm9ybWF0OiBcInJnYmE4dW5vcm1cIixcblx0XHR1c2FnZTogR1BVVGV4dHVyZVVzYWdlLlRFWFRVUkVfQklORElORyB8IEdQVVRleHR1cmVVc2FnZS5DT1BZX0RTVCB8IEdQVVRleHR1cmVVc2FnZS5SRU5ERVJfQVRUQUNITUVOVCxcblx0XHRzYW1wbGVyOiBiYXNlU2FtcGxlcixcblx0XHRkYXRhLFxuXHRcdHZpZXdGb3JtYXRzOiBcImN1YmVcIixcblx0XHRtaXBMZXZlbENvdW50OiA2LFxuXHRcdG5lZWRNaXBNYXA6IHRydWVcblx0fSk7XG5cdHJldHVybiB7XG5cdFx0dGV4dHVyZTogYmFzZVRleHR1cmUsXG5cdFx0c2FtcGxlcjogYmFzZVNhbXBsZXJcblx0fTtcbn1cbiIsImltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XHJcbmltcG9ydCB0ZXh0dXJlQ2FjaGUgZnJvbSBcIi4uL2NvcmUvVGV4dHVyZUNhY2hlXCI7XHJcbmltcG9ydCB7IENvbXBhcmVGdW5jdGlvbiB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCBDdWJlVGV4dHVyZUxvYWRlciBmcm9tIFwiLi4vbG9hZGVyL0N1YmVUZXh0dXJlTG9hZGVyXCI7XHJcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi4vbWVzaC9NZXNoXCI7XHJcbmltcG9ydCBVbmlmb3JtQnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybUJ1ZmZlclwiO1xyXG5pbXBvcnQgeyBVbmlmb3JtRW51bSB9IGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybXNcIjtcclxuaW1wb3J0IHsgU2hhZGVyU291cmNlIH0gZnJvbSBcIi4uL3NoYWRlci9TaGFkZXJTb3VyY2VcIjtcclxuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi9NYXRlcmlhbFwiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTa3lCb3hNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcclxuXHRsb2FkRmlzaDogYm9vbGVhbjtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHR0aGlzLnR5cGUgPSBcInNreWJveFwiO1xyXG5cdFx0dGhpcy5zaGFkZXJTb3VyY2UgPSBuZXcgU2hhZGVyU291cmNlKHtcclxuXHRcdFx0dHlwZTogdGhpcy50eXBlLFxyXG5cdFx0XHRyZW5kZXI6IHRydWUsXHJcblx0XHRcdGRlZmluZXM6IHt9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMubG9hZEZpc2ggPSBmYWxzZTtcclxuXHRcdHRoaXMucmVuZGVyU3RhdGUuZGVwdGhTdGVuY2lsLmRlcHRoV3JpdGVFbmFibGVkID0gZmFsc2U7XHJcblx0XHR0aGlzLnJlbmRlclN0YXRlLmRlcHRoU3RlbmNpbC5kZXB0aENvbXBhcmUgPSBDb21wYXJlRnVuY3Rpb24uTGVzc0VxdWFsO1xyXG5cdH1cclxuXHRhc3luYyBsb2FkVGV4dHVyZSh1cmxzKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCBDdWJlVGV4dHVyZUxvYWRlcih1cmxzKTtcclxuXHRcdHRoaXMubG9hZEZpc2ggPSB0cnVlO1xyXG5cdFx0dGV4dHVyZUNhY2hlLmFkZFRleHR1cmUoXCJzcGVjdWxhclwiLCByZXN1bHQudGV4dHVyZSk7XHJcblx0XHR0aGlzLmJhc2VUZXh0dXJlID0gcmVzdWx0LnRleHR1cmU7XHJcblx0XHR0aGlzLmJhc2VTYW1wbGVyID0gcmVzdWx0LnNhbXBsZXI7XHJcblx0fVxyXG5cdHVwZGF0ZShmcmFtZVN0YXRlPzogRnJhbWVTdGF0ZSwgbWVzaD86IE1lc2gpIHtcclxuXHRcdGlmICghdGhpcy5sb2FkRmlzaCkgcmV0dXJuO1xyXG5cdFx0aWYgKCF0aGlzLnNoYWRlckRhdGEpIHtcclxuXHRcdFx0dGhpcy5jcmVhdGVTaGFkZXJEYXRhKG1lc2gpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRwcm90ZWN0ZWQgY3JlYXRlU2hhZGVyRGF0YShtZXNoPzogTWVzaCkge1xyXG5cdFx0c3VwZXIuY3JlYXRlU2hhZGVyRGF0YSgpO1xyXG5cdFx0Y29uc3QgdW5pZm9ybUJ1ZmZlciA9IG5ldyBVbmlmb3JtQnVmZmVyKHsgbGFiZWw6IFwic2t5Ym94XCIgfSk7XHJcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFwibW9kZWxNYXRyaXhcIixcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBtZXNoLm1vZGVsTWF0cml4O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0XHJcblx0XHQpO1xyXG5cdFx0dGhpcy5zaGFkZXJEYXRhLnNldFVuaWZvcm1CdWZmZXIoXCJza3lib3hcIiwgdW5pZm9ybUJ1ZmZlcik7XHJcblx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VGV4dHVyZShcImJhc2VUZXh0dXJlXCIsIHRoaXMuYmFzZVRleHR1cmUpO1xyXG5cdFx0dGhpcy5zaGFkZXJEYXRhLnNldFNhbXBsZXIoXCJiYXNlU2FtcGxlclwiLCB0aGlzLmJhc2VTYW1wbGVyKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0ZyYW1lU3RhdGVcIjtcclxuaW1wb3J0IHsgUmVuZGVyT2JqZWN0VHlwZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBTa3lCb3hHZW9tZXRyeSBmcm9tIFwiLi4vZ2VvbWV0cnkvU2t5Qm94R2VvbWV0cnlcIjtcclxuaW1wb3J0IFNreUJveE1hdGVyaWFsIGZyb20gXCIuLi9tYXRlcmlhbC9Ta3lCb3hNYXRlcmlhbFwiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4vTWVzaFwiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTa3lCb3ggZXh0ZW5kcyBNZXNoIHtcclxuXHRtYXRlcmlhbDogU2t5Qm94TWF0ZXJpYWw7XHJcblx0cHVibGljIHZpc2liaWxpdHk6IGJvb2xlYW47XHJcblx0Y29uc3RydWN0b3IodXJscz86IEFycmF5PHN0cmluZz4pIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHR0aGlzLnR5cGUgPSBSZW5kZXJPYmplY3RUeXBlLlNreWJveDtcclxuXHRcdHRoaXMudmlzaWJpbGl0eSA9IHRydWU7XHJcblx0XHR0aGlzLm1hdGVyaWFsID0gbmV3IFNreUJveE1hdGVyaWFsKCk7XHJcblx0XHRpZiAodXJscykgdGhpcy5tYXRlcmlhbC5sb2FkVGV4dHVyZSh1cmxzKTtcclxuXHRcdHRoaXMuZ2VvbWV0cnkgPSBuZXcgU2t5Qm94R2VvbWV0cnkoKTtcclxuXHRcdHRoaXMuaXNTa3lCb3ggPSB0cnVlO1xyXG5cdH1cclxuXHR1cGRhdGUoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSkge1xyXG5cdFx0dGhpcy51cGRhdGVNYXRyaXgoKTtcclxuXHRcdHRoaXMuZ2VvbWV0cnkudXBkYXRlKGZyYW1lU3RhdGUpO1xyXG5cdFx0dGhpcy5tYXRlcmlhbC51cGRhdGUoZnJhbWVTdGF0ZSwgdGhpcyk7XHJcblx0XHRpZiAodGhpcy52aXNpYmlsaXR5KSBmcmFtZVN0YXRlLnJlbmRlclF1ZXVlLnByZS5wdXNoKHRoaXMpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgUmVuZGVyT2JqZWN0IGZyb20gXCIuLi9jb3JlL1JlbmRlck9iamVjdFwiO1xuaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4uL21hdGgvTWF0cml4NFwiO1xuaW1wb3J0IGNyZWF0ZUd1aWQgZnJvbSBcIi4uL3V0aWxzL2NyZWF0ZUd1aWRcIjtcblxuZXhwb3J0IGNsYXNzIEluc3RhbmNlIGV4dGVuZHMgUmVuZGVyT2JqZWN0IHtcblx0cHVibGljIGlkOiBzdHJpbmcgfCBudW1iZXI7XG5cdHB1YmxpYyB2aXNpYmxpdHk6IGJvb2xlYW47XG5cdHByaXZhdGUgX25vdFVwZGF0ZU1hdHJpeDogYm9vbGVhbjtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl9ub3RVcGRhdGVNYXRyaXggPSBmYWxzZTtcblx0XHR0aGlzLnZpc2libGl0eSA9IGZhbHNlO1xuXHRcdHRoaXMuaWQgPSBjcmVhdGVHdWlkKCk7XG5cdH1cblx0c2V0TWF0cml4NChtYXQ0OiBNYXRyaXg0KSB7XG5cdFx0dGhpcy5tb2RlbE1hdHJpeC5zZXQobWF0NCk7XG5cdFx0dGhpcy5fbm90VXBkYXRlTWF0cml4ID0gdHJ1ZTtcblx0fVxuXHR1cGRhdGVNYXRyaXgobWF0cml4PzogTWF0cml4NCkge1xuXHRcdGlmICh0aGlzLl9ub3RVcGRhdGVNYXRyaXgpIHJldHVybjtcblx0XHRzdXBlci51cGRhdGVNYXRyaXgobWF0cml4KTtcblx0fVxufVxuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vY2FtZXJhL0NhbWVyYVwiO1xuaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0ZyYW1lU3RhdGVcIjtcbmltcG9ydCB7IEJ1ZmZlckJpbmRpbmdUeXBlLCBCdWZmZXJVc2FnZSwgSW50ZXJzZWN0IH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcbmltcG9ydCBHZW9tZXRyeSBmcm9tIFwiLi4vZ2VvbWV0cnkvR2VvbWV0cnlcIjtcbmltcG9ydCB7IE1hdGVyaWFsIH0gZnJvbSBcIi4uL21hdGVyaWFsL01hdGVyaWFsXCI7XG5pbXBvcnQgVW5pZm9ybUJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1CdWZmZXJcIjtcbmltcG9ydCB7IFVuaWZvcm1FbnVtIH0gZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3Jtc1wiO1xuaW1wb3J0IHsgSW5zdGFuY2UgfSBmcm9tIFwiLi9JbnN0YW5jZVwiO1xuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuL01lc2hcIjtcblxuZXhwb3J0IGNsYXNzIEluc3RhbmNlTWVzaCBleHRlbmRzIE1lc2gge1xuXHRwcml2YXRlIGluc3RhbmNlczogTWFwPHN0cmluZyB8IG51bWJlciwgSW5zdGFuY2U+O1xuXHRwcml2YXRlIHJlbmRlckluc3RhbmNlczogQXJyYXk8SW5zdGFuY2U+O1xuXHRwcml2YXRlIGhhc0FkZEluc3RhbmNlczogYm9vbGVhbjsgXG5cdGNvbnN0cnVjdG9yKGdlbzogR2VvbWV0cnksIG1hdDogTWF0ZXJpYWwpIHtcblx0XHRzdXBlcihnZW8sIG1hdCk7XG5cdFx0dGhpcy5pbnN0YW5jZXMgPSBuZXcgTWFwKCk7XG5cdFx0dGhpcy5yZW5kZXJJbnN0YW5jZXMgPSBbXTtcblx0XHR0aGlzLmhhc0FkZEluc3RhbmNlcyA9IGZhbHNlO1xuXHR9XG5cdHVwZGF0ZShmcmFtZVN0YXRlOiBGcmFtZVN0YXRlLCBjYW1lcmE/OiBDYW1lcmEpIHtcblx0XHQvLyB1cGRhdGUgaW5zdGFuY2VzIHZpc2libGl0eVxuXHRcdHRoaXMuY2hlY2tJbnN0YW5jZXNWaXNpYmxpdHkoeyBmcmFtZVN0YXRlLCBjYW1lcmEgfSk7XG5cdFx0dGhpcy5nZW9tZXRyeS51cGRhdGUoZnJhbWVTdGF0ZSk7XG5cdFx0dGhpcy5tYXRlcmlhbC51cGRhdGUoZnJhbWVTdGF0ZSwgdGhpcyk7XG5cdFx0aWYgKCF0aGlzLmhhc0FkZEluc3RhbmNlcykgdGhpcy5hZGRVbmlmb3Jtc1RvTWF0ZXJpYWwoKTtcblx0XHR0aGlzLmluc3RhbmNlQ291bnQgPSB0aGlzLnJlbmRlckluc3RhbmNlcy5sZW5ndGg7XG5cdFx0aWYgKHRoaXMucmVuZGVySW5zdGFuY2VzLmxlbmd0aCA8IDEpIHJldHVybjtcblx0XHRpZiAodGhpcy5tYXRlcmlhbC50cmFuc3BhcmVudCkge1xuXHRcdFx0ZnJhbWVTdGF0ZS5yZW5kZXJRdWV1ZS50cmFuc3BhcmVudC5wdXNoKHRoaXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmcmFtZVN0YXRlLnJlbmRlclF1ZXVlLm9wYXF1ZS5wdXNoKHRoaXMpO1xuXHRcdH1cblx0fVxuXHRhZGRJbnN0YW5jZShpbnN0YW5jZTogSW5zdGFuY2UpIHtcblx0XHRpZiAodGhpcy5pbnN0YW5jZXMuZ2V0KGluc3RhbmNlLmlkKSkgcmV0dXJuO1xuXHRcdHRoaXMuaW5zdGFuY2VzLnNldChpbnN0YW5jZS5pZCwgaW5zdGFuY2UpO1xuXHR9XG5cdHJlbW92ZUluc3RhbmNlKGtleTogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW5zdGFuY2VzLmRlbGV0ZShrZXkpO1xuXHR9XG5cdGdldEluc3RhbmNlKGtleTogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW5zdGFuY2VzLmdldChrZXkpO1xuXHR9XG5cdHByaXZhdGUgY2hlY2tJbnN0YW5jZXNWaXNpYmxpdHkob3B0aW9uczogeyBmcmFtZVN0YXRlOiBGcmFtZVN0YXRlOyBjYW1lcmE6IENhbWVyYSB9KSB7XG5cdFx0Y29uc3QgeyBmcmFtZVN0YXRlLCBjYW1lcmEgfSA9IG9wdGlvbnM7XG5cdFx0Y29uc3QgcHJlRnJhbWVJbnN0YW5jZUNvdW50PXRoaXMucmVuZGVySW5zdGFuY2VzLmxlbmd0aDtcblx0XHR0aGlzLnJlbmRlckluc3RhbmNlcz1bXTtcblx0XHR0aGlzLmluc3RhbmNlcy5mb3JFYWNoKChpbnN0YW5jZTogSW5zdGFuY2UpID0+IHtcblx0XHRcdGluc3RhbmNlLnVwZGF0ZU1hdHJpeCh0aGlzPy5wYXJlbnQ/Lm1vZGVsTWF0cml4KTtcblx0XHRcdGluc3RhbmNlLnZpc2libGl0eSA9IHRoaXMuZ2V0SW5zdGFuY2VWaXNpYmxpdHkoeyBpbnN0YW5jZSwgZnJhbWVTdGF0ZSwgY2FtZXJhIH0pO1xuXHRcdFx0aWYgKGluc3RhbmNlLnZpc2libGl0eSkgdGhpcy5yZW5kZXJJbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7XG5cdFx0fSk7XG5cdFx0dGhpcy5tYXRlcmlhbC5kaXJ0eT10aGlzLnJlbmRlckluc3RhbmNlcy5sZW5ndGg9PT1wcmVGcmFtZUluc3RhbmNlQ291bnQ7XG5cdFx0Ly8gcmVidWlsZCBpbnN0YW5jZU1hdHJpeHNCdWZmZXJcblx0XHRpZih0aGlzLm1hdGVyaWFsLmRpcnR5KSB0aGlzLmhhc0FkZEluc3RhbmNlcz1mYWxzZTtcblx0fVxuXHRwcml2YXRlIGdldEluc3RhbmNlVmlzaWJsaXR5KG9wdGlvbnM6IHsgaW5zdGFuY2U6IEluc3RhbmNlOyBmcmFtZVN0YXRlOiBGcmFtZVN0YXRlOyBjYW1lcmE6IENhbWVyYSB9KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgeyBpbnN0YW5jZSwgZnJhbWVTdGF0ZSwgY2FtZXJhIH0gPSBvcHRpb25zO1xuXHRcdHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUudXBkYXRlKGluc3RhbmNlLm1vZGVsTWF0cml4KTtcblx0XHR0aGlzLmRpc3RhbmNlVG9DYW1lcmEgPSB0aGlzLmdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlLmRpc3RhbmNlVG9DYW1lcmEoY2FtZXJhKTtcblx0XHRjb25zdCB2aXNpYmlsaXR5ID0gZnJhbWVTdGF0ZS5jdWxsaW5nVm9sdW1lLmNvbXB1dGVWaXNpYmlsaXR5KHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUpO1xuXHRcdHJldHVybiB2aXNpYmlsaXR5ID09PSBJbnRlcnNlY3QuSU5URVJTRUNUSU5HIHx8IHZpc2liaWxpdHkgPT09IEludGVyc2VjdC5JTlNJREU7XG5cdH1cblx0cHJpdmF0ZSBhZGRVbmlmb3Jtc1RvTWF0ZXJpYWwoKSB7XG5cdFx0aWYgKCF0aGlzLm1hdGVyaWFsLnNoYWRlckRhdGEpIHJldHVybjtcblx0XHR0aGlzLmhhc0FkZEluc3RhbmNlcyA9IHRydWU7XG5cdFx0Y29uc3QgaW5zdGFuY2VNYXRyaXhzQnVmZmVyID0gbmV3IFVuaWZvcm1CdWZmZXIoe1xuXHRcdFx0bGFiZWw6IFwiaW5zdGFuY2VNYXRyaXhzQnVmZmVyXCIsXG5cdFx0XHR0eXBlOiBCdWZmZXJCaW5kaW5nVHlwZS5SZWFkT25seVN0b3JhZ2UsXG5cdFx0XHR1c2FnZTogQnVmZmVyVXNhZ2UuU3RvcmFnZSB8IEJ1ZmZlclVzYWdlLkNvcHlEc3QsXG5cdFx0XHRzaXplOiB0aGlzLmluc3RhbmNlcy5zaXplICogNjRcblx0XHR9KTtcblx0XHRpbnN0YW5jZU1hdHJpeHNCdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFwiaW5zdGFuY2VNYXRyaXhzXCIsXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzPy5yZW5kZXJJbnN0YW5jZXM/Lm1hcCgocmVuZGVySW5zdGFuY2U6IEluc3RhbmNlKSA9PiByZW5kZXJJbnN0YW5jZS5tb2RlbE1hdHJpeCk7XG5cdFx0XHR9LFxuXHRcdFx0VW5pZm9ybUVudW0uTWF0NEFycmF5LFxuXHRcdFx0dGhpcz8ucmVuZGVySW5zdGFuY2VzPy5sZW5ndGhcblx0XHQpO1xuXHRcdHRoaXMubWF0ZXJpYWwuc2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwiaW5zdGFuY2VNYXRyaXhzQnVmZmVyXCIsIGluc3RhbmNlTWF0cml4c0J1ZmZlcik7XG5cdFx0dGhpcy5tYXRlcmlhbC5zaGFkZXJEYXRhLnNldERlZmluZShcIlVTRV9JTlNUQU5DRVwiLCB0cnVlKTtcblx0XHR0aGlzLm1hdGVyaWFsLnNoYWRlckRhdGEuc2V0RGVmaW5lKFwiaW5zdGFuY2VDb3VudFwiLCB0aGlzPy5yZW5kZXJJbnN0YW5jZXM/Lmxlbmd0aCk7XG5cdH1cbn1cbiIsIi8qKlxyXG4gKiBFbnN1cmUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBwcmltaXRpdmUgZnVuY3Rpb25zIGlzIGFuIG9iamVjdFxyXG4gKiBAcGFyYW0gey4uLip9IGFyZ3NcclxuICovXHJcbmZ1bmN0aW9uIGNoZWNrQXJndW1lbnRzKGFyZ3MpIHtcclxuXHRjb25zdCBhcmd1bWVudFR5cGUgPSB0eXBlb2YgYXJnc1swXTtcclxuXHRpZiAoYXJndW1lbnRUeXBlICE9PSBcIm9iamVjdFwiICYmIGFyZ3VtZW50VHlwZSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG5cdFx0Y29uc29sZS5lcnJvcihcIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LlwiKTtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxubGV0IFRZUEVEX0FSUkFZX1RZUEU7XHJcblxyXG4vKipcclxuICogU2VsZWN0IGNlbGxzIHR5cGVkIGFycmF5IGZyb20gYSBzaXplIGRldGVybWluZWQgYnkgYW1vdW50IG9mIHZlcnRpY2VzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gc2l6ZSBUaGUgbWF4IHZhbHVlIGV4cGVjdGVkXHJcbiAqIEByZXR1cm5zIHsoVWludDhBcnJheXxVaW50MTZBcnJheXxVaW50MzJBcnJheSl9XHJcbiAqIEBzZWUgW01ETiBUeXBlZEFycmF5IG9iamVjdHNde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1R5cGVkQXJyYXkjdHlwZWRhcnJheV9vYmplY3RzfVxyXG4gKi9cclxuY29uc3QgZ2V0Q2VsbHNUeXBlZEFycmF5ID0gKHNpemUpID0+XHJcblx0VFlQRURfQVJSQVlfVFlQRSB8fCAoc2l6ZSA8PSAyNTUgPyBVaW50OEFycmF5IDogc2l6ZSA8PSA2NTUzNSA/IFVpbnQxNkFycmF5IDogVWludDMyQXJyYXkpO1xyXG5cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5jb25zdCBQTEFORV9ESVJFQ1RJT05TID0ge1xyXG5cdHo6IFswLCAxLCAyLCAxLCAtMSwgMV0sXHJcblx0XCItelwiOiBbMCwgMSwgMiwgLTEsIC0xLCAtMV0sXHJcblx0XCIteFwiOiBbMiwgMSwgMCwgMSwgLTEsIC0xXSxcclxuXHR4OiBbMiwgMSwgMCwgLTEsIC0xLCAxXSxcclxuXHR5OiBbMCwgMiwgMSwgMSwgMSwgMV0sXHJcblx0XCIteVwiOiBbMCwgMiwgMSwgMSwgLTEsIC0xXVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiBjb21wdXRlUGxhbmUoXHJcblx0Z2VvbWV0cnksXHJcblx0aW5kaWNlcyxcclxuXHRzdSxcclxuXHRzdixcclxuXHRudSxcclxuXHRudixcclxuXHRkaXJlY3Rpb24gPSBcInpcIixcclxuXHRwdyA9IDAsXHJcblx0cXVhZHMgPSBmYWxzZSxcclxuXHR1dlNjYWxlID0gWzEsIDFdLFxyXG5cdHV2T2Zmc2V0ID0gWzAsIDBdLFxyXG5cdGNlbnRlciA9IFswLCAwLCAwXSxcclxuXHRjY3cgPSB0cnVlXHJcbikge1xyXG5cdGNvbnN0IHsgcG9zaXRpb25zLCBub3JtYWxzLCB1dnMsIGNlbGxzIH0gPSBnZW9tZXRyeTtcclxuXHRjb25zdCBbdSwgdiwgdywgZmxpcFUsIGZsaXBWLCBub3JtYWxdID0gUExBTkVfRElSRUNUSU9OU1tkaXJlY3Rpb25dO1xyXG5cclxuXHRjb25zdCB2ZXJ0ZXhPZmZzZXQgPSBpbmRpY2VzLnZlcnRleDtcclxuXHJcblx0Zm9yIChsZXQgaiA9IDA7IGogPD0gbnY7IGorKykge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPD0gbnU7IGkrKykge1xyXG5cdFx0XHRwb3NpdGlvbnNbaW5kaWNlcy52ZXJ0ZXggKiAzICsgdV0gPSAoLXN1IC8gMiArIChpICogc3UpIC8gbnUpICogZmxpcFUgKyBjZW50ZXJbdV07XHJcblx0XHRcdHBvc2l0aW9uc1tpbmRpY2VzLnZlcnRleCAqIDMgKyB2XSA9ICgtc3YgLyAyICsgKGogKiBzdikgLyBudikgKiBmbGlwViArIGNlbnRlclt2XTtcclxuXHRcdFx0cG9zaXRpb25zW2luZGljZXMudmVydGV4ICogMyArIHddID0gcHcgKyBjZW50ZXJbd107XHJcblxyXG5cdFx0XHRub3JtYWxzW2luZGljZXMudmVydGV4ICogMyArIHddID0gbm9ybWFsO1xyXG5cclxuXHRcdFx0dXZzW2luZGljZXMudmVydGV4ICogMl0gPSAoaSAvIG51KSAqIHV2U2NhbGVbMF0gKyB1dk9mZnNldFswXTtcclxuXHRcdFx0dXZzW2luZGljZXMudmVydGV4ICogMiArIDFdID0gKDEgLSBqIC8gbnYpICogdXZTY2FsZVsxXSArIHV2T2Zmc2V0WzFdO1xyXG5cclxuXHRcdFx0aW5kaWNlcy52ZXJ0ZXgrKztcclxuXHJcblx0XHRcdGlmIChqIDwgbnYgJiYgaSA8IG51KSB7XHJcblx0XHRcdFx0Y29uc3QgbiA9IHZlcnRleE9mZnNldCArIGogKiAobnUgKyAxKSArIGk7XHJcblx0XHRcdFx0aWYgKHF1YWRzKSB7XHJcblx0XHRcdFx0XHRjb25zdCBvID0gdmVydGV4T2Zmc2V0ICsgKGogKyAxKSAqIChudSArIDEpICsgaTtcclxuXHRcdFx0XHRcdGNlbGxzW2luZGljZXMuY2VsbF0gPSBuO1xyXG5cdFx0XHRcdFx0Y2VsbHNbaW5kaWNlcy5jZWxsICsgMV0gPSBvO1xyXG5cdFx0XHRcdFx0Y2VsbHNbaW5kaWNlcy5jZWxsICsgMl0gPSBvICsgMTtcclxuXHRcdFx0XHRcdGNlbGxzW2luZGljZXMuY2VsbCArIDNdID0gbiArIDE7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGNlbGxzW2luZGljZXMuY2VsbF0gPSBuO1xyXG5cdFx0XHRcdFx0Y2VsbHNbaW5kaWNlcy5jZWxsICsgKGNjdyA/IDEgOiAyKV0gPSBuICsgbnUgKyAxO1xyXG5cdFx0XHRcdFx0Y2VsbHNbaW5kaWNlcy5jZWxsICsgKGNjdyA/IDIgOiAxKV0gPSBuICsgbnUgKyAyO1xyXG5cclxuXHRcdFx0XHRcdGNlbGxzW2luZGljZXMuY2VsbCArIDNdID0gbjtcclxuXHRcdFx0XHRcdGNlbGxzW2luZGljZXMuY2VsbCArIChjY3cgPyA0IDogNSldID0gbiArIG51ICsgMjtcclxuXHRcdFx0XHRcdGNlbGxzW2luZGljZXMuY2VsbCArIChjY3cgPyA1IDogNCldID0gbiArIDE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGluZGljZXMuY2VsbCArPSBxdWFkcyA/IDQgOiA2O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZ2VvbWV0cnk7XHJcbn1cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEN1YmVPcHRpb25zXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbc3g9MV1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtzeT1zeF1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtzej1zeF1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtueD0xXVxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW255PW54XVxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW256PW54XVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1YmUoeyBzeCA9IDEsIHN5ID0gMSwgc3ogPSAxLCBueCA9IDEsIG55ID0gMSwgbnogPSAxIH0gPSB7fSkge1xyXG5cdGNoZWNrQXJndW1lbnRzKGFyZ3VtZW50cyk7XHJcblxyXG5cdGNvbnN0IHNpemUgPSAobnggKyAxKSAqIChueSArIDEpICogMiArIChueCArIDEpICogKG56ICsgMSkgKiAyICsgKG56ICsgMSkgKiAobnkgKyAxKSAqIDI7XHJcblxyXG5cdGNvbnN0IGdlb21ldHJ5ID0ge1xyXG5cdFx0cG9zaXRpb25zOiBuZXcgRmxvYXQzMkFycmF5KHNpemUgKiAzKSxcclxuXHRcdG5vcm1hbHM6IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSAqIDMpLFxyXG5cdFx0dXZzOiBuZXcgRmxvYXQzMkFycmF5KHNpemUgKiAyKSxcclxuXHRcdGNlbGxzOiBuZXcgKGdldENlbGxzVHlwZWRBcnJheShzaXplKSkoKG54ICogbnkgKiAyICsgbnggKiBueiAqIDIgKyBueiAqIG55ICogMikgKiA2KVxyXG5cdH07XHJcblxyXG5cdGNvbnN0IGhhbGZTWCA9IHN4ICogMC41O1xyXG5cdGNvbnN0IGhhbGZTWSA9IHN5ICogMC41O1xyXG5cdGNvbnN0IGhhbGZTWiA9IHN6ICogMC41O1xyXG5cclxuXHRjb25zdCBpbmRpY2VzID0geyB2ZXJ0ZXg6IDAsIGNlbGw6IDAgfTtcclxuXHJcblx0Y29tcHV0ZVBsYW5lKGdlb21ldHJ5LCBpbmRpY2VzLCBzeCwgc3ksIG54LCBueSwgXCJ6XCIsIGhhbGZTWik7XHJcblx0Y29tcHV0ZVBsYW5lKGdlb21ldHJ5LCBpbmRpY2VzLCBzeCwgc3ksIG54LCBueSwgXCItelwiLCAtaGFsZlNaKTtcclxuXHRjb21wdXRlUGxhbmUoZ2VvbWV0cnksIGluZGljZXMsIHN6LCBzeSwgbnosIG55LCBcIi14XCIsIC1oYWxmU1gpO1xyXG5cdGNvbXB1dGVQbGFuZShnZW9tZXRyeSwgaW5kaWNlcywgc3osIHN5LCBueiwgbnksIFwieFwiLCBoYWxmU1gpO1xyXG5cdGNvbXB1dGVQbGFuZShnZW9tZXRyeSwgaW5kaWNlcywgc3gsIHN6LCBueCwgbnosIFwieVwiLCBoYWxmU1kpO1xyXG5cdGNvbXB1dGVQbGFuZShnZW9tZXRyeSwgaW5kaWNlcywgc3gsIHN6LCBueCwgbnosIFwiLXlcIiwgLWhhbGZTWSk7XHJcblxyXG5cdHJldHVybiBnZW9tZXRyeTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJveChvcHRpb25zKSB7XHJcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG5cdGNvbnN0IGRpbWVuc2lvbnMgPSBvcHRpb25zLmRpbWVuc2lvbnMgfHwgWzEsIDEsIDFdO1xyXG5cdGNvbnN0IHBvc2l0aW9uID0gb3B0aW9ucy5wb3NpdGlvbiB8fCBbLWRpbWVuc2lvbnNbMF0gLyAyLCAtZGltZW5zaW9uc1sxXSAvIDIsIC1kaW1lbnNpb25zWzJdIC8gMl07XHJcblx0Y29uc3QgeCA9IHBvc2l0aW9uWzBdO1xyXG5cdGNvbnN0IHkgPSBwb3NpdGlvblsxXTtcclxuXHRjb25zdCB6ID0gcG9zaXRpb25bMl07XHJcblx0Y29uc3Qgd2lkdGggPSBkaW1lbnNpb25zWzBdO1xyXG5cdGNvbnN0IGhlaWdodCA9IGRpbWVuc2lvbnNbMV07XHJcblx0Y29uc3QgZGVwdGggPSBkaW1lbnNpb25zWzJdO1xyXG5cclxuXHRjb25zdCBmYmwgPSB7IHg6IHgsIHk6IHksIHo6IHogKyBkZXB0aCB9O1xyXG5cdGNvbnN0IGZiciA9IHsgeDogeCArIHdpZHRoLCB5OiB5LCB6OiB6ICsgZGVwdGggfTtcclxuXHRjb25zdCBmdGwgPSB7IHg6IHgsIHk6IHkgKyBoZWlnaHQsIHo6IHogKyBkZXB0aCB9O1xyXG5cdGNvbnN0IGZ0ciA9IHsgeDogeCArIHdpZHRoLCB5OiB5ICsgaGVpZ2h0LCB6OiB6ICsgZGVwdGggfTtcclxuXHRjb25zdCBiYmwgPSB7IHg6IHgsIHk6IHksIHo6IHogfTtcclxuXHRjb25zdCBiYnIgPSB7IHg6IHggKyB3aWR0aCwgeTogeSwgejogeiB9O1xyXG5cdGNvbnN0IGJ0bCA9IHsgeDogeCwgeTogeSArIGhlaWdodCwgejogeiB9O1xyXG5cdGNvbnN0IGJ0ciA9IHsgeDogeCArIHdpZHRoLCB5OiB5ICsgaGVpZ2h0LCB6OiB6IH07XHJcblxyXG5cdGNvbnN0IHBvc2l0aW9ucyA9IFtcclxuXHRcdC8vIGZyb250XHJcblx0XHRmYmwueCxcclxuXHRcdGZibC55LFxyXG5cdFx0ZmJsLnosXHJcblx0XHRmYnIueCxcclxuXHRcdGZici55LFxyXG5cdFx0ZmJyLnosXHJcblx0XHRmdGwueCxcclxuXHRcdGZ0bC55LFxyXG5cdFx0ZnRsLnosXHJcblx0XHRmdGwueCxcclxuXHRcdGZ0bC55LFxyXG5cdFx0ZnRsLnosXHJcblx0XHRmYnIueCxcclxuXHRcdGZici55LFxyXG5cdFx0ZmJyLnosXHJcblx0XHRmdHIueCxcclxuXHRcdGZ0ci55LFxyXG5cdFx0ZnRyLnosXHJcblxyXG5cdFx0Ly8gcmlnaHRcclxuXHRcdGZici54LFxyXG5cdFx0ZmJyLnksXHJcblx0XHRmYnIueixcclxuXHRcdGJici54LFxyXG5cdFx0YmJyLnksXHJcblx0XHRiYnIueixcclxuXHRcdGZ0ci54LFxyXG5cdFx0ZnRyLnksXHJcblx0XHRmdHIueixcclxuXHRcdGZ0ci54LFxyXG5cdFx0ZnRyLnksXHJcblx0XHRmdHIueixcclxuXHRcdGJici54LFxyXG5cdFx0YmJyLnksXHJcblx0XHRiYnIueixcclxuXHRcdGJ0ci54LFxyXG5cdFx0YnRyLnksXHJcblx0XHRidHIueixcclxuXHJcblx0XHQvLyBiYWNrXHJcblx0XHRmYnIueCxcclxuXHRcdGJici55LFxyXG5cdFx0YmJyLnosXHJcblx0XHRiYmwueCxcclxuXHRcdGJibC55LFxyXG5cdFx0YmJsLnosXHJcblx0XHRidHIueCxcclxuXHRcdGJ0ci55LFxyXG5cdFx0YnRyLnosXHJcblx0XHRidHIueCxcclxuXHRcdGJ0ci55LFxyXG5cdFx0YnRyLnosXHJcblx0XHRiYmwueCxcclxuXHRcdGJibC55LFxyXG5cdFx0YmJsLnosXHJcblx0XHRidGwueCxcclxuXHRcdGJ0bC55LFxyXG5cdFx0YnRsLnosXHJcblxyXG5cdFx0Ly8gbGVmdFxyXG5cdFx0YmJsLngsXHJcblx0XHRiYmwueSxcclxuXHRcdGJibC56LFxyXG5cdFx0ZmJsLngsXHJcblx0XHRmYmwueSxcclxuXHRcdGZibC56LFxyXG5cdFx0YnRsLngsXHJcblx0XHRidGwueSxcclxuXHRcdGJ0bC56LFxyXG5cdFx0YnRsLngsXHJcblx0XHRidGwueSxcclxuXHRcdGJ0bC56LFxyXG5cdFx0ZmJsLngsXHJcblx0XHRmYmwueSxcclxuXHRcdGZibC56LFxyXG5cdFx0ZnRsLngsXHJcblx0XHRmdGwueSxcclxuXHRcdGZ0bC56LFxyXG5cclxuXHRcdC8vIHRvcFxyXG5cdFx0ZnRsLngsXHJcblx0XHRmdGwueSxcclxuXHRcdGZ0bC56LFxyXG5cdFx0ZnRyLngsXHJcblx0XHRmdHIueSxcclxuXHRcdGZ0ci56LFxyXG5cdFx0YnRsLngsXHJcblx0XHRidGwueSxcclxuXHRcdGJ0bC56LFxyXG5cdFx0YnRsLngsXHJcblx0XHRidGwueSxcclxuXHRcdGJ0bC56LFxyXG5cdFx0ZnRyLngsXHJcblx0XHRmdHIueSxcclxuXHRcdGZ0ci56LFxyXG5cdFx0YnRyLngsXHJcblx0XHRidHIueSxcclxuXHRcdGJ0ci56LFxyXG5cclxuXHRcdC8vIGJvdHRvbVxyXG5cdFx0YmJsLngsXHJcblx0XHRiYmwueSxcclxuXHRcdGJibC56LFxyXG5cdFx0YmJyLngsXHJcblx0XHRiYnIueSxcclxuXHRcdGJici56LFxyXG5cdFx0ZmJsLngsXHJcblx0XHRmYmwueSxcclxuXHRcdGZibC56LFxyXG5cdFx0ZmJsLngsXHJcblx0XHRmYmwueSxcclxuXHRcdGZibC56LFxyXG5cdFx0YmJyLngsXHJcblx0XHRiYnIueSxcclxuXHRcdGJici56LFxyXG5cdFx0ZmJyLngsXHJcblx0XHRmYnIueSxcclxuXHRcdGZici56XHJcblx0XTtcclxuXHJcblx0Y29uc3QgdXZzID0gW1xyXG5cdFx0Ly8gZnJvbnRcclxuXHRcdDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDEsIDEsXHJcblxyXG5cdFx0Ly8gcmlnaHRcclxuXHRcdDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDEsIDEsXHJcblxyXG5cdFx0Ly8gYmFja1xyXG5cdFx0MCwgMCwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMSwgMSxcclxuXHJcblx0XHQvLyBsZWZ0XHJcblx0XHQwLCAwLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxLCAxLFxyXG5cclxuXHRcdC8vIHRvcFxyXG5cdFx0MCwgMCwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMSwgMSxcclxuXHJcblx0XHQvLyBib3R0b21cclxuXHRcdDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDEsIDFcclxuXHRdO1xyXG5cclxuXHRjb25zdCBub3JtYWxzID0gW1xyXG5cdFx0Ly8gZnJvbnRcclxuXHRcdDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsXHJcblxyXG5cdFx0Ly8gcmlnaHRcclxuXHRcdDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsXHJcblxyXG5cdFx0Ly8gYmFja1xyXG5cdFx0MCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSxcclxuXHJcblx0XHQvLyBsZWZ0XHJcblx0XHQtMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLFxyXG5cclxuXHRcdC8vIHRvcFxyXG5cdFx0MCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCxcclxuXHJcblx0XHQvLyBib3R0b21cclxuXHRcdDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDBcclxuXHRdO1xyXG5cdHJldHVybiB7XHJcblx0XHRwb3NpdGlvbnM6IHBvc2l0aW9ucyxcclxuXHRcdG5vcm1hbHM6IG5vcm1hbHMsXHJcblx0XHR1dnM6IHV2c1xyXG5cdH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTcGhlcmUob3B0aW9ucykge1xyXG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuXHRjb25zdCBsb25nQmFuZHMgPSBvcHRpb25zLmxvbmdCYW5kcyB8fCAzMjtcclxuXHRjb25zdCBsYXRCYW5kcyA9IG9wdGlvbnMubGF0QmFuZHMgfHwgMzI7XHJcblx0Y29uc3QgcmFkaXVzID0gb3B0aW9ucy5yYWRpdXMgfHwgMTtcclxuXHRjb25zdCBsYXRfc3RlcCA9IE1hdGguUEkgLyBsYXRCYW5kcztcclxuXHRjb25zdCBsb25nX3N0ZXAgPSAoMiAqIE1hdGguUEkpIC8gbG9uZ0JhbmRzO1xyXG5cdGNvbnN0IG51bV9wb3NpdGlvbnMgPSBsb25nQmFuZHMgKiBsYXRCYW5kcyAqIDQ7XHJcblx0Y29uc3QgbnVtX2luZGljZXMgPSBsb25nQmFuZHMgKiBsYXRCYW5kcyAqIDY7XHJcblx0bGV0IGxhdF9hbmdsZSwgbG9uZ19hbmdsZTtcclxuXHRjb25zdCBwb3NpdGlvbnMgPSBuZXcgQXJyYXkobnVtX3Bvc2l0aW9ucyAqIDMpO1xyXG5cdGNvbnN0IG5vcm1hbHMgPSBuZXcgQXJyYXkobnVtX3Bvc2l0aW9ucyAqIDMpO1xyXG5cdGNvbnN0IHV2cyA9IG5ldyBBcnJheShudW1fcG9zaXRpb25zICogMik7XHJcblx0Y29uc3QgaW5kaWNlcyA9IG5ldyBBcnJheShudW1faW5kaWNlcyk7XHJcblx0bGV0IHgxLCB4MiwgeDMsIHg0LCB5MSwgeTIsIHoxLCB6MiwgejMsIHo0LCB1MSwgdTIsIHYxLCB2MjtcclxuXHRsZXQgaSwgajtcclxuXHRsZXQgayA9IDAsXHJcblx0XHRsID0gMDtcclxuXHRsZXQgdmksIHRpO1xyXG5cclxuXHRmb3IgKGkgPSAwOyBpIDwgbGF0QmFuZHM7IGkrKykge1xyXG5cdFx0bGF0X2FuZ2xlID0gaSAqIGxhdF9zdGVwO1xyXG5cdFx0eTEgPSBNYXRoLmNvcyhsYXRfYW5nbGUpO1xyXG5cdFx0eTIgPSBNYXRoLmNvcyhsYXRfYW5nbGUgKyBsYXRfc3RlcCk7XHJcblx0XHRmb3IgKGogPSAwOyBqIDwgbG9uZ0JhbmRzOyBqKyspIHtcclxuXHRcdFx0bG9uZ19hbmdsZSA9IGogKiBsb25nX3N0ZXA7XHJcblx0XHRcdHgxID0gTWF0aC5zaW4obGF0X2FuZ2xlKSAqIE1hdGguY29zKGxvbmdfYW5nbGUpO1xyXG5cdFx0XHR4MiA9IE1hdGguc2luKGxhdF9hbmdsZSkgKiBNYXRoLmNvcyhsb25nX2FuZ2xlICsgbG9uZ19zdGVwKTtcclxuXHRcdFx0eDMgPSBNYXRoLnNpbihsYXRfYW5nbGUgKyBsYXRfc3RlcCkgKiBNYXRoLmNvcyhsb25nX2FuZ2xlKTtcclxuXHRcdFx0eDQgPSBNYXRoLnNpbihsYXRfYW5nbGUgKyBsYXRfc3RlcCkgKiBNYXRoLmNvcyhsb25nX2FuZ2xlICsgbG9uZ19zdGVwKTtcclxuXHRcdFx0ejEgPSBNYXRoLnNpbihsYXRfYW5nbGUpICogTWF0aC5zaW4obG9uZ19hbmdsZSk7XHJcblx0XHRcdHoyID0gTWF0aC5zaW4obGF0X2FuZ2xlKSAqIE1hdGguc2luKGxvbmdfYW5nbGUgKyBsb25nX3N0ZXApO1xyXG5cdFx0XHR6MyA9IE1hdGguc2luKGxhdF9hbmdsZSArIGxhdF9zdGVwKSAqIE1hdGguc2luKGxvbmdfYW5nbGUpO1xyXG5cdFx0XHR6NCA9IE1hdGguc2luKGxhdF9hbmdsZSArIGxhdF9zdGVwKSAqIE1hdGguc2luKGxvbmdfYW5nbGUgKyBsb25nX3N0ZXApO1xyXG5cdFx0XHR1MSA9IDEgLSBqIC8gbG9uZ0JhbmRzO1xyXG5cdFx0XHR1MiA9IDEgLSAoaiArIDEpIC8gbG9uZ0JhbmRzO1xyXG5cdFx0XHR2MSA9IDEgLSBpIC8gbGF0QmFuZHM7XHJcblx0XHRcdHYyID0gMSAtIChpICsgMSkgLyBsYXRCYW5kcztcclxuXHRcdFx0dmkgPSBrICogMztcclxuXHRcdFx0dGkgPSBrICogMjtcclxuXHJcblx0XHRcdHBvc2l0aW9uc1t2aV0gPSB4MSAqIHJhZGl1cztcclxuXHRcdFx0cG9zaXRpb25zW3ZpICsgMV0gPSB5MSAqIHJhZGl1cztcclxuXHRcdFx0cG9zaXRpb25zW3ZpICsgMl0gPSB6MSAqIHJhZGl1czsgLy8gdjBcclxuXHJcblx0XHRcdHBvc2l0aW9uc1t2aSArIDNdID0geDIgKiByYWRpdXM7XHJcblx0XHRcdHBvc2l0aW9uc1t2aSArIDRdID0geTEgKiByYWRpdXM7XHJcblx0XHRcdHBvc2l0aW9uc1t2aSArIDVdID0gejIgKiByYWRpdXM7IC8vIHYxXHJcblxyXG5cdFx0XHRwb3NpdGlvbnNbdmkgKyA2XSA9IHgzICogcmFkaXVzO1xyXG5cdFx0XHRwb3NpdGlvbnNbdmkgKyA3XSA9IHkyICogcmFkaXVzO1xyXG5cdFx0XHRwb3NpdGlvbnNbdmkgKyA4XSA9IHozICogcmFkaXVzOyAvLyB2MlxyXG5cclxuXHRcdFx0cG9zaXRpb25zW3ZpICsgOV0gPSB4NCAqIHJhZGl1cztcclxuXHRcdFx0cG9zaXRpb25zW3ZpICsgMTBdID0geTIgKiByYWRpdXM7XHJcblx0XHRcdHBvc2l0aW9uc1t2aSArIDExXSA9IHo0ICogcmFkaXVzOyAvLyB2M1xyXG5cclxuXHRcdFx0bm9ybWFsc1t2aV0gPSB4MTtcclxuXHRcdFx0bm9ybWFsc1t2aSArIDFdID0geTE7XHJcblx0XHRcdG5vcm1hbHNbdmkgKyAyXSA9IHoxO1xyXG5cclxuXHRcdFx0bm9ybWFsc1t2aSArIDNdID0geDI7XHJcblx0XHRcdG5vcm1hbHNbdmkgKyA0XSA9IHkxO1xyXG5cdFx0XHRub3JtYWxzW3ZpICsgNV0gPSB6MjtcclxuXHJcblx0XHRcdG5vcm1hbHNbdmkgKyA2XSA9IHgzO1xyXG5cdFx0XHRub3JtYWxzW3ZpICsgN10gPSB5MjtcclxuXHRcdFx0bm9ybWFsc1t2aSArIDhdID0gejM7XHJcblxyXG5cdFx0XHRub3JtYWxzW3ZpICsgOV0gPSB4NDtcclxuXHRcdFx0bm9ybWFsc1t2aSArIDEwXSA9IHkyO1xyXG5cdFx0XHRub3JtYWxzW3ZpICsgMTFdID0gejQ7XHJcblxyXG5cdFx0XHR1dnNbdGldID0gdTE7XHJcblx0XHRcdHV2c1t0aSArIDFdID0gdjE7XHJcblxyXG5cdFx0XHR1dnNbdGkgKyAyXSA9IHUyO1xyXG5cdFx0XHR1dnNbdGkgKyAzXSA9IHYxO1xyXG5cclxuXHRcdFx0dXZzW3RpICsgNF0gPSB1MTtcclxuXHRcdFx0dXZzW3RpICsgNV0gPSB2MjtcclxuXHJcblx0XHRcdHV2c1t0aSArIDZdID0gdTI7XHJcblx0XHRcdHV2c1t0aSArIDddID0gdjI7XHJcblxyXG5cdFx0XHRpbmRpY2VzW2xdID0gaztcclxuXHRcdFx0aW5kaWNlc1tsICsgMV0gPSBrICsgMTtcclxuXHRcdFx0aW5kaWNlc1tsICsgMl0gPSBrICsgMjtcclxuXHRcdFx0aW5kaWNlc1tsICsgM10gPSBrICsgMjtcclxuXHRcdFx0aW5kaWNlc1tsICsgNF0gPSBrICsgMTtcclxuXHRcdFx0aW5kaWNlc1tsICsgNV0gPSBrICsgMztcclxuXHJcblx0XHRcdGsgKz0gNDtcclxuXHRcdFx0bCArPSA2O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHtcclxuXHRcdHBvc2l0aW9uczogcG9zaXRpb25zLFxyXG5cdFx0bm9ybWFsczogbm9ybWFscyxcclxuXHRcdHV2czogdXZzLFxyXG5cdFx0aW5kaWNlczogaW5kaWNlc1xyXG5cdH07XHJcbn1cclxuIiwiaW1wb3J0IHsgRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XHJcbmltcG9ydCB7IGNyZWF0ZVNwaGVyZSB9IGZyb20gXCIuLi91dGlscy9HZW9tZXRyeVV0aWxzXCI7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tIFwiLi9HZW9tZXRyeVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3BoZXJlR2VvbWV0cnkgZXh0ZW5kcyBHZW9tZXRyeSB7XHJcblx0cmFkaXVzOiBudW1iZXI7XHJcblx0Y29uc3RydWN0b3IocmFkaXVzOiBudW1iZXIpIHtcclxuXHRcdHN1cGVyKHtcclxuXHRcdFx0dHlwZTogXCJzcGhlcmVHZW9tZXRyeVwiXHJcblx0XHR9KTtcclxuXHRcdHRoaXMuZGVmaW5lcyA9IHtcclxuXHRcdFx0SEFTX05PUk1BTDogdHJ1ZVxyXG5cdFx0fTtcclxuXHRcdHRoaXMucmFkaXVzID0gcmFkaXVzO1xyXG5cdFx0dGhpcy5pbml0KCk7XHJcblx0fVxyXG5cdHByaXZhdGUgaW5pdCgpIHtcclxuXHRcdGNvbnN0IHsgcG9zaXRpb25zLCBub3JtYWxzLCB1dnMsIGluZGljZXMgfSA9IGNyZWF0ZVNwaGVyZSh7IHJhZGl1czogdGhpcy5yYWRpdXMgfSk7XHJcblx0XHQvLyB0aGlzLnBvc2l0aW9ucyA9IHBvc2l0aW9ucztcclxuXHRcdC8vIHRoaXMubm9ybWFscyA9IG5vcm1hbHM7XHJcblx0XHQvLyB0aGlzLnV2cyA9IHV2cztcclxuXHRcdC8vIHRoaXMuaW5kaWNlcyA9IGluZGljZXM7XHJcblx0XHR0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZShwb3NpdGlvbnMpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJwb3NpdGlvblwiLCBwb3NpdGlvbnMsIDMpKTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwibm9ybWFsXCIsIG5vcm1hbHMsIDMpKTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwidXZcIiwgdXZzLCAyKSk7XHJcblxyXG5cdFx0dGhpcy5zZXRJbmRpY2UoaW5kaWNlcyk7XHJcblx0XHR0aGlzLmNvdW50ID0gaW5kaWNlcy5sZW5ndGg7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEZsb2F0MzJBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vcmVuZGVyL0F0dHJpYnV0ZVwiO1xyXG5pbXBvcnQgeyBjcmVhdGVCb3ggfSBmcm9tIFwiLi4vdXRpbHMvR2VvbWV0cnlVdGlsc1wiO1xyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSBcIi4vR2VvbWV0cnlcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94R2VvbWV0cnkgZXh0ZW5kcyBHZW9tZXRyeSB7XHJcblx0Y29uc3RydWN0b3IocHVibGljIHdpZHRoOiBudW1iZXIgPSAxMCwgcHVibGljIGhlaWdodDogbnVtYmVyID0gMTAsIHB1YmxpYyBkZXB0aDogbnVtYmVyID0gMTApIHtcclxuXHRcdHN1cGVyKHtcclxuXHRcdFx0dHlwZTogXCJib3hHZW9tZXRyeVwiXHJcblx0XHR9KTtcclxuXHRcdHRoaXMuZGVmaW5lcyA9IHtcclxuXHRcdFx0SEFTX05PUk1BTDogdHJ1ZVxyXG5cdFx0fTtcclxuXHRcdHRoaXMuaW5pdCgpO1xyXG5cdH1cclxuXHRwcml2YXRlIGluaXQoKSB7XHJcblx0XHQvLyBnZW5lcmF0ZSBwb3MgdXYgbm9ybWFsIHNvIG9uXHJcblx0XHRjb25zdCB7IHBvc2l0aW9ucywgbm9ybWFscywgdXZzIH0gPSBjcmVhdGVCb3goe1xyXG5cdFx0XHRkaW1lbnNpb25zOiBbdGhpcy5kZXB0aCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHRdXHJcblx0XHR9KTtcclxuXHRcdHRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKHBvc2l0aW9ucyk7XHJcblx0XHR0aGlzLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcInBvc2l0aW9uXCIsIHBvc2l0aW9ucywgMykpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJub3JtYWxcIiwgbm9ybWFscywgMykpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJ1dlwiLCB1dnMsIDIpKTtcclxuXHRcdHRoaXMuY291bnQgPSAzNjtcclxuXHR9XHJcblx0cHVibGljIHVwZGF0ZShmcmFtZVN0YXRlKSB7fVxyXG59XHJcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuaW1wb3J0IHsgRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tIFwiLi9HZW9tZXRyeVwiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb3J1c0tub3RHZW9tZXRyeSBleHRlbmRzIEdlb21ldHJ5IHtcclxuXHRyYWRpdXM6IG51bWJlcjtcclxuXHR0dWJlOiBudW1iZXI7XHJcblx0dHVidWxhclNlZ21lbnRzOiBudW1iZXI7XHJcblx0cmFkaWFsU2VnbWVudHM6IG51bWJlcjtcclxuXHRwOiBudW1iZXI7XHJcblx0cTogbnVtYmVyO1xyXG5cdGNvbnN0cnVjdG9yKHJhZGl1cyA9IDEsIHR1YmUgPSAwLjQsIHR1YnVsYXJTZWdtZW50cyA9IDY0LCByYWRpYWxTZWdtZW50cyA9IDgsIHAgPSAyLCBxID0gMykge1xyXG5cdFx0c3VwZXIoe1xyXG5cdFx0XHR0eXBlOiBcInRvcnVzS25vdEdlb21ldHJ5XCJcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5kZWZpbmVzID0ge1xyXG5cdFx0XHRIQVNfTk9STUFMOiB0cnVlXHJcblx0XHR9O1xyXG5cdFx0dGhpcy5yYWRpdXMgPSByYWRpdXM7XHJcblx0XHR0aGlzLnR1YmUgPSB0dWJlO1xyXG5cdFx0dGhpcy50dWJ1bGFyU2VnbWVudHMgPSB0dWJ1bGFyU2VnbWVudHM7XHJcblx0XHR0aGlzLnJhZGlhbFNlZ21lbnRzID0gcmFkaWFsU2VnbWVudHM7XHJcblx0XHR0aGlzLnAgPSBwO1xyXG5cdFx0dGhpcy5xID0gcTtcclxuXHRcdHRoaXMuaW5pdCgpO1xyXG5cdH1cclxuXHRwdWJsaWMgdXBkYXRlKGZyYW1lU3RhdGUpIHtcclxuXHRcdGNvbnN0IHsgZGV2aWNlIH0gPSBmcmFtZVN0YXRlLmNvbnRleHQ7XHJcblx0fVxyXG5cdHByaXZhdGUgaW5pdCgpIHtcclxuXHRcdGNvbnN0IHsgbm9ybWFscywgdXZzLCBwb3NpdGlvbnMsIGluZGljZXMgfSA9IHRoaXMuY3JlYXRlR2VvbWV0cnkoKTtcclxuXHRcdHRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKHBvc2l0aW9ucyk7XHJcblx0XHR0aGlzLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcInBvc2l0aW9uXCIsIHBvc2l0aW9ucywgMykpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJub3JtYWxcIiwgbm9ybWFscywgMykpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJ1dlwiLCB1dnMsIDIpKTtcclxuXHRcdHRoaXMuc2V0SW5kaWNlKGluZGljZXMpO1xyXG5cdFx0dGhpcy5jb3VudCA9IGluZGljZXMubGVuZ3RoO1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZUdlb21ldHJ5KCkge1xyXG5cdFx0Y29uc3QgcG9zaXRpb25zID0gW10sXHJcblx0XHRcdG5vcm1hbHMgPSBbXSxcclxuXHRcdFx0dXZzID0gW10sXHJcblx0XHRcdGluZGljZXMgPSBbXTtcclxuXHRcdGNvbnN0IHR1YnVsYXJTZWdtZW50cyA9IE1hdGguZmxvb3IodGhpcy50dWJ1bGFyU2VnbWVudHMpO1xyXG5cdFx0Y29uc3QgcmFkaWFsU2VnbWVudHMgPSBNYXRoLmZsb29yKHRoaXMucmFkaWFsU2VnbWVudHMpO1xyXG5cdFx0Ly8gaGVscGVyIHZhcmlhYmxlc1xyXG5cclxuXHRcdGNvbnN0IHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHRjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuXHRcdGNvbnN0IFAxID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdGNvbnN0IFAyID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcblx0XHRjb25zdCBCID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdGNvbnN0IFQgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0Y29uc3QgTiA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG5cdFx0Ly8gZ2VuZXJhdGUgdmVydGljZXMsIG5vcm1hbHMgYW5kIHV2c1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDw9IHR1YnVsYXJTZWdtZW50czsgKytpKSB7XHJcblx0XHRcdC8vIHRoZSByYWRpYW4gXCJ1XCIgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIG9uIHRoZSB0b3J1cyBjdXJ2ZSBvZiB0aGUgY3VycmVudCB0dWJ1bGFyIHNlZ21lbnRcclxuXHJcblx0XHRcdGNvbnN0IHUgPSAoaSAvIHR1YnVsYXJTZWdtZW50cykgKiB0aGlzLnAgKiBNYXRoLlBJICogMjtcclxuXHJcblx0XHRcdC8vIG5vdyB3ZSBjYWxjdWxhdGUgdHdvIHBvaW50cy4gUDEgaXMgb3VyIGN1cnJlbnQgcG9zaXRpb24gb24gdGhlIGN1cnZlLCBQMiBpcyBhIGxpdHRsZSBmYXJ0aGVyIGFoZWFkLlxyXG5cdFx0XHQvLyB0aGVzZSBwb2ludHMgYXJlIHVzZWQgdG8gY3JlYXRlIGEgc3BlY2lhbCBcImNvb3JkaW5hdGUgc3BhY2VcIiwgd2hpY2ggaXMgbmVjZXNzYXJ5IHRvIGNhbGN1bGF0ZSB0aGUgY29ycmVjdCB2ZXJ0ZXggcG9zaXRpb25zXHJcblxyXG5cdFx0XHRjYWxjdWxhdGVQb3NpdGlvbk9uQ3VydmUodSwgdGhpcy5wLCB0aGlzLnEsIHRoaXMucmFkaXVzLCBQMSk7XHJcblx0XHRcdGNhbGN1bGF0ZVBvc2l0aW9uT25DdXJ2ZSh1ICsgMC4wMSwgdGhpcy5wLCB0aGlzLnEsIHRoaXMucmFkaXVzLCBQMik7XHJcblxyXG5cdFx0XHQvLyBjYWxjdWxhdGUgb3J0aG9ub3JtYWwgYmFzaXNcclxuXHJcblx0XHRcdFZlY3RvcjMuc3VidHJhY3QoUDIsIFAxLCBUKTtcclxuXHRcdFx0Ly8gVC5zdWJWZWN0b3JzKCBQMiwgUDEgKTtcclxuXHRcdFx0VmVjdG9yMy5hZGQoUDIsIFAxLCBOKTtcclxuXHRcdFx0Ly8gTi5hZGRWZWN0b3JzKCBQMiwgUDEgKTtcclxuXHRcdFx0VmVjdG9yMy5jcm9zcyhULCBOLCBCKTtcclxuXHRcdFx0Ly8gQi5jcm9zc1ZlY3RvcnMoIFQsIE4gKTtcclxuXHRcdFx0VmVjdG9yMy5jcm9zcyhCLCBULCBOKTtcclxuXHRcdFx0Ly8gTi5jcm9zc1ZlY3RvcnMoIEIsIFQgKTtcclxuXHJcblx0XHRcdC8vIG5vcm1hbGl6ZSBCLCBOLiBUIGNhbiBiZSBpZ25vcmVkLCB3ZSBkb24ndCB1c2UgaXRcclxuXHJcblx0XHRcdEIubm9ybWFsaXplKCk7XHJcblx0XHRcdE4ubm9ybWFsaXplKCk7XHJcblxyXG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8PSByYWRpYWxTZWdtZW50czsgKytqKSB7XHJcblx0XHRcdFx0Ly8gbm93IGNhbGN1bGF0ZSB0aGUgdmVydGljZXMuIHRoZXkgYXJlIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGV4dHJ1c2lvbiBvZiB0aGUgdG9ydXMgY3VydmUuXHJcblx0XHRcdFx0Ly8gYmVjYXVzZSB3ZSBleHRydWRlIGEgc2hhcGUgaW4gdGhlIHh5LXBsYW5lLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGN1bGF0ZSBhIHotdmFsdWUuXHJcblxyXG5cdFx0XHRcdGNvbnN0IHYgPSAoaiAvIHJhZGlhbFNlZ21lbnRzKSAqIE1hdGguUEkgKiAyO1xyXG5cdFx0XHRcdGNvbnN0IGN4ID0gLXRoaXMudHViZSAqIE1hdGguY29zKHYpO1xyXG5cdFx0XHRcdGNvbnN0IGN5ID0gdGhpcy50dWJlICogTWF0aC5zaW4odik7XHJcblxyXG5cdFx0XHRcdC8vIG5vdyBjYWxjdWxhdGUgdGhlIGZpbmFsIHZlcnRleCBwb3NpdGlvbi5cclxuXHRcdFx0XHQvLyBmaXJzdCB3ZSBvcmllbnQgdGhlIGV4dHJ1c2lvbiB3aXRoIG91ciBiYXNpcyB2ZWN0b3JzLCB0aGVuIHdlIGFkZCBpdCB0byB0aGUgY3VycmVudCBwb3NpdGlvbiBvbiB0aGUgY3VydmVcclxuXHJcblx0XHRcdFx0dmVydGV4LnggPSBQMS54ICsgKGN4ICogTi54ICsgY3kgKiBCLngpO1xyXG5cdFx0XHRcdHZlcnRleC55ID0gUDEueSArIChjeCAqIE4ueSArIGN5ICogQi55KTtcclxuXHRcdFx0XHR2ZXJ0ZXgueiA9IFAxLnogKyAoY3ggKiBOLnogKyBjeSAqIEIueik7XHJcblxyXG5cdFx0XHRcdHBvc2l0aW9ucy5wdXNoKHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnopO1xyXG5cclxuXHRcdFx0XHQvLyBub3JtYWwgKFAxIGlzIGFsd2F5cyB0aGUgY2VudGVyL29yaWdpbiBvZiB0aGUgZXh0cnVzaW9uLCB0aHVzIHdlIGNhbiB1c2UgaXQgdG8gY2FsY3VsYXRlIHRoZSBub3JtYWwpXHJcblx0XHRcdFx0VmVjdG9yMy5zdWJ0cmFjdCh2ZXJ0ZXgsIFAxLCBub3JtYWwpO1xyXG5cdFx0XHRcdG5vcm1hbC5ub3JtYWxpemUoKTtcclxuXHJcblx0XHRcdFx0bm9ybWFscy5wdXNoKG5vcm1hbC54LCBub3JtYWwueSwgbm9ybWFsLnopO1xyXG5cclxuXHRcdFx0XHQvLyB1dlxyXG5cclxuXHRcdFx0XHR1dnMucHVzaChpIC8gdHVidWxhclNlZ21lbnRzKTtcclxuXHRcdFx0XHR1dnMucHVzaChqIC8gcmFkaWFsU2VnbWVudHMpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gZ2VuZXJhdGUgaW5kaWNlc1xyXG5cclxuXHRcdGZvciAobGV0IGogPSAxOyBqIDw9IHR1YnVsYXJTZWdtZW50czsgaisrKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDw9IHJhZGlhbFNlZ21lbnRzOyBpKyspIHtcclxuXHRcdFx0XHQvLyBpbmRpY2VzXHJcblxyXG5cdFx0XHRcdGNvbnN0IGEgPSAocmFkaWFsU2VnbWVudHMgKyAxKSAqIChqIC0gMSkgKyAoaSAtIDEpO1xyXG5cdFx0XHRcdGNvbnN0IGIgPSAocmFkaWFsU2VnbWVudHMgKyAxKSAqIGogKyAoaSAtIDEpO1xyXG5cdFx0XHRcdGNvbnN0IGMgPSAocmFkaWFsU2VnbWVudHMgKyAxKSAqIGogKyBpO1xyXG5cdFx0XHRcdGNvbnN0IGQgPSAocmFkaWFsU2VnbWVudHMgKyAxKSAqIChqIC0gMSkgKyBpO1xyXG5cclxuXHRcdFx0XHQvLyBmYWNlc1xyXG5cclxuXHRcdFx0XHRpbmRpY2VzLnB1c2goYSwgYiwgZCk7XHJcblx0XHRcdFx0aW5kaWNlcy5wdXNoKGIsIGMsIGQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRub3JtYWxzLFxyXG5cdFx0XHR1dnMsXHJcblx0XHRcdHBvc2l0aW9ucyxcclxuXHRcdFx0aW5kaWNlc1xyXG5cdFx0fTtcclxuXHR9XHJcbn1cclxuZnVuY3Rpb24gY2FsY3VsYXRlUG9zaXRpb25PbkN1cnZlKHUsIHAsIHEsIHJhZGl1cywgcG9zaXRpb24pIHtcclxuXHRjb25zdCBjdSA9IE1hdGguY29zKHUpO1xyXG5cdGNvbnN0IHN1ID0gTWF0aC5zaW4odSk7XHJcblx0Y29uc3QgcXVPdmVyUCA9IChxIC8gcCkgKiB1O1xyXG5cdGNvbnN0IGNzID0gTWF0aC5jb3MocXVPdmVyUCk7XHJcblxyXG5cdHBvc2l0aW9uLnggPSByYWRpdXMgKiAoMiArIGNzKSAqIDAuNSAqIGN1O1xyXG5cdHBvc2l0aW9uLnkgPSByYWRpdXMgKiAoMiArIGNzKSAqIHN1ICogMC41O1xyXG5cdHBvc2l0aW9uLnogPSByYWRpdXMgKiBNYXRoLnNpbihxdU92ZXJQKSAqIDAuNTtcclxufVxyXG4iLCJpbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xyXG5pbXBvcnQgdGV4dHVyZUNhY2hlIGZyb20gXCIuLi9jb3JlL1RleHR1cmVDYWNoZVwiO1xyXG5pbXBvcnQgQ29sb3IgZnJvbSBcIi4uL21hdGgvQ29sb3JcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcclxuaW1wb3J0IFNhbXBsZXIgZnJvbSBcIi4uL3JlbmRlci9TYW1wbGVyXCI7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5pbXBvcnQgVW5pZm9ybUJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1CdWZmZXJcIjtcclxuaW1wb3J0IHsgVW5pZm9ybUVudW0gfSBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1zXCI7XHJcbmltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XHJcbmltcG9ydCB7IE1hdGVyaWFsIH0gZnJvbSBcIi4vTWF0ZXJpYWxcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmxpbm5QaG9uZ01hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xyXG5cdHB1YmxpYyBzcGVjdWxhcjogQ29sb3I7XHJcblx0cHVibGljIHNoaW5pbmVzczogbnVtYmVyO1xyXG5cdHB1YmxpYyBub3JtYWxUZXh0dXJlOiBUZXh0dXJlO1xyXG5cdHB1YmxpYyBub3JtYWxTYW1wbGVyOiBTYW1wbGVyO1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHRcdHRoaXMudHlwZSA9IFwicGhvbmdcIjtcclxuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoMS4wLCAwLjAsIDAuMCk7XHJcblx0XHR0aGlzLnNoYWRlclNvdXJjZSA9IG5ldyBTaGFkZXJTb3VyY2Uoe1xyXG5cdFx0XHR0eXBlOiB0aGlzLnR5cGUsXHJcblx0XHRcdHJlbmRlcjogdHJ1ZSxcclxuXHRcdFx0ZGVmaW5lczoge1xyXG5cdFx0XHRcdG1hdGVyaWFsUGhvbmc6IHRydWVcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmxpZ2h0ID0gdHJ1ZTtcclxuXHRcdHRoaXMuc3BlY3VsYXIgPSBuZXcgQ29sb3IoMS4wLCAxLjAsIDEuMCk7XHJcblx0XHR0aGlzLnNoaW5pbmVzcyA9IDMwLjA7XHJcblx0XHR0aGlzLmJhc2VUZXh0dXJlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5iYXNlU2FtcGxlciA9IHVuZGVmaW5lZDtcclxuXHR9XHJcblx0dXBkYXRlKGZyYW1lU3RhdGU/OiBGcmFtZVN0YXRlLCBtZXNoPzogTWVzaCkge1xyXG5cdFx0aWYgKCF0aGlzLnNoYWRlckRhdGEgfHwgdGhpcy5kaXJ0eSkgdGhpcy5jcmVhdGVTaGFkZXJEYXRhKG1lc2gpO1xyXG5cdH1cclxuXHRwcm90ZWN0ZWQgY3JlYXRlU2hhZGVyRGF0YShtZXNoPzogTWVzaCkge1xyXG5cdFx0c3VwZXIuY3JlYXRlU2hhZGVyRGF0YSgpO1xyXG5cdFx0Y29uc3QgdW5pZm9ybUJ1ZmZlciA9IG5ldyBVbmlmb3JtQnVmZmVyKHsgbGFiZWw6IFwicGhvbmdcIiB9KTtcclxuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XCJtb2RlbE1hdHJpeFwiLFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIG1lc2gubW9kZWxNYXRyaXg7XHJcblx0XHRcdH0sXHJcblx0XHRcdFVuaWZvcm1FbnVtLk1hdDRcclxuXHRcdCk7XHJcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXCJjb2xvclwiLCB0aGlzLCBVbmlmb3JtRW51bS5Db2xvcik7XHJcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXCJvcGFjaXR5XCIsIHRoaXMsIFVuaWZvcm1FbnVtLkZsb2F0KTtcclxuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XCJub3JtYWxNdHJpeFwiLFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIG1lc2gubm9ybWFsTWF0cml4O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0XHJcblx0XHQpO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwiZW1pc3NpdmVcIiwgdGhpcywgVW5pZm9ybUVudW0uQ29sb3IpO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwic2hpbmluZXNzXCIsIHRoaXMsIFVuaWZvcm1FbnVtLkZsb2F0KTtcclxuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcInNwZWN1bGFyXCIsIHRoaXMsIFVuaWZvcm1FbnVtLkNvbG9yKTtcclxuXHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwicGhvbmdcIiwgdW5pZm9ybUJ1ZmZlcik7XHJcblx0XHRpZiAodGhpcy5iYXNlVGV4dHVyZSkge1xyXG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0RGVmaW5lKFwiVVNFX0NPTE9SVEVYVFVSRVwiLCB0cnVlKTtcclxuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFRleHR1cmUoXCJiYXNlQ29sb3JUZXh0dXJlXCIsIHRoaXMuYmFzZVRleHR1cmUpO1xyXG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0U2FtcGxlcihcImJhc2VDb2xvclNhbXBsZXJcIiwgdGhpcy5iYXNlU2FtcGxlciB8fCB0ZXh0dXJlQ2FjaGUuZGVmYXVsdFNhbXBsZXIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMubm9ybWFsVGV4dHVyZSkge1xyXG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0RGVmaW5lKFwiVVNFX05PUk1BTFRFWFRVUkVcIiwgdHJ1ZSk7XHJcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRUZXh0dXJlKFwibm9ybWFsVGV4dHVyZVwiLCB0aGlzLm5vcm1hbFRleHR1cmUpO1xyXG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0U2FtcGxlcihcIm5vcm1hbFNhbXBsZXJcIiwgdGhpcy5ub3JtYWxTYW1wbGVyIHx8IHRleHR1cmVDYWNoZS5kZWZhdWx0U2FtcGxlcik7XHJcblx0XHR9XHJcblx0fVxyXG5cdGRlc3Ryb3koKSB7XHJcblx0XHR0aGlzPy5iYXNlVGV4dHVyZT8uZGVzdHJveSgpO1xyXG5cdFx0c3VwZXIuZGVzdHJveSgpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xuaW1wb3J0IHRleHR1cmVDYWNoZSBmcm9tIFwiLi4vY29yZS9UZXh0dXJlQ2FjaGVcIjtcbmltcG9ydCB7IEN1bGxNb2RlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcbmltcG9ydCBWZWN0b3IyIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjJcIjtcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi4vbWVzaC9NZXNoXCI7XG5pbXBvcnQgU2FtcGxlciBmcm9tIFwiLi4vcmVuZGVyL1NhbXBsZXJcIjtcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XG5pbXBvcnQgeyBVbmlmb3JtRW51bSB9IGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybXNcIjtcbmltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCIuL01hdGVyaWFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBick1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXHRwdWJsaWMgc3BlY3VsYXJFbnZUZXh0dXJlOiBUZXh0dXJlO1xuXG5cdHB1YmxpYyBzcGVjdWxhckVudlNhbXBsZXI6IFNhbXBsZXI7XG5cblx0cHVibGljIGVtaXNzaXZlVGV4dHVyZTogVGV4dHVyZTtcblxuXHRwdWJsaWMgZW1pc3NpdmVTYW1wbGVyOiBTYW1wbGVyO1xuXG5cdHB1YmxpYyBub3JtYWxUZXh0dXJlOiBUZXh0dXJlO1xuXG5cdHB1YmxpYyBub3JtYWxTYW1wbGVyOiBTYW1wbGVyO1xuXG5cdHB1YmxpYyBhb1RleHR1cmU6IFRleHR1cmU7XG5cblx0cHVibGljIGFvU2FtcGxlcjogU2FtcGxlcjtcblxuXHRwdWJsaWMgbWV0YWxuZXNzUm91Z2huZXNzVGV4dHVyZTogVGV4dHVyZTtcblxuXHRwdWJsaWMgbWV0YWxuZXNzUm91Z2huZXNzU2FtcGxlcjogU2FtcGxlcjtcblxuXHRwcml2YXRlIF9yb3VnaG5lc3M6IG51bWJlcjtcblxuXHRwcml2YXRlIF9tZXRhbG5lc3M6IG51bWJlcjtcblxuXHRwcml2YXRlIF9hb1RleHR1cmVJbnRlbnNpdHk6IG51bWJlcjtcblxuXHRwcml2YXRlIF9ub3JtYWxTY2FsZTogVmVjdG9yMjtcblxuXHRwcml2YXRlIF9JQkxSZW5kZXI6IGJvb2xlYW47XG5cblx0cHVibGljIGdldCByb3VnaG5lc3MoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fcm91Z2huZXNzO1xuXHR9XG5cdHB1YmxpYyBzZXQgcm91Z2huZXNzKHZhbHVlKSB7XG5cdFx0dGhpcy5fcm91Z2huZXNzID0gdmFsdWU7XG5cdH1cblx0cHVibGljIGdldCBtZXRhbG5lc3MoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fbWV0YWxuZXNzO1xuXHR9XG5cdHB1YmxpYyBzZXQgbWV0YWxuZXNzKHY6IG51bWJlcikge1xuXHRcdHRoaXMuX21ldGFsbmVzcyA9IHY7XG5cdH1cblx0cHVibGljIGdldCBhb1RleHR1cmVJbnRlbnNpdHkoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fYW9UZXh0dXJlSW50ZW5zaXR5O1xuXHR9XG5cdHB1YmxpYyBzZXQgYW9UZXh0dXJlSW50ZW5zaXR5KHY6IG51bWJlcikge1xuXHRcdHRoaXMuX2FvVGV4dHVyZUludGVuc2l0eSA9IHY7XG5cdH1cblx0cHVibGljIGdldCBub3JtYWxTY2FsZSgpOiBWZWN0b3IyIHtcblx0XHRpZiAodGhpcy5yZW5kZXJTdGF0ZSAmJiB0aGlzLnJlbmRlclN0YXRlLnByaW1pdGl2ZSkge1xuXHRcdFx0aWYgKHRoaXMucmVuZGVyU3RhdGUucHJpbWl0aXZlLmN1bGxNb2RlID09IEN1bGxNb2RlLkJhY2spIHtcblx0XHRcdFx0cmV0dXJuIFZlY3RvcjIubmVnYXRlKHRoaXMuX25vcm1hbFNjYWxlLCBuZXcgVmVjdG9yMigpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX25vcm1hbFNjYWxlO1xuXHR9XG5cdHB1YmxpYyBzZXQgbm9ybWFsU2NhbGUodjogVmVjdG9yMikge1xuXHRcdHRoaXMuX25vcm1hbFNjYWxlID0gdjtcblx0fVxuXHRwdWJsaWMgc2V0IElCTFJlbmRlcih2YWx1ZSkge1xuXHRcdHRoaXMuX0lCTFJlbmRlciA9IHZhbHVlO1xuXHRcdHRoaXMuc2hhZGVyU291cmNlLnNldERlZmluZXMoe1xuXHRcdFx0VVNFX0lCTDogdGhpcy5fSUJMUmVuZGVyXG5cdFx0fSk7XG5cdFx0dGhpcy5kaXJ0eSA9IHRydWU7XG5cdH1cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSBcInBicl9tYXRcIjtcblxuXHRcdHRoaXMuX3JvdWdobmVzcyA9IDAuMTtcblxuXHRcdHRoaXMuX21ldGFsbmVzcyA9IDAuMTtcblxuXHRcdHRoaXMuX2FvVGV4dHVyZUludGVuc2l0eSA9IDEuMDtcblx0XHR0aGlzLmxpZ2h0ID0gdHJ1ZTtcblx0XHR0aGlzLl9ub3JtYWxTY2FsZSA9IG5ldyBWZWN0b3IyKDEsIDEpO1xuXHRcdHRoaXMuX0lCTFJlbmRlciA9IHRydWU7XG5cdFx0dGhpcy5zaGFkZXJTb3VyY2UgPSBuZXcgU2hhZGVyU291cmNlKHtcblx0XHRcdHR5cGU6IHRoaXMudHlwZSxcblx0XHRcdHJlbmRlcjogdHJ1ZSxcblx0XHRcdGRlZmluZXM6IHtcblx0XHRcdFx0bWF0ZXJpYWxQYnI6IHRydWUsXG5cdFx0XHRcdFVTRV9JQkw6IHRoaXMuX0lCTFJlbmRlclxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHVwZGF0ZShmcmFtZVN0YXRlPzogRnJhbWVTdGF0ZSwgbWVzaD86IE1lc2gpIHtcblx0XHRpZiAoIXRleHR1cmVDYWNoZS5nZXRUZXh0dXJlKFwic3BlY3VsYXJcIikpIHJldHVybjtcblx0XHRpZiAoIXRoaXMuc2hhZGVyRGF0YSB8fCB0aGlzLmRpcnR5KSB7XG5cdFx0XHR0aGlzLmNyZWF0ZVNoYWRlckRhdGEobWVzaCwpO1xuXHRcdH1cblx0fVxuXHRwcm90ZWN0ZWQgY3JlYXRlU2hhZGVyRGF0YShtZXNoPzogTWVzaCwpIHtcblx0XHRzdXBlci5jcmVhdGVTaGFkZXJEYXRhKCk7XG5cdFx0Y29uc3QgdW5pZm9ybUJ1ZmZlciA9IG5ldyBVbmlmb3JtQnVmZmVyKHsgbGFiZWw6IFwicGJyXCIgfSk7XG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxuXHRcdFx0XCJtb2RlbE1hdHJpeFwiLFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbWVzaC5tb2RlbE1hdHJpeDtcblx0XHRcdH0sXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0XG5cdFx0KTtcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXCJjb2xvclwiLCB0aGlzLCBVbmlmb3JtRW51bS5Db2xvcik7XG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwib3BhY2l0eVwiLCB0aGlzLCBVbmlmb3JtRW51bS5GbG9hdCk7XG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxuXHRcdFx0XCJub3JtYWxNdHJpeFwiLFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbWVzaC5ub3JtYWxNYXRyaXg7XG5cdFx0XHR9LFxuXHRcdFx0VW5pZm9ybUVudW0uTWF0NFxuXHRcdCk7XG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwiZW1pc3NpdmVcIiwgdGhpcywgVW5pZm9ybUVudW0uQ29sb3IpO1xuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcIm1ldGFsbmVzc1wiLCB0aGlzLCBVbmlmb3JtRW51bS5GbG9hdCk7XG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwicm91Z2huZXNzXCIsIHRoaXMsIFVuaWZvcm1FbnVtLkZsb2F0KTtcblx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcihcInBiclwiLCB1bmlmb3JtQnVmZmVyKTtcblx0XHR0aGlzLnNwZWN1bGFyRW52VGV4dHVyZSA9IHRleHR1cmVDYWNoZS5nZXRUZXh0dXJlKFwic3BlY3VsYXJcIik7XG5cdFx0aWYgKHRoaXMuYmFzZVRleHR1cmUpIHtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXREZWZpbmUoXCJVU0VfVEVYVFVSRVwiLCB0cnVlKTtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRUZXh0dXJlKFwiYmFzZUNvbG9yVGV4dHVyZVwiLCB0aGlzLmJhc2VUZXh0dXJlKTtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRTYW1wbGVyKFwiYmFzZUNvbG9yU2FtcGxlclwiLCB0aGlzLmJhc2VTYW1wbGVyIHx8IHRleHR1cmVDYWNoZS5kZWZhdWx0U2FtcGxlcik7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm1ldGFsbmVzc1JvdWdobmVzc1RleHR1cmUpIHtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXREZWZpbmUoXCJVU0VfTUVUQUxORVNTVEVYVFVSRVwiLCB0cnVlKTtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRUZXh0dXJlKFwibWV0YWxuZXNzUm91Z2huZXNzVGV4dHVyZVwiLCB0aGlzLm1ldGFsbmVzc1JvdWdobmVzc1RleHR1cmUpO1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFNhbXBsZXIoXG5cdFx0XHRcdFwibWV0YWxuZXNzUm91Z2huZXNzU2FtcGxlclwiLFxuXHRcdFx0XHR0aGlzLm1ldGFsbmVzc1JvdWdobmVzc1NhbXBsZXIgfHwgdGV4dHVyZUNhY2hlLmRlZmF1bHRTYW1wbGVyXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5ub3JtYWxUZXh0dXJlKSB7XG5cdFx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXCJub3JtYWxTY2FsZVwiLCB0aGlzLCBVbmlmb3JtRW51bS5GbG9hdFZlYzIpO1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldERlZmluZShcIlVTRV9OT1JNQUxURVhUVVJFXCIsIHRydWUpO1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFRleHR1cmUoXCJub3JtYWxUZXh0dXJlXCIsIHRoaXMubm9ybWFsVGV4dHVyZSk7XG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0U2FtcGxlcihcIm5vcm1hbFNhbXBsZXJcIiwgdGhpcy5ub3JtYWxTYW1wbGVyIHx8IHRleHR1cmVDYWNoZS5kZWZhdWx0U2FtcGxlcik7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmFvVGV4dHVyZSkge1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldERlZmluZShcIlVTRV9BT1RFWFRVUkVcIiwgdHJ1ZSk7XG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VGV4dHVyZShcImFvVGV4dHVyZVwiLCB0aGlzLmFvVGV4dHVyZSk7XG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0U2FtcGxlcihcImFvU2FtcGxlclwiLCB0aGlzLmFvU2FtcGxlciB8fCB0ZXh0dXJlQ2FjaGUuZGVmYXVsdFNhbXBsZXIpO1xuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwiYW9UZXh0dXJlSW50ZW5zaXR5XCIsIHRoaXMsIFVuaWZvcm1FbnVtLkZsb2F0KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuZW1pc3NpdmVUZXh0dXJlKSB7XG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0RGVmaW5lKFwiVVNFX0VNSVNTSVZFVEVYVFVSRVwiLCB0cnVlKTtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRUZXh0dXJlKFwiZW1pc3NpdmVUZXh0dXJlXCIsIHRoaXMuZW1pc3NpdmVUZXh0dXJlKTtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRTYW1wbGVyKFwiZW1pc3NpdmVTYW1wbGVyXCIsIHRoaXMuZW1pc3NpdmVTYW1wbGVyIHx8IHRleHR1cmVDYWNoZS5kZWZhdWx0U2FtcGxlcik7XG5cdFx0fVxuXHRcdGlmICh0aGlzLnNwZWN1bGFyRW52VGV4dHVyZSAmJiB0aGlzLl9JQkxSZW5kZXIpIHtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRUZXh0dXJlKFwic3BlY3VsYXJFbnZUZXh0dXJlXCIsIHRoaXMuc3BlY3VsYXJFbnZUZXh0dXJlKTtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRTYW1wbGVyKFwic3BlY3VsYXJFbnZTYW1wbGVyXCIsIHRoaXMuc3BlY3VsYXJFbnZTYW1wbGVyIHx8IHRleHR1cmVDYWNoZS5kZWZhdWx0U2FtcGxlcik7XG5cdFx0fVxuXHR9XG5cdGRlc3Ryb3koKSB7XG5cdFx0dGhpcz8uYW9UZXh0dXJlPy5kZXN0cm95KCk7XG5cdFx0dGhpcz8uYmFzZVRleHR1cmU/LmRlc3Ryb3koKTtcblx0XHR0aGlzPy5lbWlzc2l2ZVRleHR1cmU/LmRlc3Ryb3koKTtcblx0XHR0aGlzPy5ub3JtYWxUZXh0dXJlPy5kZXN0cm95KCk7XG5cdFx0dGhpcy5zcGVjdWxhckVudlRleHR1cmUgPSB1bmRlZmluZWQ7XG5cdH1cbn1cbiIsImV4cG9ydCBjbGFzcyBFdmVudERpc3BhdGNoZXIge1xyXG5cdHByaXZhdGUgX2xpc3RlbmVyczogb2JqZWN0O1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0dGhpcy5fbGlzdGVuZXJzID0ge307XHJcblx0fVxyXG5cclxuXHRhZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XHJcblx0XHRpZiAodGhpcy5fbGlzdGVuZXJzID09PSB1bmRlZmluZWQpIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xyXG5cclxuXHRcdGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycztcclxuXHJcblx0XHRpZiAobGlzdGVuZXJzW3R5cGVdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0bGlzdGVuZXJzW3R5cGVdID0gW107XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxpc3RlbmVyc1t0eXBlXS5pbmRleE9mKGxpc3RlbmVyKSA9PT0gLTEpIHtcclxuXHRcdFx0bGlzdGVuZXJzW3R5cGVdLnB1c2gobGlzdGVuZXIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aGFzRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xyXG5cdFx0aWYgKHRoaXMuX2xpc3RlbmVycyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzO1xyXG5cclxuXHRcdHJldHVybiBsaXN0ZW5lcnNbdHlwZV0gIT09IHVuZGVmaW5lZCAmJiBsaXN0ZW5lcnNbdHlwZV0uaW5kZXhPZihsaXN0ZW5lcikgIT09IC0xO1xyXG5cdH1cclxuXHJcblx0cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xyXG5cdFx0aWYgKHRoaXMuX2xpc3RlbmVycyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzO1xyXG5cdFx0Y29uc3QgbGlzdGVuZXJBcnJheSA9IGxpc3RlbmVyc1t0eXBlXTtcclxuXHJcblx0XHRpZiAobGlzdGVuZXJBcnJheSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnN0IGluZGV4ID0gbGlzdGVuZXJBcnJheS5pbmRleE9mKGxpc3RlbmVyKTtcclxuXHJcblx0XHRcdGlmIChpbmRleCAhPT0gLTEpIHtcclxuXHRcdFx0XHRsaXN0ZW5lckFycmF5LnNwbGljZShpbmRleCwgMSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGRpc3BhdGNoRXZlbnQoZXZlbnQpIHtcclxuXHRcdGlmICh0aGlzLl9saXN0ZW5lcnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycztcclxuXHRcdGNvbnN0IGxpc3RlbmVyQXJyYXkgPSBsaXN0ZW5lcnNbZXZlbnQudHlwZV07XHJcblxyXG5cdFx0aWYgKGxpc3RlbmVyQXJyYXkgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRldmVudC50YXJnZXQgPSB0aGlzO1xyXG5cclxuXHRcdFx0Y29uc3QgYXJyYXkgPSBsaXN0ZW5lckFycmF5LnNsaWNlKDApO1xyXG5cclxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdFx0XHRhcnJheVtpXS5jYWxsKHRoaXMsIGV2ZW50KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRldmVudC50YXJnZXQgPSBudWxsO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XHJcbmltcG9ydCB7IENvbXB1dGUgfSBmcm9tIFwiLi4vY29tcHV0ZS9Db21wdXRlXCI7XHJcbmltcG9ydCB7IE1hdGVyaWFsIH0gZnJvbSBcIi4uL21hdGVyaWFsL01hdGVyaWFsXCI7XHJcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi4vbWVzaC9NZXNoXCI7XHJcbmltcG9ydCB7IENvbXB1dGVDb21tYW5kIH0gZnJvbSBcIi4uL3JlbmRlci9Db21wdXRlQ29tbWFuZFwiO1xyXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vcmVuZGVyL0NvbnRleHRcIjtcclxuaW1wb3J0IERyYXdDb21tYW5kIGZyb20gXCIuLi9yZW5kZXIvRHJhd0NvbW1hbmRcIjtcclxuaW1wb3J0IExpZ2h0TWFuZ2VyIGZyb20gXCIuL0xpZ2h0TWFuZ2VyXCI7XHJcbmltcG9ydCB7IENvbW1hbmRTdWJUeXBlIH0gZnJvbSBcIi4vV2ViR1BVQ29uc3RhbnRcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVuZGVyUXVldWUge1xyXG5cdHB1YmxpYyBwcmU6IEFycmF5PE1lc2g+O1xyXG5cdHB1YmxpYyBvcGFxdWU6IEFycmF5PE1lc2g+O1xyXG5cdHB1YmxpYyB0cmFuc3BhcmVudDogQXJyYXk8TWVzaD47XHJcblx0cHVibGljIGRlYnVnUXVldWU6IEFycmF5PE1lc2g+O1xyXG5cdHB1YmxpYyBjb21wdXRlczogQXJyYXk8Q29tcHV0ZT47XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHR0aGlzLnByZSA9IFtdO1xyXG5cdFx0dGhpcy5vcGFxdWUgPSBbXTtcclxuXHRcdHRoaXMudHJhbnNwYXJlbnQgPSBbXTtcclxuXHRcdHRoaXMuY29tcHV0ZXMgPSBbXTtcclxuXHRcdHRoaXMuZGVidWdRdWV1ZSA9IFtdO1xyXG5cdH1cclxuXHRzb3J0KCkge1xyXG5cdFx0UmVuZGVyUXVldWUuc29ydCh0aGlzLm9wYXF1ZSwgMCwgdGhpcy5vcGFxdWUubGVuZ3RoLCBSZW5kZXJRdWV1ZS5fY29tcGFyZUZyb21OZWFyVG9GYXIpO1xyXG5cdFx0UmVuZGVyUXVldWUuc29ydCh0aGlzLnRyYW5zcGFyZW50LCAwLCB0aGlzLnRyYW5zcGFyZW50Lmxlbmd0aCwgUmVuZGVyUXVldWUuX2NvbXBhcmVGcm9tRmFyVG9OZWFyKTtcclxuXHR9XHJcblx0b3BhcXVlUmVuZGVyKFxyXG5cdFx0Y2FtZXJhOiBDYW1lcmEsXHJcblx0XHRjb250ZXh0OiBDb250ZXh0LFxyXG5cdFx0cGFzc0VuY29kZXI/OiBHUFVSZW5kZXJQYXNzRW5jb2RlcixcclxuXHRcdHJlcGxhY2VNYXRlcmlhbD86IE1hdGVyaWFsLFxyXG5cdFx0Y29tbWFuZFN1YlR5cGU/OiBDb21tYW5kU3ViVHlwZSxcclxuXHRcdGxpZ2h0TWFuZ2VyPzogTGlnaHRNYW5nZXJcclxuXHQpIHtcclxuXHRcdHRoaXMub3BhcXVlLm1hcCgobWVzaCkgPT4ge1xyXG5cdFx0XHRpZiAoIW1lc2gucmVhZHkpIHJldHVybjtcclxuXHRcdFx0bWVzaC5iZWZvcmVSZW5kZXIoKTtcclxuXHRcdFx0UmVuZGVyUXVldWUuZXhjdXRlQ29tbWFuZChcclxuXHRcdFx0XHRtZXNoLmdldERyYXdDb21tYW5kKHJlcGxhY2VNYXRlcmlhbCwgY29tbWFuZFN1YlR5cGUsIGxpZ2h0TWFuZ2VyKSxcclxuXHRcdFx0XHRjb250ZXh0LFxyXG5cdFx0XHRcdHBhc3NFbmNvZGVyLFxyXG5cdFx0XHRcdGNhbWVyYVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRtZXNoLmFmdGVyUmVuZGVyKCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0dHJhbnNwYXJlbnRSZW5kZXIoXHJcblx0XHRjYW1lcmE6IENhbWVyYSxcclxuXHRcdGNvbnRleHQ6IENvbnRleHQsXHJcblx0XHRwYXNzRW5jb2Rlcj86IEdQVVJlbmRlclBhc3NFbmNvZGVyLFxyXG5cdFx0cmVwbGFjZU1hdGVyaWFsPzogTWF0ZXJpYWwsXHJcblx0XHRjb21tYW5kU3ViVHlwZT86IENvbW1hbmRTdWJUeXBlLFxyXG5cdFx0bGlnaHRNYW5nZXI/OiBMaWdodE1hbmdlclxyXG5cdCkge1xyXG5cdFx0dGhpcy50cmFuc3BhcmVudC5tYXAoKG1lc2gpID0+IHtcclxuXHRcdFx0aWYgKCFtZXNoLnJlYWR5KSByZXR1cm47XHJcblx0XHRcdG1lc2guYmVmb3JlUmVuZGVyKCk7XHJcblx0XHRcdFJlbmRlclF1ZXVlLmV4Y3V0ZUNvbW1hbmQoXHJcblx0XHRcdFx0bWVzaC5nZXREcmF3Q29tbWFuZChyZXBsYWNlTWF0ZXJpYWwsIGNvbW1hbmRTdWJUeXBlLCBsaWdodE1hbmdlciksXHJcblx0XHRcdFx0Y29udGV4dCxcclxuXHRcdFx0XHRwYXNzRW5jb2RlcixcclxuXHRcdFx0XHRjYW1lcmFcclxuXHRcdFx0KTtcclxuXHRcdFx0bWVzaC5hZnRlclJlbmRlcigpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdGNvbXB1dGVSZW5kZXIoY29udGV4dDogQ29udGV4dCwgcGFzc0VuY29kZXI/OiBHUFVDb21wdXRlUGFzc0VuY29kZXIpIHtcclxuXHRcdHRoaXMuY29tcHV0ZXMubWFwKChjb21wdXRlKSA9PiB7XHJcblx0XHRcdFJlbmRlclF1ZXVlLmV4Y3V0ZUNvbXB1dGUoY29tcHV0ZS5nZXRDb21tYW5kKCksIGNvbnRleHQsIHBhc3NFbmNvZGVyKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRkZWJ1Z1F1ZXVlUmVuZGVyKFxyXG5cdFx0Y2FtZXJhOiBDYW1lcmEsXHJcblx0XHRjb250ZXh0OiBDb250ZXh0LFxyXG5cdFx0cGFzc0VuY29kZXI/OiBHUFVSZW5kZXJQYXNzRW5jb2RlcixcclxuXHRcdHJlcGxhY2VNYXRlcmlhbD86IE1hdGVyaWFsLFxyXG5cdFx0Y29tbWFuZFN1YlR5cGU/OiBDb21tYW5kU3ViVHlwZVxyXG5cdCkge1xyXG5cdFx0dGhpcy5kZWJ1Z1F1ZXVlLm1hcCgobWVzaCkgPT4ge1xyXG5cdFx0XHRpZiAoIW1lc2gucmVhZHkpIHJldHVybjtcclxuXHRcdFx0bWVzaC5iZWZvcmVSZW5kZXIoKTtcclxuXHRcdFx0UmVuZGVyUXVldWUuZXhjdXRlQ29tbWFuZChcclxuXHRcdFx0XHRtZXNoLmdldERyYXdDb21tYW5kKHJlcGxhY2VNYXRlcmlhbCwgY29tbWFuZFN1YlR5cGUpLFxyXG5cdFx0XHRcdGNvbnRleHQsXHJcblx0XHRcdFx0cGFzc0VuY29kZXIsXHJcblx0XHRcdFx0Y2FtZXJhXHJcblx0XHRcdCk7XHJcblx0XHRcdG1lc2guYWZ0ZXJSZW5kZXIoKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRwcmVSZW5kZXIoY2FtZXJhOiBDYW1lcmEsIGNvbnRleHQ6IENvbnRleHQsIHBhc3NFbmNvZGVyPzogR1BVUmVuZGVyUGFzc0VuY29kZXIsIHJlcGxhY2VNYXRlcmlhbD86IE1hdGVyaWFsKSB7XHJcblx0XHR0aGlzLnByZS5tYXAoKG1lc2gpID0+IHtcclxuXHRcdFx0aWYgKCFtZXNoLnJlYWR5KSByZXR1cm47XHJcblx0XHRcdG1lc2guYmVmb3JlUmVuZGVyKCk7XHJcblx0XHRcdFJlbmRlclF1ZXVlLmV4Y3V0ZUNvbW1hbmQobWVzaC5nZXREcmF3Q29tbWFuZCgpLCBjb250ZXh0LCBwYXNzRW5jb2RlciwgY2FtZXJhKTtcclxuXHRcdFx0bWVzaC5hZnRlclJlbmRlcigpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHN0YXRpYyBleGN1dGVDb21tYW5kKGNvbW1hbmQ6IERyYXdDb21tYW5kLCBjb250ZXh0PzogQ29udGV4dCwgcGFzc0VuY29kZXI/OiBHUFVSZW5kZXJQYXNzRW5jb2RlciwgY2FtZXJhPzogQ2FtZXJhKSB7XHJcblx0XHRjb21tYW5kLnJlbmRlcihjb250ZXh0LCBwYXNzRW5jb2RlciwgY2FtZXJhKTtcclxuXHR9XHJcblx0c3RhdGljIGV4Y3V0ZUNvbXB1dGUoY29tbWFuZDogQ29tcHV0ZUNvbW1hbmQsIGNvbnRleHQ/OiBDb250ZXh0LCBwYXNzRW5jb2Rlcj86IEdQVUNvbXB1dGVQYXNzRW5jb2Rlcikge1xyXG5cdFx0Y29tbWFuZC5yZW5kZXIoY29udGV4dCwgcGFzc0VuY29kZXIpO1xyXG5cdH1cclxuXHRyZXNldCgpIHtcclxuXHRcdHRoaXMucHJlID0gW107XHJcblx0XHR0aGlzLm9wYXF1ZSA9IFtdO1xyXG5cdFx0dGhpcy50cmFuc3BhcmVudCA9IFtdO1xyXG5cdFx0dGhpcy5jb21wdXRlcyA9IFtdO1xyXG5cdFx0dGhpcy5kZWJ1Z1F1ZXVlID0gW107XHJcblx0fVxyXG5cdHN0YXRpYyBfY29tcGFyZUZyb21OZWFyVG9GYXIoYTogTWVzaCwgYjogTWVzaCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHkgfHwgYS5kaXN0YW5jZVRvQ2FtZXJhIC0gYi5kaXN0YW5jZVRvQ2FtZXJhO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIF9jb21wYXJlRnJvbUZhclRvTmVhcihhOiBNZXNoLCBiOiBNZXNoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eSB8fCBiLmRpc3RhbmNlVG9DYW1lcmEgLSBhLmRpc3RhbmNlVG9DYW1lcmE7XHJcblx0fVxyXG5cdC8vYWNjb3JkaW5nIHRvIGNhbWVyYSBkaXN0YW5jZVxyXG5cdHN0YXRpYyBzb3J0PFQ+KGluc2F0bmNlOiBUW10sIGZyb206IG51bWJlciwgdG86IG51bWJlciwgY29tcGFyZUZ1bmM6IEZ1bmN0aW9uKTogdm9pZCB7XHJcblx0XHRSZW5kZXJRdWV1ZS5fcXVpY2tTb3J0KGluc2F0bmNlLCBmcm9tLCB0bywgY29tcGFyZUZ1bmMpO1xyXG5cdH1cclxuXHQvL2Zyb20gaHR0cHM6Ly9naXRodWIuY29tL29hc2lzLWVuZ2luZS9lbmdpbmUvYmxvYi9tYWluL3BhY2thZ2VzL2NvcmUvc3JjL1JlbmRlclBpcGVsaW5lL1JlbmRlclF1ZXVlLnRzXHJcblx0cHJpdmF0ZSBzdGF0aWMgX3F1aWNrU29ydDxUPihhOiBUW10sIGZyb206IG51bWJlciwgdG86IG51bWJlciwgY29tcGFyZUZ1bmM6IEZ1bmN0aW9uKTogdm9pZCB7XHJcblx0XHR3aGlsZSAodHJ1ZSkge1xyXG5cdFx0XHQvLyBJbnNlcnRpb24gc29ydCBpcyBmYXN0ZXIgZm9yIHNob3J0IGFycmF5cy5cclxuXHRcdFx0aWYgKHRvIC0gZnJvbSA8PSAxMCkge1xyXG5cdFx0XHRcdFJlbmRlclF1ZXVlLl9pbnNlcnRpb25Tb3J0KGEsIGZyb20sIHRvLCBjb21wYXJlRnVuYyk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IHRoaXJkX2luZGV4ID0gKGZyb20gKyB0bykgPj4gMTtcclxuXHRcdFx0Ly8gRmluZCBhIHBpdm90IGFzIHRoZSBtZWRpYW4gb2YgZmlyc3QsIGxhc3QgYW5kIG1pZGRsZSBlbGVtZW50LlxyXG5cdFx0XHRsZXQgdjAgPSBhW2Zyb21dO1xyXG5cdFx0XHRsZXQgdjEgPSBhW3RvIC0gMV07XHJcblx0XHRcdGxldCB2MiA9IGFbdGhpcmRfaW5kZXhdO1xyXG5cdFx0XHRjb25zdCBjMDEgPSBjb21wYXJlRnVuYyh2MCwgdjEpO1xyXG5cdFx0XHRpZiAoYzAxID4gMCkge1xyXG5cdFx0XHRcdC8vIHYxIDwgdjAsIHNvIHN3YXAgdGhlbS5cclxuXHRcdFx0XHRjb25zdCB0bXAgPSB2MDtcclxuXHRcdFx0XHR2MCA9IHYxO1xyXG5cdFx0XHRcdHYxID0gdG1wO1xyXG5cdFx0XHR9IC8vIHYwIDw9IHYxLlxyXG5cdFx0XHRjb25zdCBjMDIgPSBjb21wYXJlRnVuYyh2MCwgdjIpO1xyXG5cdFx0XHRpZiAoYzAyID49IDApIHtcclxuXHRcdFx0XHQvLyB2MiA8PSB2MCA8PSB2MS5cclxuXHRcdFx0XHRjb25zdCB0bXAgPSB2MDtcclxuXHRcdFx0XHR2MCA9IHYyO1xyXG5cdFx0XHRcdHYyID0gdjE7XHJcblx0XHRcdFx0djEgPSB0bXA7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gdjAgPD0gdjEgJiYgdjAgPCB2MlxyXG5cdFx0XHRcdGNvbnN0IGMxMiA9IGNvbXBhcmVGdW5jKHYxLCB2Mik7XHJcblx0XHRcdFx0aWYgKGMxMiA+IDApIHtcclxuXHRcdFx0XHRcdC8vIHYwIDw9IHYyIDwgdjFcclxuXHRcdFx0XHRcdGNvbnN0IHRtcCA9IHYxO1xyXG5cdFx0XHRcdFx0djEgPSB2MjtcclxuXHRcdFx0XHRcdHYyID0gdG1wO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyB2MCA8PSB2MSA8PSB2MlxyXG5cdFx0XHRhW2Zyb21dID0gdjA7XHJcblx0XHRcdGFbdG8gLSAxXSA9IHYyO1xyXG5cdFx0XHRjb25zdCBwaXZvdCA9IHYxO1xyXG5cdFx0XHRsZXQgbG93X2VuZCA9IGZyb20gKyAxOyAvLyBVcHBlciBib3VuZCBvZiBlbGVtZW50cyBsb3dlciB0aGFuIHBpdm90LlxyXG5cdFx0XHRsZXQgaGlnaF9zdGFydCA9IHRvIC0gMTsgLy8gTG93ZXIgYm91bmQgb2YgZWxlbWVudHMgZ3JlYXRlciB0aGFuIHBpdm90LlxyXG5cdFx0XHRhW3RoaXJkX2luZGV4XSA9IGFbbG93X2VuZF07XHJcblx0XHRcdGFbbG93X2VuZF0gPSBwaXZvdDtcclxuXHJcblx0XHRcdC8vIEZyb20gbG93X2VuZCB0byBpIGFyZSBlbGVtZW50cyBlcXVhbCB0byBwaXZvdC5cclxuXHRcdFx0Ly8gRnJvbSBpIHRvIGhpZ2hfc3RhcnQgYXJlIGVsZW1lbnRzIHRoYXQgaGF2ZW4ndCBiZWVuIGNvbXBhcmVkIHlldC5cclxuXHRcdFx0cGFydGl0aW9uOiBmb3IgKGxldCBpID0gbG93X2VuZCArIDE7IGkgPCBoaWdoX3N0YXJ0OyBpKyspIHtcclxuXHRcdFx0XHRsZXQgZWxlbWVudCA9IGFbaV07XHJcblx0XHRcdFx0bGV0IG9yZGVyID0gY29tcGFyZUZ1bmMoZWxlbWVudCwgcGl2b3QpO1xyXG5cdFx0XHRcdGlmIChvcmRlciA8IDApIHtcclxuXHRcdFx0XHRcdGFbaV0gPSBhW2xvd19lbmRdO1xyXG5cdFx0XHRcdFx0YVtsb3dfZW5kXSA9IGVsZW1lbnQ7XHJcblx0XHRcdFx0XHRsb3dfZW5kKys7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChvcmRlciA+IDApIHtcclxuXHRcdFx0XHRcdGRvIHtcclxuXHRcdFx0XHRcdFx0aGlnaF9zdGFydC0tO1xyXG5cdFx0XHRcdFx0XHRpZiAoaGlnaF9zdGFydCA9PSBpKSBicmVhayBwYXJ0aXRpb247XHJcblx0XHRcdFx0XHRcdGNvbnN0IHRvcF9lbGVtID0gYVtoaWdoX3N0YXJ0XTtcclxuXHRcdFx0XHRcdFx0b3JkZXIgPSBjb21wYXJlRnVuYyh0b3BfZWxlbSwgcGl2b3QpO1xyXG5cdFx0XHRcdFx0fSB3aGlsZSAob3JkZXIgPiAwKTtcclxuXHRcdFx0XHRcdGFbaV0gPSBhW2hpZ2hfc3RhcnRdO1xyXG5cdFx0XHRcdFx0YVtoaWdoX3N0YXJ0XSA9IGVsZW1lbnQ7XHJcblx0XHRcdFx0XHRpZiAob3JkZXIgPCAwKSB7XHJcblx0XHRcdFx0XHRcdGVsZW1lbnQgPSBhW2ldO1xyXG5cdFx0XHRcdFx0XHRhW2ldID0gYVtsb3dfZW5kXTtcclxuXHRcdFx0XHRcdFx0YVtsb3dfZW5kXSA9IGVsZW1lbnQ7XHJcblx0XHRcdFx0XHRcdGxvd19lbmQrKztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRvIC0gaGlnaF9zdGFydCA8IGxvd19lbmQgLSBmcm9tKSB7XHJcblx0XHRcdFx0dGhpcy5fcXVpY2tTb3J0KGEsIGhpZ2hfc3RhcnQsIHRvLCBjb21wYXJlRnVuYyk7XHJcblx0XHRcdFx0dG8gPSBsb3dfZW5kO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuX3F1aWNrU29ydChhLCBmcm9tLCBsb3dfZW5kLCBjb21wYXJlRnVuYyk7XHJcblx0XHRcdFx0ZnJvbSA9IGhpZ2hfc3RhcnQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0cHJpdmF0ZSBzdGF0aWMgX2luc2VydGlvblNvcnQ8VD4oYTogVFtdLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIGNvbXBhcmVGdW5jOiBGdW5jdGlvbik6IHZvaWQge1xyXG5cdFx0Zm9yIChsZXQgaSA9IGZyb20gKyAxOyBpIDwgdG87IGkrKykge1xyXG5cdFx0XHRsZXQgajtcclxuXHRcdFx0Y29uc3QgZWxlbWVudCA9IGFbaV07XHJcblx0XHRcdGZvciAoaiA9IGkgLSAxOyBqID49IGZyb207IGotLSkge1xyXG5cdFx0XHRcdGNvbnN0IHRtcCA9IGFbal07XHJcblx0XHRcdFx0Y29uc3Qgb3JkZXIgPSBjb21wYXJlRnVuYyh0bXAsIGVsZW1lbnQpO1xyXG5cdFx0XHRcdGlmIChvcmRlciA+IDApIHtcclxuXHRcdFx0XHRcdGFbaiArIDFdID0gdG1wO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0YVtqICsgMV0gPSBlbGVtZW50O1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBTY2VuZSB9IGZyb20gXCIuLi9TY2VuZVwiO1xyXG5pbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XHJcbmltcG9ydCBDb2xvciBmcm9tIFwiLi4vbWF0aC9Db2xvclwiO1xyXG5pbXBvcnQgUGFzcyBmcm9tIFwiLi4vcGFzcy9QYXNzXCI7XHJcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9yZW5kZXIvQ29udGV4dFwiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcclxuaW1wb3J0IGNvbWJpbmUgZnJvbSBcIi4uL3V0aWxzL2NvbWJpbmVcIjtcclxuaW1wb3J0IEN1bGxpbmdWb2x1bWUgZnJvbSBcIi4vQ3VsbGluZ1ZvbHVtZVwiO1xyXG5pbXBvcnQgTGlnaHRNYW5nZXIgZnJvbSBcIi4vTGlnaHRNYW5nZXJcIjtcclxuaW1wb3J0IFJlbmRlclF1ZXVlIGZyb20gXCIuL1JlbmRlclF1ZXVlXCI7XHJcblxyXG5pbnRlcmZhY2UgRnJhbWVTdGF0ZU9wdGlvbnMge1xyXG5cdGJhY2tncm91bmQ/OiBCYWNrZ3JvdW5kO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEJhY2tncm91bmQge1xyXG5cdHZhbHVlOiBDb2xvciB8IFRleHR1cmU7XHJcblx0b3BhY2l0eTogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRnJhbWVTdGF0ZSB7XHJcblx0cHVibGljIGJhY2tncm91bmQ6IEJhY2tncm91bmQ7XHJcblx0cHVibGljIHBhc3M6IFBhc3M7XHJcblx0cHVibGljIHJlbmRlclF1ZXVlOiBSZW5kZXJRdWV1ZTtcclxuXHRwdWJsaWMgZHJhd0NhbGxudW1zOiBudW1iZXI7XHJcblx0cHVibGljIGdlb21ldHJ5TWVtb3J5OiBudW1iZXI7XHJcblx0cHVibGljIHRleHR1cmVNZW1vcnk6IG51bWJlcjtcclxuXHRwdWJsaWMgZnJhbWVOdW1iZXI6IG51bWJlcjtcclxuXHRwdWJsaWMgY3VsbGluZ1ZvbHVtZTogQ3VsbGluZ1ZvbHVtZTtcclxuXHRwdWJsaWMgZGVmaW5lc0RpcnR5OiBib29sZWFuO1xyXG5cdHByaXZhdGUgX2RlZmluZXM6IG9iamVjdDtcclxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgY29udGV4dDogQ29udGV4dCwgcHVibGljIGxpZ2h0TWFuZ2VyPzogTGlnaHRNYW5nZXIsIG9wdGlvbnM6IEZyYW1lU3RhdGVPcHRpb25zID0ge30pIHtcclxuXHRcdHRoaXMuYmFja2dyb3VuZCA9IG9wdGlvbnMuYmFja2dyb3VuZDtcclxuXHRcdHRoaXMucmVuZGVyUXVldWUgPSBuZXcgUmVuZGVyUXVldWUoKTtcclxuXHRcdHRoaXMuZ2VvbWV0cnlNZW1vcnkgPSAwO1xyXG5cdFx0dGhpcy50ZXh0dXJlTWVtb3J5ID0gMDtcclxuXHRcdHRoaXMuZnJhbWVOdW1iZXIgPSAwO1xyXG5cdFx0dGhpcy5fZGVmaW5lcyA9IHt9O1xyXG5cdFx0dGhpcy5kZWZpbmVzRGlydHkgPSB0cnVlO1xyXG5cdH1cclxuXHRnZXQgZGVmaW5lcygpIHtcclxuXHRcdHJldHVybiB0aGlzLl9kZWZpbmVzO1xyXG5cdH1cclxuXHRzZXQgZGVmaW5lcyh2YWx1ZSkge1xyXG5cdFx0dGhpcy5kZWZpbmVzRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fZGVmaW5lcyA9IGNvbWJpbmUodmFsdWUsIHRoaXMuX2RlZmluZXMsIGZhbHNlKTtcclxuXHR9XHJcblx0dXBkYXRlKGNhbWVyYTogQ2FtZXJhLCBvcHRpb25zOiBGcmFtZVN0YXRlT3B0aW9ucyA9IHt9KSB7XHJcblx0XHR0aGlzLmJhY2tncm91bmQgPSBvcHRpb25zLmJhY2tncm91bmQ7XHJcblxyXG5cdFx0dGhpcy5yZW5kZXJRdWV1ZS5yZXNldCgpO1xyXG5cdFx0dGhpcz8ubGlnaHRNYW5nZXI/LnVwZGF0ZT8uKHRoaXMsIGNhbWVyYSk7XHJcblx0XHR0aGlzLmN1bGxpbmdWb2x1bWUgPSBjYW1lcmEuZ2V0Q3VsbGluZ1ZvbHVtZSgpO1xyXG5cdFx0dGhpcy5mcmFtZU51bWJlciArPSAxO1xyXG5cdH1cclxuXHJcblx0cmVzZXRDdWxsaW5nVm9sdW1lKGNhbWVyYTogQ2FtZXJhKSB7XHJcblx0XHR0aGlzLmN1bGxpbmdWb2x1bWUgPSBjYW1lcmEuZ2V0Q3VsbGluZ1ZvbHVtZSgpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldEZyYW1lU3RhdGVPcHRpb25zQnlTY2VuZShzY2VuZUluc3RhbmNlOiBTY2VuZSkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0YmFja2dyb3VuZDogc2NlbmVJbnN0YW5jZS5iYWNrZ3JvdW5kXHJcblx0XHR9O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBMaWdodFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XHJcbmltcG9ydCBWZWN0b3I0IGZyb20gXCIuLi9tYXRoL1ZlY3RvcjRcIjtcclxuaW1wb3J0IHsgTGlnaHQgfSBmcm9tIFwiLi9MaWdodFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFtYmllbnRMaWdodCBleHRlbmRzIExpZ2h0IHtcclxuXHRwcml2YXRlIF9jb2xvckFuZEludGVuc2l0eTogVmVjdG9yNDtcclxuXHRjb25zdHJ1Y3Rvcihjb2xvcjogVmVjdG9yMywgaW50ZW5zaXR5OiBudW1iZXIpIHtcclxuXHRcdHN1cGVyKGNvbG9yLCBpbnRlbnNpdHkpO1xyXG5cdFx0dGhpcy5saWdodFR5cGUgPSBMaWdodFR5cGUuQW1iaWVudExpZ2h0O1xyXG5cdFx0dGhpcy5fY29sb3JBbmRJbnRlbnNpdHkgPSBuZXcgVmVjdG9yNChjb2xvci54LCBjb2xvci55LCBjb2xvci56LCBpbnRlbnNpdHkpO1xyXG5cdH1cclxuXHRnZXQgQ29sb3JBbmRJbnRlbnNpdHkoKSB7XHJcblx0XHR0aGlzLl9jb2xvckFuZEludGVuc2l0eS5zZXQodGhpcy5jb2xvci54LCB0aGlzLmNvbG9yLnksIHRoaXMuY29sb3IueiwgdGhpcy5pbnRlbnNpdHkpO1xyXG5cdFx0cmV0dXJuIHRoaXMuX2NvbG9yQW5kSW50ZW5zaXR5O1xyXG5cdH1cclxufVxyXG4vLyBsaWdodC5jb2xvciApLm11bHRpcGx5U2NhbGFyKCBsaWdodC5pbnRlbnNpdHkgKiBzY2FsZUZhY3RvciApO1xyXG4iLCJpbXBvcnQgeyBBbWJpZW50TGlnaHQgfSBmcm9tIFwiLi4vbGlnaHQvQW1iaWVudExpZ2h0XCI7XHJcbmltcG9ydCB7IERpcmVjdGlvbmFsTGlnaHQgfSBmcm9tIFwiLi4vbGlnaHQvRGlyZWN0aW9uYWxMaWdodFwiO1xyXG5pbXBvcnQgeyBQb2ludExpZ2h0IH0gZnJvbSBcIi4uL2xpZ2h0L1BvaW50TGlnaHRcIjtcclxuaW1wb3J0IHsgU3BvdExpZ2h0IH0gZnJvbSBcIi4uL2xpZ2h0L1Nwb3RMaWdodFwiO1xyXG5pbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4vRnJhbWVTdGF0ZVwiO1xyXG5pbXBvcnQgU2hhZGVyRGF0YSBmcm9tIFwiLi4vcmVuZGVyL1NoYWRlckRhdGFcIjtcclxuaW1wb3J0IHtcclxuXHRUZXh0dXJlVXNhZ2UsXHJcblx0QnVmZmVyVXNhZ2UsXHJcblx0VGV4dHVyZUZvcm1hdCxcclxuXHRDb21wYXJlRnVuY3Rpb24sXHJcblx0U2FtcGxlckJpbmRpbmdUeXBlLFxyXG5cdFRleHR1cmVTYW1wbGVUeXBlLFxyXG5cdFRleHR1cmVWaWV3RGltZW5zaW9uLFxyXG5cdEJ1ZmZlckJpbmRpbmdUeXBlXHJcbn0gZnJvbSBcIi4vV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XHJcbmltcG9ydCBDYW1lcmEgZnJvbSBcIi4uL2NhbWVyYS9DYW1lcmFcIjtcclxuaW1wb3J0IHsgTGlnaHQgfSBmcm9tIFwiLi4vbGlnaHQvTGlnaHRcIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xyXG5pbXBvcnQgeyBMaWdodE1hbmdlck9wdGlvbnMsIExpZ2h0VHlwZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5pbXBvcnQgU2FtcGxlciBmcm9tIFwiLi4vcmVuZGVyL1NhbXBsZXJcIjtcclxuaW1wb3J0IHsgVW5pZm9ybUVudW0gfSBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1zXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaWdodE1hbmdlciB7XHJcblx0bGlnaHRVbmlmb3JtQnVmZmVyOiBVbmlmb3JtQnVmZmVyO1xyXG5cdHNoYWRvd1VuaWZvcm1CdWZmZXI6IFVuaWZvcm1CdWZmZXI7XHJcblx0cG9pbnRMaWdodHM6IFBvaW50TGlnaHRbXTtcclxuXHJcblx0c3BvdExpZ2h0czogU3BvdExpZ2h0W107XHJcblxyXG5cdGRpcmVjdExpZ2h0czogRGlyZWN0aW9uYWxMaWdodFtdO1xyXG5cclxuXHRhbWJpZW50TGlnaHQ6IEFtYmllbnRMaWdodDtcclxuXHJcblx0bGlnaHRTaGFkZXJEYXRhOiBTaGFkZXJEYXRhO1xyXG5cclxuXHRsaWdodENvdW50RGlydHk6IGJvb2xlYW47XHJcblxyXG5cdHByaXZhdGUgb3BlblNoYWRvdzogYm9vbGVhbjtcclxuXHRzcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXk6IFRleHR1cmU7XHJcblx0cG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheTogVGV4dHVyZTtcclxuXHRkaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheTogVGV4dHVyZTtcclxuXHRfdGVzdFRleHR1cmU6IFRleHR1cmU7XHJcblxyXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IExpZ2h0TWFuZ2VyT3B0aW9ucykge1xyXG5cdFx0dGhpcy5zcG90TGlnaHRzID0gW107XHJcblx0XHR0aGlzLnBvaW50TGlnaHRzID0gW107XHJcblx0XHR0aGlzLmRpcmVjdExpZ2h0cyA9IFtdO1xyXG5cdFx0dGhpcy5hbWJpZW50TGlnaHQgPSBuZXcgQW1iaWVudExpZ2h0KG5ldyBWZWN0b3IzKDEuMCwgMS4wLCAxLjApLCAwLjIpO1xyXG5cdFx0dGhpcy5saWdodENvdW50RGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5vcGVuU2hhZG93ID0gb3B0aW9ucy5vcGVuU2hhZG93O1xyXG5cdH1cclxuXHR1cGRhdGUoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSwgY2FtZXJhOiBDYW1lcmEpIHtcclxuXHRcdHRoaXMuY2hlY2tMaWdodFNoYWRvd1N0YXRlKCk7XHJcblx0XHR0aGlzLnVwZGF0ZUxpZ2h0KGNhbWVyYSk7XHJcblx0fVxyXG5cdGFkZChsaWdodDogTGlnaHQpIHtcclxuXHRcdHRoaXMubGlnaHRDb3VudERpcnR5ID0gdHJ1ZTtcclxuXHRcdGlmIChsaWdodC5saWdodFR5cGUgPT0gTGlnaHRUeXBlLkFtYmllbnRMaWdodCkge1xyXG5cdFx0XHR0aGlzLmFtYmllbnRMaWdodCA9IDxBbWJpZW50TGlnaHQ+bGlnaHQ7XHJcblx0XHR9IGVsc2UgaWYgKGxpZ2h0LmxpZ2h0VHlwZSA9PSBMaWdodFR5cGUuRGlyZWN0aW9uYWxMaWdodCkge1xyXG5cdFx0XHR0aGlzLmRpcmVjdExpZ2h0cy5wdXNoKDxEaXJlY3Rpb25hbExpZ2h0PmxpZ2h0KTtcclxuXHRcdH0gZWxzZSBpZiAobGlnaHQubGlnaHRUeXBlID09IExpZ2h0VHlwZS5Qb2ludExpZ2h0KSB7XHJcblx0XHRcdHRoaXMucG9pbnRMaWdodHMucHVzaCg8UG9pbnRMaWdodD5saWdodCk7XHJcblx0XHR9IGVsc2UgaWYgKGxpZ2h0LmxpZ2h0VHlwZSA9PSBMaWdodFR5cGUuU3BvdExpZ2h0KSB7XHJcblx0XHRcdHRoaXMuc3BvdExpZ2h0cy5wdXNoKDxTcG90TGlnaHQ+bGlnaHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZW1vdmUobGlnaHQ6IExpZ2h0KSB7XHJcblx0XHR0aGlzLmxpZ2h0Q291bnREaXJ0eSA9IHRydWU7XHJcblx0XHRpZiAobGlnaHQubGlnaHRUeXBlID09IExpZ2h0VHlwZS5BbWJpZW50TGlnaHQpIHtcclxuXHRcdFx0dGhpcy5hbWJpZW50TGlnaHQgPSBuZXcgQW1iaWVudExpZ2h0KG5ldyBWZWN0b3IzKDEuMCwgMS4wLCAxLjApLCAxLjApO1xyXG5cdFx0fSBlbHNlIGlmIChsaWdodC5saWdodFR5cGUgPT0gTGlnaHRUeXBlLkRpcmVjdGlvbmFsTGlnaHQpIHtcclxuXHRcdFx0dGhpcy5kaXJlY3RMaWdodHMuc3BsaWNlKHRoaXMuZGlyZWN0TGlnaHRzLmluZGV4T2YoPERpcmVjdGlvbmFsTGlnaHQ+bGlnaHQpLCAxKTtcclxuXHRcdH0gZWxzZSBpZiAobGlnaHQubGlnaHRUeXBlID09IExpZ2h0VHlwZS5Qb2ludExpZ2h0KSB7XHJcblx0XHRcdHRoaXMucG9pbnRMaWdodHMuc3BsaWNlKHRoaXMucG9pbnRMaWdodHMuaW5kZXhPZig8UG9pbnRMaWdodD5saWdodCksIDEpO1xyXG5cdFx0fSBlbHNlIGlmIChsaWdodC5saWdodFR5cGUgPT0gTGlnaHRUeXBlLlNwb3RMaWdodCkge1xyXG5cdFx0XHR0aGlzLnNwb3RMaWdodHMuc3BsaWNlKHRoaXMuc3BvdExpZ2h0cy5pbmRleE9mKDxTcG90TGlnaHQ+bGlnaHQpLCAxKTtcclxuXHRcdH1cclxuXHR9XHJcblx0Y2hlY2tMaWdodFNoYWRvd1N0YXRlKCkge1xyXG5cdFx0Y29uc3QgbGlnaHRzID0gdGhpcy5nZXRBbGxMaWdodHMoKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpZ2h0ID0gbGlnaHRzW2ldO1xyXG5cdFx0XHRpZiAobGlnaHQuc2hhZG93RGlydHkpIHtcclxuXHRcdFx0XHRsaWdodC5zaGFkb3dEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHRcdHRoaXMubGlnaHRDb3VudERpcnR5ID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dXBkYXRlTGlnaHRTaGFkb3coKSB7XHJcblx0XHRpZiAodGhpcy5zcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkpIHRoaXMuc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5LmRpcnR5ID0gdHJ1ZTtcclxuXHJcblx0XHRpZiAodGhpcy5wb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5KSB0aGlzLnBvaW50TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkuZGlydHkgPSB0cnVlO1xyXG5cclxuXHRcdGlmICh0aGlzLmRpcmVjdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5KSB0aGlzLmRpcmVjdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5LmRpcnR5ID0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgdXBkYXRlTGlnaHQoY2FtZXJhOiBDYW1lcmEpIHtcclxuXHRcdGlmICh0aGlzLmxpZ2h0Q291bnREaXJ0eSkge1xyXG5cdFx0XHR0aGlzLmxpZ2h0Q291bnREaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHRpZiAodGhpcy5saWdodFNoYWRlckRhdGEpIHRoaXMubGlnaHRTaGFkZXJEYXRhLmRlc3Ryb3koKTtcclxuXHRcdFx0dGhpcy5jcmVhdGVMaWdodFNoYWRlckRhdGEoKTtcclxuXHRcdH1cclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVhdGVMaWdodFNoYWRlckRhdGEoKSB7XHJcblx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YSA9IG5ldyBTaGFkZXJEYXRhKFwibGlnaHRcIiwgMCwgMiwgMik7XHJcblx0XHR0aGlzLmxpZ2h0VW5pZm9ybUJ1ZmZlciA9IG5ldyBVbmlmb3JtQnVmZmVyKHtcclxuXHRcdFx0bGFiZWw6IFwibGlnaHRcIixcclxuXHRcdFx0dHlwZTogQnVmZmVyQmluZGluZ1R5cGUuUmVhZE9ubHlTdG9yYWdlLFxyXG5cdFx0XHR1c2FnZTogQnVmZmVyVXNhZ2UuU3RvcmFnZSB8IEJ1ZmZlclVzYWdlLkNvcHlEc3RcclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldERlZmluZShcInNwb3RMaWdodHNDb3VudFwiLCB0aGlzLnNwb3RMaWdodHMubGVuZ3RoKTtcclxuXHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldERlZmluZShcInBvaW50TGlnaHRzQ291bnRcIiwgdGhpcy5wb2ludExpZ2h0cy5sZW5ndGgpO1xyXG5cdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0RGVmaW5lKFwiZGlydGVjdExpZ2h0c0NvdW50XCIsIHRoaXMuZGlyZWN0TGlnaHRzLmxlbmd0aCk7XHJcblx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YS5zZXREZWZpbmUoXCJhbWJpZW50TGlnaHRDb3VudFwiLCAxKTtcclxuXHRcdGlmICh0aGlzLmFtYmllbnRMaWdodClcclxuXHRcdFx0dGhpcy5saWdodFVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XHRcImFtYmllbnRMaWdodFwiLFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLmFtYmllbnRMaWdodC5Db2xvckFuZEludGVuc2l0eTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdFVuaWZvcm1FbnVtLkZsb2F0VmVjNFxyXG5cdFx0XHQpO1xyXG5cdFx0aWYgKHRoaXMuc3BvdExpZ2h0cy5sZW5ndGgpIHtcclxuXHRcdFx0Ly/liJ3lp4vljJbogZrlhYnnga9cclxuXHRcdFx0dGhpcy5saWdodFVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XHRcInNwb3RMaWdodHNcIixcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zcG90TGlnaHRzO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uU3BvdExpZ2h0cyxcclxuXHRcdFx0XHR0aGlzLnNwb3RMaWdodHMubGVuZ3RoXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5wb2ludExpZ2h0cy5sZW5ndGgpIHtcclxuXHRcdFx0Ly/ngrnlhYnmupBcclxuXHRcdFx0dGhpcy5saWdodFVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XHRcInBvaW50TGlnaHRzXCIsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMucG9pbnRMaWdodHM7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRVbmlmb3JtRW51bS5Qb2ludExpZ2h0cyxcclxuXHRcdFx0XHR0aGlzLnBvaW50TGlnaHRzLmxlbmd0aFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuZGlyZWN0TGlnaHRzLmxlbmd0aCkge1xyXG5cdFx0XHQvL+aWueWQkeWFiVxyXG5cdFx0XHR0aGlzLmxpZ2h0VW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcdFwiZGlyZWN0TGlnaHRzXCIsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZGlyZWN0TGlnaHRzO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uRGlydGVjdExpZ2h0cyxcclxuXHRcdFx0XHR0aGlzLmRpcmVjdExpZ2h0cy5sZW5ndGhcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRzaGFkb3dTaGFkZXJEYXRhOiB7XHJcblx0XHRcdGlmICh0aGlzLm9wZW5TaGFkb3cpIHtcclxuXHRcdFx0XHRjb25zdCBzcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkgPSAodGhpcy5zcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkgPVxyXG5cdFx0XHRcdFx0dGhpcy5jcmVhdGVTaGFkb3dNYXBUZXh0dXJlQXJyYXkodGhpcy5zcG90TGlnaHRzKSk7XHJcblx0XHRcdFx0Y29uc3QgcG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSA9ICh0aGlzLnBvaW50TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkgPVxyXG5cdFx0XHRcdFx0dGhpcy5jcmVhdGVTaGFkb3dNYXBUZXh0dXJlQXJyYXkodGhpcy5wb2ludExpZ2h0cykpO1xyXG5cdFx0XHRcdGNvbnN0IGRpcmVjdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5ID0gKHRoaXMuZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkgPVxyXG5cdFx0XHRcdFx0dGhpcy5jcmVhdGVTaGFkb3dNYXBUZXh0dXJlQXJyYXkodGhpcy5kaXJlY3RMaWdodHMpKTtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHQhc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5ICYmXHJcblx0XHRcdFx0XHQhcG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSAmJlxyXG5cdFx0XHRcdFx0IWRpcmVjdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5XHJcblx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0YnJlYWsgc2hhZG93U2hhZGVyRGF0YTtcclxuXHJcblx0XHRcdFx0Ly9kZWZpbmVcclxuXHRcdFx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YS5zZXREZWZpbmUoXCJvcGVuU2hhZG93XCIsIHRoaXMub3BlblNoYWRvdyk7XHJcblxyXG5cdFx0XHRcdC8vc2hhZG93VW5pZm9ybUJ1ZmZlclxyXG5cdFx0XHRcdHRoaXMuc2hhZG93VW5pZm9ybUJ1ZmZlciA9IG5ldyBVbmlmb3JtQnVmZmVyKHtcclxuXHRcdFx0XHRcdGxhYmVsOiBcInNoYWRvd1wiLFxyXG5cdFx0XHRcdFx0dHlwZTogQnVmZmVyQmluZGluZ1R5cGUuUmVhZE9ubHlTdG9yYWdlLFxyXG5cdFx0XHRcdFx0dXNhZ2U6IEJ1ZmZlclVzYWdlLlN0b3JhZ2UgfCBCdWZmZXJVc2FnZS5Db3B5RHN0XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdC8vbWF0cml4LG5lYXIsZmFyLi4uXHJcblx0XHRcdFx0Y29uc3Qgc3BvdExpZ2h0V2l0aFNoYWRvd0NvdW50ID0gdGhpcy5zZXRTaGFkb3dVbmlmb3JtKFxyXG5cdFx0XHRcdFx0XCJzcG90TGlnaHRTaGFkb3dzXCIsXHJcblx0XHRcdFx0XHR0aGlzLnNwb3RMaWdodHMsXHJcblx0XHRcdFx0XHRVbmlmb3JtRW51bS5TcG90TGlnaHRTaGFkb3dzXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRjb25zdCBwb2ludExpZ2h0V2l0aFNoYWRvd0NvdW50ID0gdGhpcy5zZXRTaGFkb3dVbmlmb3JtKFxyXG5cdFx0XHRcdFx0XCJwb2ludExpZ2h0U2hhZG93c1wiLFxyXG5cdFx0XHRcdFx0dGhpcy5wb2ludExpZ2h0cyxcclxuXHRcdFx0XHRcdFVuaWZvcm1FbnVtLlBvaW50TGlnaHRTaGFkb3dzXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRjb25zdCBkaXJlY3RMaWdodFdpdGhTaGFkb3dDb3VudCA9IHRoaXMuc2V0U2hhZG93VW5pZm9ybShcclxuXHRcdFx0XHRcdFwiZGlyZWN0TGlnaHRTaGFkb3dzXCIsXHJcblx0XHRcdFx0XHR0aGlzLmRpcmVjdExpZ2h0cyxcclxuXHRcdFx0XHRcdFVuaWZvcm1FbnVtLkRpcnRlY3RMaWdodFNoYWRvd3NcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldFVuaWZvcm1CdWZmZXIoXCJzaGFkb3dcIiwgdGhpcy5zaGFkb3dVbmlmb3JtQnVmZmVyKTtcclxuXHJcblx0XHRcdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0RGVmaW5lKFwic3BvdExpZ2h0U2hhZG93TWFwc0NvdW50XCIsIHNwb3RMaWdodFdpdGhTaGFkb3dDb3VudCk7XHJcblx0XHRcdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0RGVmaW5lKFwicG9pbnRMaWdodFNoYWRvd01hcHNDb3VudFwiLCBwb2ludExpZ2h0V2l0aFNoYWRvd0NvdW50KTtcclxuXHRcdFx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YS5zZXREZWZpbmUoXCJkaXJlY3RMaWdodFNoYWRvd01hcHNDb3VudFwiLCBkaXJlY3RMaWdodFdpdGhTaGFkb3dDb3VudCk7XHJcblxyXG5cdFx0XHRcdC8vdGV4dHVyZSxzYW1wbGVcclxuXHRcdFx0XHRpZiAoc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdGlmIChzcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkudGV4dHVyZVByb3Auc2l6ZS5kZXB0aCAhPSBzcG90TGlnaHRXaXRoU2hhZG93Q291bnQpXHJcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybihcInNwb3RMaWdodFNoYWRvd01hcCBhbGlnbiBoYXMgcHJvYmxlbVwiKTtcclxuXHRcdFx0XHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldFRleHR1cmUoXCJzcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXlcIiwgc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5KTtcclxuXHRcdFx0XHRcdC8vIHRoaXMuX3Rlc3RUZXh0dXJlID0gc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdGlmIChwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5LnRleHR1cmVQcm9wLnNpemUuZGVwdGggIT0gcG9pbnRMaWdodFdpdGhTaGFkb3dDb3VudClcclxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKFwicG9pbnRMaWdodFNoYWRvd01hcCBhbGlnbiBoYXMgcHJvYmxlbVwiKTtcclxuXHRcdFx0XHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldFRleHR1cmUoXCJwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5XCIsIHBvaW50TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkpO1xyXG5cdFx0XHRcdFx0Ly8gdGhpcy5fdGVzdFRleHR1cmUgPSBwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0aWYgKGRpcmVjdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5LnRleHR1cmVQcm9wLnNpemUuZGVwdGggIT0gZGlyZWN0TGlnaHRXaXRoU2hhZG93Q291bnQpXHJcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybihcImRpcmVjdExpZ2h0U2hhZG93TWFwIGFsaWduIGhhcyBwcm9ibGVtXCIpO1xyXG5cdFx0XHRcdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0VGV4dHVyZShcclxuXHRcdFx0XHRcdFx0XCJkaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheVwiLFxyXG5cdFx0XHRcdFx0XHRkaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdC8vIHRoaXMuX3Rlc3RUZXh0dXJlID0gZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXlcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0U2FtcGxlcihcclxuXHRcdFx0XHRcdFwic2hhZG93U2FtcGxlclwiLFxyXG5cdFx0XHRcdFx0bmV3IFNhbXBsZXIoeyBjb21wYXJlOiBDb21wYXJlRnVuY3Rpb24uTGVzcyB9LCB7IHR5cGU6IFNhbXBsZXJCaW5kaW5nVHlwZS5Db21wYXJpc29uIH0pXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHQvLyB0aGlzLmxpZ2h0U2hhZGVyRGF0YS5zZXRTYW1wbGVyKFwic2hhZG93U2FtcGxlclwiLCBuZXcgU2FtcGxlcigpKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldFVuaWZvcm1CdWZmZXIoXCJsaWdodFwiLCB0aGlzLmxpZ2h0VW5pZm9ybUJ1ZmZlcik7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0QWxsTGlnaHRzKCk6IEFycmF5PExpZ2h0PiB7XHJcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcclxuXHRcdHJldHVybiByZXN1bHQuY29uY2F0KHRoaXMuc3BvdExpZ2h0cywgdGhpcy5wb2ludExpZ2h0cywgdGhpcy5kaXJlY3RMaWdodHMpO1xyXG5cdH1cclxuXHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLmRlc3Ryb3koKTtcclxuXHRcdHRoaXMubGlnaHRVbmlmb3JtQnVmZmVyLmRlc3Ryb3koKTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZVNoYWRvd01hcFRleHR1cmVBcnJheShsaWdodHM6IEFycmF5PExpZ2h0Pikge1xyXG5cdFx0aWYgKGxpZ2h0cy5sZW5ndGggPD0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IHNoYWRvd01hcFNvdXJjZXMgPSBbXTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpZ2h0ID0gbGlnaHRzW2ldO1xyXG5cdFx0XHRpZiAobGlnaHQuc2hhZG93KSB7XHJcblx0XHRcdFx0Y29uc3Qgc2hhZG93TWFwVGV4dHVyZSA9IGxpZ2h0LnNoYWRvdy5nZXRTaGFkb3dNYXBUZXh0dXJlKCk7XHJcblx0XHRcdFx0Y29uc3Qgc2hhZG93TWFwU291cmNlID0ge1xyXG5cdFx0XHRcdFx0c291cmNlOiBzaGFkb3dNYXBUZXh0dXJlLFxyXG5cdFx0XHRcdFx0d2lkdGg6IHNoYWRvd01hcFRleHR1cmUudGV4dHVyZVByb3Auc2l6ZS53aWR0aCxcclxuXHRcdFx0XHRcdGhlaWdodDogc2hhZG93TWFwVGV4dHVyZS50ZXh0dXJlUHJvcC5zaXplLmhlaWdodCxcclxuXHRcdFx0XHRcdGRlcHRoOiAxLFxyXG5cdFx0XHRcdFx0eDogMCxcclxuXHRcdFx0XHRcdHk6IDAsXHJcblx0XHRcdFx0XHR6OiBpXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRzaGFkb3dNYXBTb3VyY2VzLnB1c2goc2hhZG93TWFwU291cmNlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChzaGFkb3dNYXBTb3VyY2VzLmxlbmd0aCA8PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGNvbnN0IHNoYWRvd01hcFRleHR1cmVBcnJheSA9IG5ldyBUZXh0dXJlKHtcclxuXHRcdFx0c2l6ZToge1xyXG5cdFx0XHRcdHdpZHRoOiBzaGFkb3dNYXBTb3VyY2VzWzBdLndpZHRoLFxyXG5cdFx0XHRcdGhlaWdodDogc2hhZG93TWFwU291cmNlc1swXS5oZWlnaHQsXHJcblx0XHRcdFx0ZGVwdGg6IHNoYWRvd01hcFNvdXJjZXMubGVuZ3RoXHJcblx0XHRcdH0sXHJcblx0XHRcdGZpeGVkU2l6ZTogdHJ1ZSxcclxuXHRcdFx0c2FtcGxlVHlwZTogVGV4dHVyZVNhbXBsZVR5cGUuRGVwdGgsXHJcblx0XHRcdGZvcm1hdDogVGV4dHVyZUZvcm1hdC5EZXB0aDI0UGx1cyxcclxuXHRcdFx0dXNhZ2U6IFRleHR1cmVVc2FnZS5UZXh0dXJlQmluZGluZyB8IFRleHR1cmVVc2FnZS5Db3B5RHN0LFxyXG5cdFx0XHRkYXRhOiBzaGFkb3dNYXBTb3VyY2VzLFxyXG5cdFx0XHR2aWV3Rm9ybWF0czogVGV4dHVyZVZpZXdEaW1lbnNpb24uRTJkQXJyYXlcclxuXHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiBzaGFkb3dNYXBUZXh0dXJlQXJyYXk7XHJcblx0fVxyXG5cclxuXHRzZXRTaGFkb3dVbmlmb3JtKHVuaWZvcm1OYW1lOiBzdHJpbmcsIGxpZ2h0czogQXJyYXk8TGlnaHQ+LCB1bmlmb3JtVHlwZTogVW5pZm9ybUVudW0pIHtcclxuXHRcdGlmIChsaWdodHMubGVuZ3RoKSB7XHJcblx0XHRcdGNvbnN0IGxpZ2h0V2l0aFNoYWRvd0FycmF5ID0gW107XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y29uc3QgbGlnaHQgPSBsaWdodHNbaV07XHJcblx0XHRcdFx0aWYgKCFsaWdodC5zaGFkb3cpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdGxpZ2h0V2l0aFNoYWRvd0FycmF5LnB1c2gobGlnaHQpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLnNoYWRvd1VuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XHR1bmlmb3JtTmFtZSxcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gbGlnaHRXaXRoU2hhZG93QXJyYXk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR1bmlmb3JtVHlwZSxcclxuXHRcdFx0XHRsaWdodFdpdGhTaGFkb3dBcnJheS5sZW5ndGhcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdHJldHVybiBsaWdodFdpdGhTaGFkb3dBcnJheS5sZW5ndGg7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDYW1lcmEgZnJvbSBcIi4uL2NhbWVyYS9DYW1lcmFcIjtcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi4vbWVzaC9NZXNoXCI7XG5pbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4vRnJhbWVTdGF0ZVwiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVzaE1hbmdlciB7XG5cdHByaXZhdGUgX2xpc3Q6IE1hcDxzdHJpbmcgfCBudW1iZXIsIE1lc2g+O1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLl9saXN0ID0gbmV3IE1hcCgpO1xuXHR9XG5cdGdldCBsZW5ndGgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2xpc3Quc2l6ZTtcblx0fVxuXHR1cGRhdGUoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSwgY2FtZXJhOiBDYW1lcmEpOiB2b2lkIHtcblx0XHR0aGlzLl9saXN0LmZvckVhY2goKGluc3RhbmNlKSA9PiB7XG5cdFx0XHRpbnN0YW5jZS51cGRhdGUoZnJhbWVTdGF0ZSwgY2FtZXJhKTtcblx0XHR9KTtcblx0fVxuXHRhZGQoaW5zdGFuY2U6IE1lc2gpOiBNZXNoIHtcblx0XHRpZiAodGhpcy5fbGlzdC5nZXQoaW5zdGFuY2UudWlkKSkgcmV0dXJuIHRoaXMuX2xpc3QuZ2V0KGluc3RhbmNlLnVpZCk7XG5cdFx0dGhpcy5fbGlzdC5zZXQoaW5zdGFuY2UudWlkLCBpbnN0YW5jZSk7XG5cdFx0cmV0dXJuIGluc3RhbmNlO1xuXHR9XG5cdHJlbW92ZShpbnN0YW5jZTogTWVzaCk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLl9saXN0LmdldChpbnN0YW5jZS51aWQpKSB7XG5cdFx0XHRpbnN0YW5jZS5kZXN0cm95KCk7XG5cdFx0XHR0aGlzLl9saXN0LmRlbGV0ZShpbnN0YW5jZS51aWQpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRjb250YWlucyhpbnN0YW5jZTogTWVzaCkge1xuXHRcdHJldHVybiAhIXRoaXMuX2xpc3QuZ2V0KGluc3RhbmNlLnVpZCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IFBhc3NUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IEF0dGFjaG1lbnQgZnJvbSBcIi4vQXR0YWNobWVudFwiO1xyXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi9Db250ZXh0XCI7XHJcbmltcG9ydCBRdWVyeVNldCBmcm9tIFwiLi9RdWVyeVNldFwiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi9UZXh0dXJlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZW5kZXJUYXJnZXQge1xyXG5cdHB1YmxpYyBjb250ZXh0OiBDb250ZXh0O1xyXG5cdHByaXZhdGUgX3JlbmRlclBhc3NEZXNjcmlwdG9yOiBHUFVSZW5kZXJQYXNzRGVzY3JpcHRvcjtcclxuXHRwcml2YXRlIHJlbmRlckVuY29kZXI6IEdQVVJlbmRlclBhc3NFbmNvZGVyO1xyXG5cdHByaXZhdGUgY29tbWFuZEVuY29kZXI6IEdQVUNvbW1hbmRFbmNvZGVyIHwgbnVsbDtcclxuXHRwcml2YXRlIGNvbXB1dGVFbmNvZGVyOiBHUFVDb21wdXRlUGFzc0VuY29kZXI7XHJcblx0dGV4dHVyZTogYW55O1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIHR5cGU6IFBhc3NUeXBlLFxyXG5cdFx0cHVibGljIGNvbG9yQXR0YWNobWVudHM6IEF0dGFjaG1lbnRbXSxcclxuXHRcdHB1YmxpYyBkZXB0aEF0dGFjaG1lbnQ/OiBBdHRhY2htZW50LFxyXG5cdFx0cHVibGljIHN0ZW5jaWxBdHRhY2htZW50PzogQXR0YWNobWVudCxcclxuXHRcdHB1YmxpYyBxdWVyeVNldD86IFF1ZXJ5U2V0XHJcblx0KSB7XHJcblx0XHR0aGlzLnJlbmRlckVuY29kZXIgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLmNvbXB1dGVFbmNvZGVyID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5fcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLmNvbW1hbmRFbmNvZGVyID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5jb250ZXh0ID0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHRnZXQgcmVuZGVyUGFzc0Rlc2NyaXB0b3IoKSB7XHJcblx0XHR0aGlzLl9yZW5kZXJQYXNzRGVzY3JpcHRvciA9IHRoaXMuZ2V0UmVuZGVyUGFzc0Rlc2NyaXB0b3IoKTtcclxuXHRcdHJldHVybiB0aGlzLl9yZW5kZXJQYXNzRGVzY3JpcHRvcjtcclxuXHR9XHJcblx0cHVibGljIGdldENvbG9yVGV4dHVyZShpbmRleCA9IDApOiBUZXh0dXJlIHtcclxuXHRcdGNvbnN0IGNvbEF0dCA9IHRoaXMuY29sb3JBdHRhY2htZW50c1tpbmRleF07XHJcblx0XHRpZiAoY29sQXR0KSB7XHJcblx0XHRcdHJldHVybiBjb2xBdHQudGV4dHVyZSBhcyBUZXh0dXJlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cdHB1YmxpYyBnZXREZXB0aFRleHR1cmUoKTogVGV4dHVyZSB7XHJcblx0XHRpZiAodGhpcy5kZXB0aEF0dGFjaG1lbnQpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZGVwdGhBdHRhY2htZW50LnRleHR1cmUgYXMgVGV4dHVyZTtcclxuXHRcdH1cclxuXHR9XHJcblx0cHJpdmF0ZSBnZXRSZW5kZXJQYXNzRGVzY3JpcHRvcigpOiBHUFVSZW5kZXJQYXNzRGVzY3JpcHRvciB8IG51bGwge1xyXG5cdFx0dGhpcy5jaGVja1NpemUoKTtcclxuXHRcdHRoaXMuZGVwdGhBdHRhY2htZW50Py50ZXh0dXJlPy51cGRhdGUodGhpcy5jb250ZXh0KTtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdC4uLih0aGlzLmNvbG9yQXR0YWNobWVudHMgJiYge1xyXG5cdFx0XHRcdGNvbG9yQXR0YWNobWVudHM6IHRoaXMuY29sb3JBdHRhY2htZW50cy5tYXAoKGNvbG9yQXR0YWNobWVudCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29sb3JBdHRhY2htZW50Py50ZXh0dXJlPy51cGRhdGUgJiYgY29sb3JBdHRhY2htZW50Py50ZXh0dXJlPy51cGRhdGUodGhpcy5jb250ZXh0KTtcclxuXHRcdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHRcdHZpZXc6XHJcblx0XHRcdFx0XHRcdFx0Ly8g5pqC5pe26L+Z5LmI5YaZXHJcblx0XHRcdFx0XHRcdFx0Y29sb3JBdHRhY2htZW50LnRleHR1cmUudGV4dHVyZVZpZXcgfHwgdW5kZWZpbmVkLFxyXG5cdFx0XHRcdFx0XHRyZXNvbHZlVGFyZ2V0OlxyXG5cdFx0XHRcdFx0XHRcdGNvbG9yQXR0YWNobWVudC5yZXNvbHZlVGFyZ2V0ICE9IHVuZGVmaW5lZFxyXG5cdFx0XHRcdFx0XHRcdFx0PyBjb2xvckF0dGFjaG1lbnQucmVzb2x2ZVRhcmdldC50ZXh0dXJlVmlld1xyXG5cdFx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQsXHJcblx0XHRcdFx0XHRcdGNsZWFyVmFsdWU6IGNvbG9yQXR0YWNobWVudC52YWx1ZSxcclxuXHRcdFx0XHRcdFx0bG9hZE9wOiBjb2xvckF0dGFjaG1lbnQub3AsXHJcblx0XHRcdFx0XHRcdHN0b3JlT3A6IGNvbG9yQXR0YWNobWVudC5zdG9yZU9wXHJcblx0XHRcdFx0XHR9IGFzIEdQVVJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnQ7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSksXHJcblx0XHRcdC4uLigodGhpcy5kZXB0aEF0dGFjaG1lbnQgfHwgdGhpcy5zdGVuY2lsQXR0YWNobWVudCkgJiYge1xyXG5cdFx0XHRcdGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQ6IHtcclxuXHRcdFx0XHRcdHZpZXc6IHRoaXMuZGVwdGhBdHRhY2htZW50Py50ZXh0dXJlPy50ZXh0dXJlVmlldyB8fCB1bmRlZmluZWQsXHJcblx0XHRcdFx0XHRkZXB0aExvYWRPcDogdGhpcy5kZXB0aEF0dGFjaG1lbnQ/Lm9wIHx8IFwiY2xlYXJcIixcclxuXHRcdFx0XHRcdGRlcHRoQ2xlYXJWYWx1ZTogdGhpcy5kZXB0aEF0dGFjaG1lbnQ/LnZhbHVlIHx8IDEuMCxcclxuXHRcdFx0XHRcdGRlcHRoU3RvcmVPcDogdGhpcy5kZXB0aEF0dGFjaG1lbnQ/LnN0b3JlT3AgfHwgXCJzdG9yZVwiLFxyXG5cdFx0XHRcdFx0ZGVwdGhSZWFkT25seTogdGhpcy5kZXB0aEF0dGFjaG1lbnQ/LnJlYWRPbmx5IHx8IGZhbHNlXHJcblx0XHRcdFx0XHQvLyBzdGVuY2lsTG9hZE9wOiB0aGlzLnN0ZW5jaWxBdHRhY2htZW50Py5vcCB8fCBcImNsZWFyXCIsXHJcblx0XHRcdFx0XHQvLyBzdGVuY2lsQ2xlYXJWYWx1ZTogdGhpcy5zdGVuY2lsQXR0YWNobWVudD8udmFsdWUgfHwgMCxcclxuXHRcdFx0XHRcdC8vIHN0ZW5jaWxTdG9yZU9wOiB0aGlzLnN0ZW5jaWxBdHRhY2htZW50Py5zdG9yZU9wIHx8IFwic3RvcmVcIixcclxuXHRcdFx0XHR9IGFzIEdQVVJlbmRlclBhc3NEZXB0aFN0ZW5jaWxBdHRhY2htZW50XHJcblx0XHRcdH0pXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cHVibGljIGJlZ2luUmVuZGVyUGFzc0VuY29kZXIoY29udGV4dDogQ29udGV4dCkge1xyXG5cdFx0aWYgKCF0aGlzLmNvbnRleHQpIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcblx0XHRjb25zdCB7IGRldmljZSB9ID0gdGhpcy5jb250ZXh0O1xyXG5cdFx0dGhpcy5jb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpO1xyXG5cdFx0dGhpcy5yZW5kZXJFbmNvZGVyID0gdGhpcy5jb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3ModGhpcy5yZW5kZXJQYXNzRGVzY3JpcHRvcik7XHJcblx0XHRyZXR1cm4gdGhpcy5yZW5kZXJFbmNvZGVyO1xyXG5cdH1cclxuXHRwdWJsaWMgZW5kUmVuZGVyUGFzc0VuY29kZXIoKSB7XHJcblx0XHR0aGlzLnJlbmRlckVuY29kZXI/LmVuZCgpO1xyXG5cdFx0dGhpcy5jb250ZXh0LmRldmljZS5xdWV1ZS5zdWJtaXQoW3RoaXMuY29tbWFuZEVuY29kZXIuZmluaXNoKCldKTtcclxuXHRcdHRoaXMuY29tbWFuZEVuY29kZXIgPSBudWxsO1xyXG5cdFx0dGhpcy5yZW5kZXJFbmNvZGVyID0gbnVsbDtcclxuXHR9XHJcblx0cHVibGljIGJlZ2luQ29tcHV0ZVBhc3NFbmNvZGVyKGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdGlmICghdGhpcy5jb250ZXh0KSB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG5cdFx0Y29uc3QgeyBkZXZpY2UgfSA9IHRoaXMuY29udGV4dDtcclxuXHRcdHRoaXMuY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTtcclxuXHRcdHRoaXMuY29tcHV0ZUVuY29kZXIgPSB0aGlzLmNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTtcclxuXHRcdHJldHVybiB0aGlzLmNvbXB1dGVFbmNvZGVyO1xyXG5cdH1cclxuXHRwdWJsaWMgZW5kQ29tcHV0ZVBhc3NFbmNvZGVyKCkge1xyXG5cdFx0dGhpcy5jb21wdXRlRW5jb2Rlcj8uZW5kKCk7XHJcblx0XHR0aGlzLmNvbnRleHQuZGV2aWNlLnF1ZXVlLnN1Ym1pdChbdGhpcy5jb21tYW5kRW5jb2Rlci5maW5pc2goKV0pO1xyXG5cdFx0dGhpcy5jb21tYW5kRW5jb2RlciA9IG51bGw7XHJcblx0XHR0aGlzLnJlbmRlckVuY29kZXIgPSBudWxsO1xyXG5cdH1cclxuXHRwcml2YXRlIGNoZWNrU2l6ZSgpIHtcclxuXHRcdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZGVwdGggfSA9IHRoaXMuY29udGV4dC5wcmVzZW50YXRpb25TaXplO1xyXG5cdFx0aWYgKHRoaXMuZGVwdGhBdHRhY2htZW50LnRleHR1cmUpIHtcclxuXHRcdFx0Y29uc3Qgc2l6ZSA9IHRoaXMuZGVwdGhBdHRhY2htZW50Py50ZXh0dXJlPy50ZXh0dXJlUHJvcD8uc2l6ZTtcclxuXHRcdFx0aWYgKHdpZHRoICE9IHNpemU/LndpZHRoIHx8IGhlaWdodCAhPSBzaXplPy5oZWlnaHQgfHwgZGVwdGggIT0gc2l6ZT8uZGVwdGgpIHtcclxuXHRcdFx0XHR0aGlzLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlLnNldFNpemUod2lkdGgsIGhlaWdodCwgZGVwdGgpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5jb2xvckF0dGFjaG1lbnRzKSB7XHJcblx0XHRcdHRoaXMuY29sb3JBdHRhY2htZW50cy5mb3JFYWNoKChjb2xvckF0dGFjaG1lbnQpID0+IHtcclxuXHRcdFx0XHRpZiAoY29sb3JBdHRhY2htZW50LnRleHR1cmUpIHtcclxuXHRcdFx0XHRcdGNvbnN0IHNpemUgPSBjb2xvckF0dGFjaG1lbnQ/LnRleHR1cmU/LnRleHR1cmVQcm9wPy5zaXplO1xyXG5cdFx0XHRcdFx0aWYgKHNpemUgJiYgKHdpZHRoICE9IHNpemU/LndpZHRoIHx8IGhlaWdodCAhPSBzaXplPy5oZWlnaHQgfHwgZGVwdGggIT0gc2l6ZT8uZGVwdGgpKVxyXG5cdFx0XHRcdFx0XHRjb2xvckF0dGFjaG1lbnQudGV4dHVyZS5zZXRTaXplKHdpZHRoLCBoZWlnaHQsIGRlcHRoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRkZXN0cm95KCkge1xyXG5cdFx0aWYgKHRoaXMuY29sb3JBdHRhY2htZW50cykge1xyXG5cdFx0XHR0aGlzLmNvbG9yQXR0YWNobWVudHMuZm9yRWFjaCgoY29sb3JBdHRhY2htZW50KSA9PiB7XHJcblx0XHRcdFx0aWYgKGNvbG9yQXR0YWNobWVudC50ZXh0dXJlKSB7XHJcblx0XHRcdFx0XHRjb2xvckF0dGFjaG1lbnQudGV4dHVyZS5kZXN0cm95KCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKSB0aGlzLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlLmRlc3Ryb3koKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgVGV4dHVyZUZvcm1hdCwgVGV4dHVyZVVzYWdlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuLi9nZW9tZXRyeS9HZW9tZXRyeVwiO1xyXG5pbXBvcnQgU2hhZGVyTWF0ZXJpYWwgZnJvbSBcIi4uL21hdGVyaWFsL1NoYWRlck1hdGVyaWFsXCI7XHJcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi4vbWVzaC9NZXNoXCI7XHJcbmltcG9ydCBBdHRhY2htZW50IGZyb20gXCIuLi9yZW5kZXIvQXR0YWNobWVudFwiO1xyXG5pbXBvcnQgeyBGbG9hdDMyQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcclxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL3JlbmRlci9Db250ZXh0XCI7XHJcbmltcG9ydCBSZW5kZXJUYXJnZXQgZnJvbSBcIi4uL3JlbmRlci9SZW5kZXJUYXJnZXRcIjtcclxuaW1wb3J0IFNhbXBsZXIgZnJvbSBcIi4uL3JlbmRlci9TYW1wbGVyXCI7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5pbXBvcnQgZ2V0VmVydEZyYWcgZnJvbSBcIi4uL3NoYWRlci9TaGFkZXJzXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlc29sdmVGcmFtZSB7XHJcblx0Y2FudmFzUmVuZGVyVGFyZ2V0OiBSZW5kZXJUYXJnZXQ7XHJcblx0bWF0ZXJpYWw6IFNoYWRlck1hdGVyaWFsO1xyXG5cdGdlb21ldHJ5OiBHZW9tZXRyeTtcclxuXHRxdWFkTWVzaDogTWVzaDtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHRoaXMuZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe30pO1xyXG5cdFx0dGhpcy5nZW9tZXRyeS5zZXRBdHRyaWJ1dGUoXHJcblx0XHRcdG5ldyBGbG9hdDMyQXR0cmlidXRlKFwicG9zaXRpb25cIiwgWy0xLjAsIDEuMCwgLTEuMCwgLTEuMCwgMS4wLCAtMS4wLCAxLjAsIC0xLjAsIDEuMCwgMS4wLCAtMS4wLCAxLjBdLCAyKVxyXG5cdFx0KTtcclxuXHRcdHRoaXMuZ2VvbWV0cnkuY291bnQgPSA2O1xyXG5cdFx0Y29uc3Qgc2hhZGVyID0gZ2V0VmVydEZyYWcoXCJyZXNvbHZlXCIsIHsgcG9zaXRpb25Mb2NhdGlvbjogMCB9KTtcclxuXHRcdHRoaXMubWF0ZXJpYWwgPSBuZXcgU2hhZGVyTWF0ZXJpYWwoe1xyXG5cdFx0XHR0eXBlOiBcInJlc29sdmVcIixcclxuXHRcdFx0ZnJhZzogc2hhZGVyLmZyYWcsXHJcblx0XHRcdHZlcnQ6IHNoYWRlci52ZXJ0LFxyXG5cdFx0XHR1bmlmb3Jtczoge1xyXG5cdFx0XHRcdHRleHR1cmU6IHtcclxuXHRcdFx0XHRcdHR5cGU6IFwidGV4dHVyZVwiLFxyXG5cdFx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0c2FtcGxlcjoge1xyXG5cdFx0XHRcdFx0dHlwZTogXCJzYW1wbGVyXCIsXHJcblx0XHRcdFx0XHR2YWx1ZTogbmV3IFNhbXBsZXIoe1xyXG5cdFx0XHRcdFx0XHRtYWdGaWx0ZXI6IFwibGluZWFyXCIsXHJcblx0XHRcdFx0XHRcdG1pbkZpbHRlcjogXCJsaW5lYXJcIlxyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5xdWFkTWVzaCA9IG5ldyBNZXNoKHRoaXMuZ2VvbWV0cnksIHRoaXMubWF0ZXJpYWwpO1xyXG5cdH1cclxuXHRyZW5kZXIoY29udGV4dDogQ29udGV4dCwgY29sb3JUZXh0dXJlPzogVGV4dHVyZSkge1xyXG5cdFx0aWYgKCF0aGlzLmNhbnZhc1JlbmRlclRhcmdldCkgdGhpcy5pbml0UmVuZGVyVGFyZ2V0KGNvbnRleHQpO1xyXG5cdFx0Ly8gdGhpcy5tYXRlcmlhbFxyXG5cdFx0dGhpcy5tYXRlcmlhbC51bmlmb3Jtcy50ZXh0dXJlLnZhbHVlID0gY29sb3JUZXh0dXJlO1xyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0dGhpcy5jYW52YXNSZW5kZXJUYXJnZXQuY29sb3JBdHRhY2htZW50c1swXS50ZXh0dXJlID0ge1xyXG5cdFx0XHR0ZXh0dXJlVmlldzogY29udGV4dC5jb250ZXh0LmdldEN1cnJlbnRUZXh0dXJlKCkuY3JlYXRlVmlldygpXHJcblx0XHR9O1xyXG5cdFx0dGhpcy5tYXRlcmlhbC51cGRhdGUodW5kZWZpbmVkLCB0aGlzLnF1YWRNZXNoKTtcclxuXHJcblx0XHRjb25zdCBkcmF3Q29tYW5kID0gdGhpcy5xdWFkTWVzaC5nZXREcmF3Q29tbWFuZCgpO1xyXG5cclxuXHRcdGNvbnN0IGN1cnJlbnRSZW5kZXJQYXNzRW5jb2RlciA9IHRoaXMuY2FudmFzUmVuZGVyVGFyZ2V0LmJlZ2luUmVuZGVyUGFzc0VuY29kZXIoY29udGV4dCk7XHJcblxyXG5cdFx0ZHJhd0NvbWFuZC5yZW5kZXIoY29udGV4dCwgY3VycmVudFJlbmRlclBhc3NFbmNvZGVyKTtcclxuXHJcblx0XHR0aGlzLmNhbnZhc1JlbmRlclRhcmdldC5lbmRSZW5kZXJQYXNzRW5jb2RlcigpO1xyXG5cdH1cclxuXHRwcml2YXRlIGluaXRSZW5kZXJUYXJnZXQoY29udGV4dDogQ29udGV4dCkge1xyXG5cdFx0Y29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBkZXB0aCB9ID0gY29udGV4dC5wcmVzZW50YXRpb25TaXplO1xyXG5cdFx0Y29uc3QgY29sb3JBdHRhY2htZW50ID0gbmV3IEF0dGFjaG1lbnQoXHJcblx0XHRcdHsgcjogMC4wLCBnOiAwLjAsIGI6IDAuMCwgYTogMCB9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0XHRcdHRleHR1cmU6IHtcclxuXHRcdFx0XHRcdHRleHR1cmVWaWV3OiB1bmRlZmluZWRcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0XHRjb25zdCBkZXB0aFRleHR1cmUgPSBuZXcgVGV4dHVyZSh7XHJcblx0XHRcdGxhYmVsOiBcInJlc29sdmVEZXB0aFwiLFxyXG5cdFx0XHRzaXplOiB7IHdpZHRoLCBoZWlnaHQsIGRlcHRoIH0sXHJcblx0XHRcdGZvcm1hdDogVGV4dHVyZUZvcm1hdC5EZXB0aDI0UGx1cyxcclxuXHRcdFx0dXNhZ2U6IFRleHR1cmVVc2FnZS5SZW5kZXJBdHRhY2htZW50XHJcblx0XHR9KTtcclxuXHRcdGNvbnN0IGRlcHRoQXR0YWNobWVudCA9IG5ldyBBdHRhY2htZW50KDEuMCwgeyB0ZXh0dXJlOiBkZXB0aFRleHR1cmUgfSk7XHJcblx0XHR0aGlzLmNhbnZhc1JlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoXCJyZW5kZXJcIiwgW2NvbG9yQXR0YWNobWVudF0sIGRlcHRoQXR0YWNobWVudCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9yZW5kZXIvQ29udGV4dFwiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcclxuaW1wb3J0IFBvc3RFZmZlY3QgZnJvbSBcIi4vUG9zdEVmZmVjdFwiO1xyXG5pbXBvcnQgUmVzb2x2ZUZyYW1lIGZyb20gXCIuL1Jlc29sdmVGcmFtZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUG9zdEVmZmVjdENvbGxlY3Rpb24ge1xyXG5cdHByaXZhdGUgX3Bvc3RFZmZlY3RzOiBNYXA8c3RyaW5nLCBQb3N0RWZmZWN0PjtcclxuXHRwdWJsaWMgY3VycmVudENvbG9yVGV4dHVyZTogVGV4dHVyZTtcclxuXHRwcml2YXRlIHJlc29sdmVGcmFtZTogUmVzb2x2ZUZyYW1lO1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0dGhpcy5fcG9zdEVmZmVjdHMgPSBuZXcgTWFwKCk7XHJcblx0XHR0aGlzLmN1cnJlbnRDb2xvclRleHR1cmUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLnJlc29sdmVGcmFtZSA9IG5ldyBSZXNvbHZlRnJhbWUoKTtcclxuXHR9XHJcblx0YWRkKHBvc3RFZmZlY3Q6IFBvc3RFZmZlY3QpIHtcclxuXHRcdHRoaXMuX3Bvc3RFZmZlY3RzLnNldChwb3N0RWZmZWN0LmlkLCBwb3N0RWZmZWN0KTtcclxuXHR9XHJcblx0cmVtb3ZlKHBvc3RFZmZlY3Q6IFBvc3RFZmZlY3QpIHtcclxuXHRcdHRoaXMuX3Bvc3RFZmZlY3RzLmRlbGV0ZShwb3N0RWZmZWN0LmlkKTtcclxuXHRcdHBvc3RFZmZlY3QuZGVzdHJveSgpO1xyXG5cdH1cclxuXHRyZW5kZXIoY29udGV4dDogQ29udGV4dCwgY29sb3JUZXh0dXJlOiBUZXh0dXJlKTogdm9pZCB7XHJcblx0XHR0aGlzLmN1cnJlbnRDb2xvclRleHR1cmUgPSBjb2xvclRleHR1cmU7XHJcblx0XHR0aGlzLl9wb3N0RWZmZWN0cy5mb3JFYWNoKChwb3N0RWZmZWN0KSA9PiB7XHJcblx0XHRcdHRoaXMuY3VycmVudENvbG9yVGV4dHVyZSA9IHBvc3RFZmZlY3QucmVuZGVyKGNvbnRleHQsIHRoaXMuY3VycmVudENvbG9yVGV4dHVyZSk7XHJcblx0XHR9KTtcclxuXHRcdHRoaXMucmVzb2x2ZUZyYW1lLnJlbmRlcihjb250ZXh0LCB0aGlzLmN1cnJlbnRDb2xvclRleHR1cmUpO1xyXG5cdH1cclxuXHRzZXRSZXNvbHZlRnJhbWVEaXJ0eSh2YWx1ZTogYm9vbGVhbikge1xyXG5cdFx0dGhpcy5yZXNvbHZlRnJhbWUubWF0ZXJpYWwuZGlydHkgPSB2YWx1ZTtcclxuXHR9XHJcblx0cHJpdmF0ZSBwb3N0RWZmZWN0c1NvcnQoKSB7XHJcblx0XHQvLyB0aGlzLl9wb3N0RWZmZWN0cy5zb3J0KClcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0ZyYW1lU3RhdGUuanNcIjtcclxuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi4vbWF0ZXJpYWwvTWF0ZXJpYWwuanNcIjtcclxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL3JlbmRlci9Db250ZXh0LmpzXCI7XHJcbmltcG9ydCB7IFRhcmdldCB9IGZyb20gXCIuLi9yZW5kZXIvUmVuZGVyU3RhdGVcIjtcclxuaW1wb3J0IFJlbmRlclRhcmdldCBmcm9tIFwiLi4vcmVuZGVyL1JlbmRlclRhcmdldC5qc1wiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmUuanNcIjtcclxuXHJcbmNsYXNzIFBhc3Mge1xyXG5cdHB1YmxpYyByZW5kZXJUYXJnZXQ6IFJlbmRlclRhcmdldDtcclxuXHRwdWJsaWMgY29tcHV0ZVRhcmdldDogUmVuZGVyVGFyZ2V0O1xyXG5cdHB1YmxpYyBjb250ZXh0OiBDb250ZXh0O1xyXG5cdHB1YmxpYyBvdmVycmlkZU1hdGVyaWFsPzogTWF0ZXJpYWw7XHJcblx0cHVibGljIGNvbG9yVGFyZ2V0cz86IEFycmF5PFRhcmdldD47XHJcblx0cHVibGljIHBhc3NSZW5kZXJFbmNvZGVyOiBHUFVSZW5kZXJQYXNzRW5jb2RlciB8IG51bGw7XHJcblx0cHVibGljIHBhc3NDb21wdXRlRW5jb2RlcjogR1BVQ29tcHV0ZVBhc3NFbmNvZGVyO1xyXG5cdGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcblx0fVxyXG5cdHJlbmRlcihmcmFtZVN0YXRlOiBGcmFtZVN0YXRlKTogdm9pZCB7fVxyXG5cdGJlZm9yZVJlbmRlcihvcHRpb25zPzogYW55KSB7XHJcblx0XHR0aGlzLnBhc3NSZW5kZXJFbmNvZGVyID0gdGhpcy5yZW5kZXJUYXJnZXQuYmVnaW5SZW5kZXJQYXNzRW5jb2Rlcih0aGlzLmNvbnRleHQpO1xyXG5cdFx0aWYgKHRoaXMuY29tcHV0ZVRhcmdldCkgdGhpcy5wYXNzQ29tcHV0ZUVuY29kZXIgPSB0aGlzLmNvbXB1dGVUYXJnZXQuYmVnaW5Db21wdXRlUGFzc0VuY29kZXIodGhpcy5jb250ZXh0KTtcclxuXHR9XHJcblx0Z2V0Q29sb3JUZXh0dXJlKGluZGV4ID0gMCk6IFRleHR1cmUge1xyXG5cdFx0cmV0dXJuIHRoaXMucmVuZGVyVGFyZ2V0LmdldENvbG9yVGV4dHVyZShpbmRleCkgYXMgVGV4dHVyZTtcclxuXHR9XHJcblx0Z2V0RGVwdGhUZXh0dXJlKCk6IFRleHR1cmUgfCB7IGdwdVRleHR1cmU6IEdQVVRleHR1cmUgfSB7XHJcblx0XHRyZXR1cm4gdGhpcy5yZW5kZXJUYXJnZXQuZ2V0RGVwdGhUZXh0dXJlKCk7XHJcblx0fVxyXG5cdGFmdGVyUmVuZGVyKCkge1xyXG5cdFx0dGhpcy5yZW5kZXJUYXJnZXQuZW5kUmVuZGVyUGFzc0VuY29kZXIoKTtcclxuXHRcdGlmICh0aGlzLmNvbXB1dGVUYXJnZXQpIHRoaXMuY29tcHV0ZVRhcmdldC5lbmRDb21wdXRlUGFzc0VuY29kZXIoKTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBhc3M7XHJcbiIsImltcG9ydCBDYW1lcmEgZnJvbSBcIi4uL2NhbWVyYS9DYW1lcmFcIjtcclxuaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0ZyYW1lU3RhdGVcIjtcclxuaW1wb3J0IHsgVGV4dHVyZUZvcm1hdCwgVGV4dHVyZVVzYWdlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IENvbG9yIGZyb20gXCIuLi9tYXRoL0NvbG9yXCI7XHJcbmltcG9ydCBBdHRhY2htZW50IGZyb20gXCIuLi9yZW5kZXIvQXR0YWNobWVudFwiO1xyXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vcmVuZGVyL0NvbnRleHRcIjtcclxuaW1wb3J0IERyYXdDb21tYW5kIGZyb20gXCIuLi9yZW5kZXIvRHJhd0NvbW1hbmRcIjtcclxuaW1wb3J0IFJlbmRlclRhcmdldCBmcm9tIFwiLi4vcmVuZGVyL1JlbmRlclRhcmdldFwiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcclxuaW1wb3J0IFBhc3MgZnJvbSBcIi4vUGFzc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhc2ljUGFzcyBleHRlbmRzIFBhc3Mge1xyXG5cdHNreWJveERyYXdDb21hbmQ6IERyYXdDb21tYW5kO1xyXG5cdGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdHN1cGVyKGNvbnRleHQpO1xyXG5cdFx0dGhpcy5pbml0KGNvbnRleHQpO1xyXG5cdH1cclxuXHJcblx0YmVmb3JlUmVuZGVyKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUpIHtcclxuXHRcdHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0KGZyYW1lU3RhdGUpO1xyXG5cclxuXHRcdHN1cGVyLmJlZm9yZVJlbmRlcigpO1xyXG5cdH1cclxuXHJcblx0cmVuZGVyKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUsIGNhbWVyYT86IENhbWVyYSkge1xyXG5cdFx0Y29uc3QgeyByZW5kZXJRdWV1ZSwgbGlnaHRNYW5nZXIgfSA9IGZyYW1lU3RhdGU7XHJcblxyXG5cdFx0cmVuZGVyUXVldWUuc29ydCgpO1xyXG5cdFx0cmVuZGVyUXVldWUucHJlUmVuZGVyKGNhbWVyYSwgdGhpcy5jb250ZXh0LCB0aGlzLnBhc3NSZW5kZXJFbmNvZGVyKTtcclxuXHRcdHJlbmRlclF1ZXVlLnRyYW5zcGFyZW50UmVuZGVyKGNhbWVyYSwgdGhpcy5jb250ZXh0LCB0aGlzLnBhc3NSZW5kZXJFbmNvZGVyLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgbGlnaHRNYW5nZXIpO1xyXG5cdFx0cmVuZGVyUXVldWUub3BhcXVlUmVuZGVyKGNhbWVyYSwgdGhpcy5jb250ZXh0LCB0aGlzLnBhc3NSZW5kZXJFbmNvZGVyLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgbGlnaHRNYW5nZXIpO1xyXG5cdFx0cmVuZGVyUXVldWUuZGVidWdRdWV1ZVJlbmRlcihjYW1lcmEsIHRoaXMuY29udGV4dCwgdGhpcy5wYXNzUmVuZGVyRW5jb2Rlcik7XHJcblx0fVxyXG5cdHByaXZhdGUgaW5pdChjb250ZXh0OiBDb250ZXh0KSB7XHJcblx0XHR0aGlzLmNyZWF0ZVJlbmRlclRhcmdldChjb250ZXh0KTtcclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVhdGVSZW5kZXJUYXJnZXQoY29udGV4dDogQ29udGV4dCkge1xyXG5cdFx0Y29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBkZXB0aCB9ID0gdGhpcy5jb250ZXh0LnByZXNlbnRhdGlvblNpemU7XHJcblx0XHRjb25zdCBjb2xvclRleHR1cmUgPSBuZXcgVGV4dHVyZSh7XHJcblx0XHRcdGxhYmVsOiBcImJhc2ljUGFzc0NvbG9yXCIsXHJcblx0XHRcdHNpemU6IHsgd2lkdGgsIGhlaWdodCwgZGVwdGggfSxcclxuXHRcdFx0Zm9ybWF0OiB0aGlzLmNvbnRleHQucHJlc2VudGF0aW9uRm9ybWF0LFxyXG5cdFx0XHR1c2FnZTogVGV4dHVyZVVzYWdlLlJlbmRlckF0dGFjaG1lbnQgfCBUZXh0dXJlVXNhZ2UuVGV4dHVyZUJpbmRpbmdcclxuXHRcdH0pO1xyXG5cdFx0Y29uc3QgZGVwdGhUZXh0dXJlID0gbmV3IFRleHR1cmUoe1xyXG5cdFx0XHRsYWJlbDogXCJiYXNpY1Bhc3NEZXB0aFwiLFxyXG5cdFx0XHRzaXplOiB7IHdpZHRoLCBoZWlnaHQsIGRlcHRoIH0sXHJcblx0XHRcdGZvcm1hdDogVGV4dHVyZUZvcm1hdC5EZXB0aDI0UGx1cyxcclxuXHRcdFx0dXNhZ2U6IFRleHR1cmVVc2FnZS5SZW5kZXJBdHRhY2htZW50XHJcblx0XHR9KTtcclxuXHRcdGNvbnN0IGNvbG9yQXR0YWNobWVudCA9IG5ldyBBdHRhY2htZW50KHsgcjogMC4wLCBnOiAwLjAsIGI6IDAuMCwgYTogMC4wIH0sIHsgdGV4dHVyZTogY29sb3JUZXh0dXJlIH0pO1xyXG5cdFx0Y29uc3QgZGVwdGhBdHRhY2htZW50ID0gbmV3IEF0dGFjaG1lbnQoMS4wLCB7IHRleHR1cmU6IGRlcHRoVGV4dHVyZSB9KTtcclxuXHRcdHRoaXMucmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChcInJlbmRlclwiLCBbY29sb3JBdHRhY2htZW50XSwgZGVwdGhBdHRhY2htZW50KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgdXBkYXRlUmVuZGVyVGFyZ2V0KGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUpIHtcclxuXHRcdGlmIChmcmFtZVN0YXRlPy5iYWNrZ3JvdW5kPy52YWx1ZSBpbnN0YW5jZW9mIENvbG9yKSB7XHJcblx0XHRcdGNvbnN0IHsgcmVkLCBncmVlbiwgYmx1ZSB9ID0gZnJhbWVTdGF0ZS5iYWNrZ3JvdW5kLnZhbHVlO1xyXG5cdFx0XHRjb25zdCBvcGFjaXR5ID0gZnJhbWVTdGF0ZS5iYWNrZ3JvdW5kPy5vcGFjaXR5O1xyXG5cdFx0XHRjb25zdCBjbGVhclZhbHVlID0ge1xyXG5cdFx0XHRcdHI6IHJlZCxcclxuXHRcdFx0XHRnOiBncmVlbixcclxuXHRcdFx0XHRiOiBibHVlLFxyXG5cdFx0XHRcdGE6IG9wYWNpdHkgPz8gMS4wXHJcblx0XHRcdH07XHJcblx0XHRcdHRoaXMucmVuZGVyVGFyZ2V0LmNvbG9yQXR0YWNobWVudHNbMF0udmFsdWUgPSBjbGVhclZhbHVlO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgZGVmaW5lZCBmcm9tIFwiLi4vdXRpbHMvZGVmaW5lZFwiO1xyXG5pbXBvcnQgR01hdGggZnJvbSBcIi4vTWF0aFwiO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tIFwiLi9NYXRyaXg0XCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuL1ZlY3RvcjNcIjtcclxuaW1wb3J0IFZlY3RvcjQgZnJvbSBcIi4vVmVjdG9yNFwiO1xyXG5cclxuLyoqXHJcbiAqIEEgcGxhbmUgaW4gSGVzc2lhbiBOb3JtYWwgRm9ybSBkZWZpbmVkIGJ5XHJcbiAqIDxwcmU+XHJcbiAqIGF4ICsgYnkgKyBjeiArIGQgPSAwXHJcbiAqIDwvcHJlPlxyXG4gKiB3aGVyZSAoYSwgYiwgYykgaXMgdGhlIHBsYW5lJ3MgPGNvZGU+bm9ybWFsPC9jb2RlPiwgZCBpcyB0aGUgc2lnbmVkXHJcbiAqIDxjb2RlPmRpc3RhbmNlPC9jb2RlPiB0byB0aGUgcGxhbmUsIGFuZCAoeCwgeSwgeikgaXMgYW55IHBvaW50IG9uXHJcbiAqIHRoZSBwbGFuZS5cclxuICpcclxuICogQGFsaWFzIFBsYW5lXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge1ZlY3RvcjN9IG5vcm1hbCBUaGUgcGxhbmUncyBub3JtYWwgKG5vcm1hbGl6ZWQpLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gZGlzdGFuY2UgVGhlIHNob3J0ZXN0IGRpc3RhbmNlIGZyb20gdGhlIG9yaWdpbiB0byB0aGUgcGxhbmUuICBUaGUgc2lnbiBvZlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAvLyBUaGUgcGxhbmUgeD0wXHJcbiAqIGNvbnN0IHBsYW5lID0gbmV3IFBsYW5lKFZlY3RvcjMuVU5JVF9YLCAwLjApO1xyXG4gKlxyXG4gKiBAZXhjZXB0aW9uIHtEZXZlbG9wZXJFcnJvcn0gTm9ybWFsIG11c3QgYmUgbm9ybWFsaXplZFxyXG4gKi9cclxuY2xhc3MgUGxhbmUge1xyXG5cdG5vcm1hbDogVmVjdG9yMztcclxuXHRkaXN0YW5jZTogbnVtYmVyO1xyXG5cdHB1YmxpYyBzdGF0aWMgT1JJR0lOX1hZX1BMQU5FID0gT2JqZWN0LmZyZWV6ZShuZXcgUGxhbmUoVmVjdG9yMy5VTklUX1osIDAuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIE9SSUdJTl9ZWl9QTEFORSA9IE9iamVjdC5mcmVlemUobmV3IFBsYW5lKFZlY3RvcjMuVU5JVF9YLCAwLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBPUklHSU5fWlhfUExBTkUgPSBPYmplY3QuZnJlZXplKG5ldyBQbGFuZShWZWN0b3IzLlVOSVRfWSwgMC4wKSk7XHJcblx0Y29uc3RydWN0b3Iobm9ybWFsOiBWZWN0b3IzLCBkaXN0YW5jZTogbnVtYmVyKSB7XHJcblx0XHR0aGlzLm5vcm1hbCA9IFZlY3RvcjMuY2xvbmUobm9ybWFsKTtcclxuXHJcblx0XHR0aGlzLmRpc3RhbmNlID0gZGlzdGFuY2U7XHJcblx0fVxyXG5cdG5vcm1hbGl6ZSgpIHtcclxuXHRcdGNvbnN0IGludmVyc2VOb3JtYWxMZW5ndGggPSAxLjAgLyB0aGlzLm5vcm1hbC5sZW5ndGgoKTtcclxuXHRcdHRoaXMubm9ybWFsID0gVmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKHRoaXMubm9ybWFsLCBpbnZlcnNlTm9ybWFsTGVuZ3RoLCB0aGlzLm5vcm1hbCk7XHJcblx0XHR0aGlzLmRpc3RhbmNlICo9IGludmVyc2VOb3JtYWxMZW5ndGg7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tUG9pbnROb3JtYWwocG9pbnQ6IFZlY3RvcjMsIG5vcm1hbDogVmVjdG9yMywgcmVzdWx0OiBQbGFuZSk6IFBsYW5lIHtcclxuXHRcdGlmICghR01hdGguZXF1YWxzRXBzaWxvbihWZWN0b3IzLm1hZ25pdHVkZShub3JtYWwpLCAxLjAsIEdNYXRoLkVQU0lMT042KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub3JtYWwgbXVzdCBiZSBub3JtYWxpemVkLlwiKTtcclxuXHRcdH1cclxuXHRcdC8vID4+aW5jbHVkZUVuZCgnZGVidWcnKTtcclxuXHJcblx0XHRjb25zdCBkaXN0YW5jZSA9IC1WZWN0b3IzLmRvdChub3JtYWwsIHBvaW50KTtcclxuXHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFBsYW5lKG5vcm1hbCwgZGlzdGFuY2UpO1xyXG5cdFx0fVxyXG5cclxuXHRcdFZlY3RvcjMuY2xvbmUobm9ybWFsLCByZXN1bHQubm9ybWFsKTtcclxuXHRcdHJlc3VsdC5kaXN0YW5jZSA9IGRpc3RhbmNlO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tVmVjdG9yNChjb2VmZmljaWVudHM6IFZlY3RvcjQsIHJlc3VsdDogUGxhbmUpOiBQbGFuZSB7XHJcblx0XHRjb25zdCBub3JtYWwgPSBWZWN0b3IzLmZyb21WZWN0b3I0KGNvZWZmaWNpZW50cywgc2NyYXRjaE5vcm1hbCk7XHJcblx0XHRjb25zdCBkaXN0YW5jZSA9IGNvZWZmaWNpZW50cy53O1xyXG5cclxuXHRcdC8vID4+aW5jbHVkZVN0YXJ0KCdkZWJ1ZycsIHByYWdtYXMuZGVidWcpO1xyXG5cdFx0aWYgKCFHTWF0aC5lcXVhbHNFcHNpbG9uKFZlY3RvcjMubWFnbml0dWRlKG5vcm1hbCksIDEuMCwgR01hdGguRVBTSUxPTjYpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vcm1hbCBtdXN0IGJlIG5vcm1hbGl6ZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gPj5pbmNsdWRlRW5kKCdkZWJ1ZycpO1xyXG5cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUGxhbmUobm9ybWFsLCBkaXN0YW5jZSk7XHJcblx0XHR9XHJcblx0XHRWZWN0b3IzLmNsb25lKG5vcm1hbCwgcmVzdWx0Lm5vcm1hbCk7XHJcblx0XHRyZXN1bHQuZGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0UG9pbnREaXN0YW5jZShwbGFuZTogUGxhbmUsIHBvaW50OiBWZWN0b3IzKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBWZWN0b3IzLmRvdChwbGFuZS5ub3JtYWwsIHBvaW50KSArIHBsYW5lLmRpc3RhbmNlO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHByb2plY3RQb2ludE9udG9QbGFuZShwbGFuZTogUGxhbmUsIHBvaW50OiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJlc3VsdCA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gcHJvamVjdGVkUG9pbnQgPSBwb2ludCAtIChub3JtYWwucG9pbnQgKyBzY2FsZSkgKiBub3JtYWxcclxuXHRcdGNvbnN0IHBvaW50RGlzdGFuY2UgPSBQbGFuZS5nZXRQb2ludERpc3RhbmNlKHBsYW5lLCBwb2ludCk7XHJcblx0XHRjb25zdCBzY2FsZWROb3JtYWwgPSBWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIocGxhbmUubm9ybWFsLCBwb2ludERpc3RhbmNlLCBzY3JhdGNoQ2FydGVzaWFuKTtcclxuXHJcblx0XHRyZXR1cm4gVmVjdG9yMy5zdWJ0cmFjdChwb2ludCwgc2NhbGVkTm9ybWFsLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHRyYW5zZm9ybShwbGFuZTogUGxhbmUsIHRyYW5zZm9ybTogTWF0cml4NCwgcmVzdWx0OiBQbGFuZSk6IFBsYW5lIHtcclxuXHRcdGNvbnN0IG5vcm1hbCA9IHBsYW5lLm5vcm1hbDtcclxuXHRcdGNvbnN0IGRpc3RhbmNlID0gcGxhbmUuZGlzdGFuY2U7XHJcblx0XHRjb25zdCBpbnZlcnNlVHJhbnNwb3NlID0gTWF0cml4NC5pbnZlcnNlVHJhbnNwb3NlKHRyYW5zZm9ybSwgc2NyYXRjaEludmVyc2VUcmFuc3Bvc2UpO1xyXG5cdFx0bGV0IHBsYW5lQXNDYXJ0ZXNpYW40ID0gVmVjdG9yNC5mcm9tRWxlbWVudHMobm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueiwgZGlzdGFuY2UsIHNjcmF0Y2hQbGFuZUNhcnRlc2lhbjQpO1xyXG5cdFx0cGxhbmVBc0NhcnRlc2lhbjQgPSBNYXRyaXg0Lm11bHRpcGx5QnlWZWN0b3IoaW52ZXJzZVRyYW5zcG9zZSwgcGxhbmVBc0NhcnRlc2lhbjQsIHBsYW5lQXNDYXJ0ZXNpYW40KTtcclxuXHJcblx0XHQvLyBDb252ZXJ0IHRoZSB0cmFuc2Zvcm1lZCBwbGFuZSB0byBIZXNzaWFuIE5vcm1hbCBGb3JtXHJcblx0XHRjb25zdCB0cmFuc2Zvcm1lZE5vcm1hbCA9IFZlY3RvcjMuZnJvbVZlY3RvcjQocGxhbmVBc0NhcnRlc2lhbjQsIHNjcmF0Y2hUcmFuc2Zvcm1Ob3JtYWwpO1xyXG5cclxuXHRcdHBsYW5lQXNDYXJ0ZXNpYW40ID0gVmVjdG9yNC5kaXZpZGVCeVNjYWxhcihcclxuXHRcdFx0cGxhbmVBc0NhcnRlc2lhbjQsXHJcblx0XHRcdFZlY3RvcjMubWFnbml0dWRlKHRyYW5zZm9ybWVkTm9ybWFsKSxcclxuXHRcdFx0cGxhbmVBc0NhcnRlc2lhbjRcclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIFBsYW5lLmZyb21WZWN0b3I0KHBsYW5lQXNDYXJ0ZXNpYW40LCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNsb25lKHBsYW5lOiBQbGFuZSwgcmVzdWx0OiBQbGFuZSk6IFBsYW5lIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUGxhbmUocGxhbmUubm9ybWFsLCBwbGFuZS5kaXN0YW5jZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0VmVjdG9yMy5jbG9uZShwbGFuZS5ub3JtYWwsIHJlc3VsdC5ub3JtYWwpO1xyXG5cdFx0cmVzdWx0LmRpc3RhbmNlID0gcGxhbmUuZGlzdGFuY2U7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHMobGVmdDogUGxhbmUsIHJpZ2h0OiBQbGFuZSk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIGxlZnQuZGlzdGFuY2UgPT09IHJpZ2h0LmRpc3RhbmNlICYmIFZlY3RvcjMuZXF1YWxzKGxlZnQubm9ybWFsLCByaWdodC5ub3JtYWwpO1xyXG5cdH1cclxufVxyXG5jb25zdCBzY3JhdGNoTm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3Qgc2NyYXRjaENhcnRlc2lhbiA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHNjcmF0Y2hJbnZlcnNlVHJhbnNwb3NlID0gbmV3IE1hdHJpeDQoKTtcclxuY29uc3Qgc2NyYXRjaFBsYW5lQ2FydGVzaWFuNCA9IG5ldyBWZWN0b3I0KCk7XHJcbmNvbnN0IHNjcmF0Y2hUcmFuc2Zvcm1Ob3JtYWwgPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGxhbmU7XHJcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuaW1wb3J0IFZlY3RvcjQgZnJvbSBcIi4uL21hdGgvVmVjdG9yNFwiO1xyXG5pbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IHsgSW50ZXJzZWN0IH0gZnJvbSBcIi4vV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IFBsYW5lIGZyb20gXCIuLi9tYXRoL1BsYW5lXCI7XHJcblxyXG4vKipcclxuICogVGhlIGN1bGxpbmcgdm9sdW1lIGRlZmluZWQgYnkgcGxhbmVzLlxyXG4gKlxyXG4gKiBAYWxpYXMgQ3VsbGluZ1ZvbHVtZVxyXG4gKiBAY29uc3RydWN0b3JcclxuICpcclxuICogQHBhcmFtIHtWZWN0b3I0W119IFtwbGFuZXNdIEFuIGFycmF5IG9mIGNsaXBwaW5nIHBsYW5lcy5cclxuICovXHJcbmNsYXNzIEN1bGxpbmdWb2x1bWUge1xyXG5cdHBsYW5lczogUGxhbmVbXTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBNQVNLX09VVFNJREUgPSAweGZmZmZmZmZmO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIE1BU0tfSU5TSURFID0gMHgwMDAwMDAwMDtcclxuXHJcblx0cHVibGljIHN0YXRpYyBNQVNLX0lOREVURVJNSU5BVEUgPSAweDdmZmZmZmZmO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihwbGFuZXM/OiBQbGFuZVtdKSB7XHJcblx0XHR0aGlzLnBsYW5lcyA9IGRlZmF1bHRWYWx1ZShwbGFuZXMsIFtcclxuXHRcdFx0bmV3IFBsYW5lKFZlY3RvcjMuVU5JVF9aLCAwLjApLFxyXG5cdFx0XHRuZXcgUGxhbmUoVmVjdG9yMy5VTklUX1osIDAuMCksXHJcblx0XHRcdG5ldyBQbGFuZShWZWN0b3IzLlVOSVRfWiwgMC4wKSxcclxuXHRcdFx0bmV3IFBsYW5lKFZlY3RvcjMuVU5JVF9aLCAwLjApLFxyXG5cdFx0XHRuZXcgUGxhbmUoVmVjdG9yMy5VTklUX1osIDAuMCksXHJcblx0XHRcdG5ldyBQbGFuZShWZWN0b3IzLlVOSVRfWiwgMC4wKVxyXG5cdFx0XSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIENvbnN0cnVjdHMgYSBjdWxsaW5nIHZvbHVtZSBmcm9tIGEgYm91bmRpbmcgc3BoZXJlLiBDcmVhdGVzIHNpeCBwbGFuZXMgdGhhdCBjcmVhdGUgYSBib3ggY29udGFpbmluZyB0aGUgc3BoZXJlLlxyXG5cdCAqIFRoZSBwbGFuZXMgYXJlIGFsaWduZWQgdG8gdGhlIHgsIHksIGFuZCB6IGF4ZXMgaW4gd29ybGQgY29vcmRpbmF0ZXMuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge0JvdW5kaW5nU3BoZXJlfSBib3VuZGluZ1NwaGVyZSBUaGUgYm91bmRpbmcgc3BoZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBjdWxsaW5nIHZvbHVtZS5cclxuXHQgKiBAcGFyYW0ge0N1bGxpbmdWb2x1bWV9IFtyZXN1bHRdIFRoZSBvYmplY3Qgb250byB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0LlxyXG5cdCAqIEByZXR1cm5zIHtDdWxsaW5nVm9sdW1lfSBUaGUgY3VsbGluZyB2b2x1bWUgY3JlYXRlZCBmcm9tIHRoZSBib3VuZGluZyBzcGhlcmUuXHJcblx0ICovXHJcblx0c3RhdGljIGZyb21Cb3VuZGluZ1NwaGVyZShib3VuZGluZ1NwaGVyZSwgcmVzdWx0KSB7XHJcblx0XHRpZiAoIWRlZmluZWQoYm91bmRpbmdTcGhlcmUpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImJvdW5kaW5nU3BoZXJlIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJlc3VsdCA9IG5ldyBDdWxsaW5nVm9sdW1lKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgbGVuZ3RoID0gZmFjZXMubGVuZ3RoO1xyXG5cdFx0Y29uc3QgcGxhbmVzID0gcmVzdWx0LnBsYW5lcztcclxuXHRcdHBsYW5lcy5sZW5ndGggPSAyICogbGVuZ3RoO1xyXG5cclxuXHRcdGNvbnN0IGNlbnRlciA9IGJvdW5kaW5nU3BoZXJlLmNlbnRlcjtcclxuXHRcdGNvbnN0IHJhZGl1cyA9IGJvdW5kaW5nU3BoZXJlLnJhZGl1cztcclxuXHJcblx0XHRsZXQgcGxhbmVJbmRleCA9IDA7XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xyXG5cdFx0XHRjb25zdCBmYWNlTm9ybWFsID0gZmFjZXNbaV07XHJcblxyXG5cdFx0XHRsZXQgcGxhbmUwID0gcGxhbmVzW3BsYW5lSW5kZXhdO1xyXG5cdFx0XHRsZXQgcGxhbmUxID0gcGxhbmVzW3BsYW5lSW5kZXggKyAxXTtcclxuXHJcblx0XHRcdGlmICghZGVmaW5lZChwbGFuZTApKSB7XHJcblx0XHRcdFx0cGxhbmUwID0gcGxhbmVzW3BsYW5lSW5kZXhdID0gbmV3IFZlY3RvcjQoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIWRlZmluZWQocGxhbmUxKSkge1xyXG5cdFx0XHRcdHBsYW5lMSA9IHBsYW5lc1twbGFuZUluZGV4ICsgMV0gPSBuZXcgVmVjdG9yNCgpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIoZmFjZU5vcm1hbCwgLXJhZGl1cywgc2NyYXRjaFBsYW5lQ2VudGVyKTtcclxuXHRcdFx0VmVjdG9yMy5hZGQoY2VudGVyLCBzY3JhdGNoUGxhbmVDZW50ZXIsIHNjcmF0Y2hQbGFuZUNlbnRlcik7XHJcblxyXG5cdFx0XHRwbGFuZTAueCA9IGZhY2VOb3JtYWwueDtcclxuXHRcdFx0cGxhbmUwLnkgPSBmYWNlTm9ybWFsLnk7XHJcblx0XHRcdHBsYW5lMC56ID0gZmFjZU5vcm1hbC56O1xyXG5cdFx0XHRwbGFuZTAudyA9IC1WZWN0b3IzLmRvdChmYWNlTm9ybWFsLCBzY3JhdGNoUGxhbmVDZW50ZXIpO1xyXG5cclxuXHRcdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGZhY2VOb3JtYWwsIHJhZGl1cywgc2NyYXRjaFBsYW5lQ2VudGVyKTtcclxuXHRcdFx0VmVjdG9yMy5hZGQoY2VudGVyLCBzY3JhdGNoUGxhbmVDZW50ZXIsIHNjcmF0Y2hQbGFuZUNlbnRlcik7XHJcblxyXG5cdFx0XHRwbGFuZTEueCA9IC1mYWNlTm9ybWFsLng7XHJcblx0XHRcdHBsYW5lMS55ID0gLWZhY2VOb3JtYWwueTtcclxuXHRcdFx0cGxhbmUxLnogPSAtZmFjZU5vcm1hbC56O1xyXG5cdFx0XHRwbGFuZTEudyA9IC1WZWN0b3IzLmRvdChWZWN0b3IzLm5lZ2F0ZShmYWNlTm9ybWFsLCBzY3JhdGNoUGxhbmVOb3JtYWwpLCBzY3JhdGNoUGxhbmVDZW50ZXIpO1xyXG5cclxuXHRcdFx0cGxhbmVJbmRleCArPSAyO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIERldGVybWluZXMgd2hldGhlciBhIGJvdW5kaW5nIHZvbHVtZSBpbnRlcnNlY3RzIHRoZSBjdWxsaW5nIHZvbHVtZS5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBib3VuZGluZ1ZvbHVtZSBUaGUgYm91bmRpbmcgdm9sdW1lIHdob3NlIGludGVyc2VjdGlvbiB3aXRoIHRoZSBjdWxsaW5nIHZvbHVtZSBpcyB0byBiZSB0ZXN0ZWQuXHJcblx0ICogQHJldHVybnMge0ludGVyc2VjdH0gIEludGVyc2VjdC5PVVRTSURFLCBJbnRlcnNlY3QuSU5URVJTRUNUSU5HLCBvciBJbnRlcnNlY3QuSU5TSURFLlxyXG5cdCAqL1xyXG5cdGNvbXB1dGVWaXNpYmlsaXR5KGJvdW5kaW5nVm9sdW1lKSB7XHJcblx0XHRpZiAoIWRlZmluZWQoYm91bmRpbmdWb2x1bWUpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImJvdW5kaW5nVm9sdW1lIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHBsYW5lcyA9IHRoaXMucGxhbmVzO1xyXG5cdFx0bGV0IGludGVyc2VjdGluZyA9IGZhbHNlO1xyXG5cdFx0Zm9yIChsZXQgayA9IDAsIGxlbiA9IHBsYW5lcy5sZW5ndGg7IGsgPCBsZW47ICsraykge1xyXG5cdFx0XHRjb25zdCByZXN1bHQgPSBib3VuZGluZ1ZvbHVtZS5pbnRlcnNlY3RQbGFuZShwbGFuZXNba10pO1xyXG5cdFx0XHRpZiAocmVzdWx0ID09PSBJbnRlcnNlY3QuT1VUU0lERSkge1xyXG5cdFx0XHRcdHJldHVybiBJbnRlcnNlY3QuT1VUU0lERTtcclxuXHRcdFx0fSBlbHNlIGlmIChyZXN1bHQgPT09IEludGVyc2VjdC5JTlRFUlNFQ1RJTkcpIHtcclxuXHRcdFx0XHRpbnRlcnNlY3RpbmcgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGludGVyc2VjdGluZyA/IEludGVyc2VjdC5JTlRFUlNFQ1RJTkcgOiBJbnRlcnNlY3QuSU5TSURFO1xyXG5cdH1cclxufVxyXG5cclxuY29uc3QgZmFjZXMgPSBbbmV3IFZlY3RvcjMoKSwgbmV3IFZlY3RvcjMoKSwgbmV3IFZlY3RvcjMoKV07XHJcblZlY3RvcjMuY2xvbmUoVmVjdG9yMy5VTklUX1gsIGZhY2VzWzBdKTtcclxuVmVjdG9yMy5jbG9uZShWZWN0b3IzLlVOSVRfWSwgZmFjZXNbMV0pO1xyXG5WZWN0b3IzLmNsb25lKFZlY3RvcjMuVU5JVF9aLCBmYWNlc1syXSk7XHJcblxyXG5jb25zdCBzY3JhdGNoUGxhbmVDZW50ZXIgPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBzY3JhdGNoUGxhbmVOb3JtYWwgPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBzY3JhdGNoUGxhbmVzID0gbmV3IFZlY3RvcjQoKTtcclxuY29uc3Qgc2NyYXRjaFBsYW5lID0gbmV3IFBsYW5lKG5ldyBWZWN0b3IzKDEuMCwgMC4wLCAwLjApLCAwLjApO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ3VsbGluZ1ZvbHVtZTtcclxuIiwiaW1wb3J0IEN1bGxpbmdWb2x1bWUgZnJvbSBcIi4uL2NvcmUvQ3VsbGluZ1ZvbHVtZVwiO1xyXG5pbXBvcnQgUmVuZGVyT2JqZWN0IGZyb20gXCIuLi9jb3JlL1JlbmRlck9iamVjdFwiO1xyXG5pbXBvcnQgeyBSZW5kZXJPYmplY3RUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4uL21hdGgvTWF0cml4NFwiO1xyXG5pbXBvcnQgUGxhbmUgZnJvbSBcIi4uL21hdGgvUGxhbmVcIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xyXG5pbXBvcnQgU2hhZGVyRGF0YSBmcm9tIFwiLi4vcmVuZGVyL1NoYWRlckRhdGFcIjtcclxuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XHJcbmltcG9ydCB7IFVuaWZvcm1FbnVtIH0gZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3Jtc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2FtZXJhIGV4dGVuZHMgUmVuZGVyT2JqZWN0IHtcclxuXHRwcml2YXRlIF92aWV3TWF0cml4OiBNYXRyaXg0O1xyXG5cdHByb3RlY3RlZCBfcHJvamVjdGlvbk1hdHJpeDogTWF0cml4NDtcclxuXHRwcml2YXRlIF92cE1hdHJpeDogTWF0cml4NDtcclxuXHRjdWxsaW5nVm9sdW1lOiBDdWxsaW5nVm9sdW1lO1xyXG5cdHByb2plY3RNYXRyaXhEaXJ0eTogYm9vbGVhbjtcclxuXHRzaGFkZXJEYXRhOiBTaGFkZXJEYXRhO1xyXG5cdG5lYXI6IG51bWJlcjtcclxuXHRmYXI6IG51bWJlcjtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHR0aGlzLl92aWV3TWF0cml4ID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy50eXBlID0gUmVuZGVyT2JqZWN0VHlwZS5DYW1lcmE7XHJcblx0XHR0aGlzLmN1bGxpbmdWb2x1bWUgPSBuZXcgQ3VsbGluZ1ZvbHVtZSgpO1xyXG5cdFx0dGhpcy5fdmlld01hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcblx0XHR0aGlzLl92cE1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcblx0XHR0aGlzLnByb2plY3RNYXRyaXhEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmNyZWF0ZVNoYWRlckRhdGEoKTtcclxuXHR9XHJcblx0Z2V0IHZpZXdNYXRyaXgoKSB7XHJcblx0XHR0aGlzLnVwZGF0ZU1hdHJpeCgpO1xyXG5cdFx0TWF0cml4NC5pbnZlcnNlKHRoaXMubW9kZWxNYXRyaXgsIHRoaXMuX3ZpZXdNYXRyaXgpO1xyXG5cdFx0cmV0dXJuIHRoaXMuX3ZpZXdNYXRyaXg7XHJcblx0fVxyXG5cdGdldCBwcm9qZWN0aW9uTWF0cml4KCkge1xyXG5cdFx0dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcblx0XHRyZXR1cm4gdGhpcy5fcHJvamVjdGlvbk1hdHJpeDtcclxuXHR9XHJcblxyXG5cdGdldCB2cE1hdHJpeCgpIHtcclxuXHRcdE1hdHJpeDQubXVsdGlwbHkodGhpcy5wcm9qZWN0aW9uTWF0cml4LCB0aGlzLnZpZXdNYXRyaXgsIHRoaXMuX3ZwTWF0cml4KTtcclxuXHRcdHJldHVybiB0aGlzLl92cE1hdHJpeDtcclxuXHR9XHJcblxyXG5cdGdldCBpbnZlcnNlVmlld01hdHJpeCgpIHtcclxuXHRcdHRoaXMudXBkYXRlTWF0cml4KCk7XHJcblx0XHRyZXR1cm4gdGhpcy5tb2RlbE1hdHJpeDtcclxuXHR9XHJcblx0cHVibGljIHVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSB7fVxyXG5cdC8qKlxyXG5cdCAqIGdldCBhIGN1bGxpbmcgdm9sdW1lIGZvciB0aGlzIGZydXN0dW0uXHJcblx0ICovXHJcblx0Z2V0Q3VsbGluZ1ZvbHVtZSgpIHtcclxuXHRcdGNvbnN0IGNsb25lVmlld01hdHJpeCA9IHRoaXMudmlld01hdHJpeC5jbG9uZShuZXcgTWF0cml4NCgpKTtcclxuXHRcdGNvbnN0IHZwTWF0cml4ID0gTWF0cml4NC5tdWx0aXBseSh0aGlzLnByb2plY3Rpb25NYXRyaXgsIGNsb25lVmlld01hdHJpeCwgbmV3IE1hdHJpeDQoKSk7XHJcblx0XHRjb25zdCBwbGFuZXMgPSB0aGlzLmN1bGxpbmdWb2x1bWUucGxhbmVzO1xyXG5cdFx0Y29uc3QgbWUgPSB2cE1hdHJpeDtcclxuXHRcdGNvbnN0IG1lMCA9IG1lWzBdLFxyXG5cdFx0XHRtZTEgPSBtZVsxXSxcclxuXHRcdFx0bWUyID0gbWVbMl0sXHJcblx0XHRcdG1lMyA9IG1lWzNdO1xyXG5cdFx0Y29uc3QgbWU0ID0gbWVbNF0sXHJcblx0XHRcdG1lNSA9IG1lWzVdLFxyXG5cdFx0XHRtZTYgPSBtZVs2XSxcclxuXHRcdFx0bWU3ID0gbWVbN107XHJcblx0XHRjb25zdCBtZTggPSBtZVs4XSxcclxuXHRcdFx0bWU5ID0gbWVbOV0sXHJcblx0XHRcdG1lMTAgPSBtZVsxMF0sXHJcblx0XHRcdG1lMTEgPSBtZVsxMV07XHJcblx0XHRjb25zdCBtZTEyID0gbWVbMTJdLFxyXG5cdFx0XHRtZTEzID0gbWVbMTNdLFxyXG5cdFx0XHRtZTE0ID0gbWVbMTRdLFxyXG5cdFx0XHRtZTE1ID0gbWVbMTVdO1xyXG5cdFx0cGxhbmVzWzBdID0gbmV3IFBsYW5lKG5ldyBWZWN0b3IzKG1lMyAtIG1lMCwgbWU3IC0gbWU0LCBtZTExIC0gbWU4KSwgbWUxNSAtIG1lMTIpO1xyXG5cdFx0cGxhbmVzWzBdLm5vcm1hbGl6ZSgpO1xyXG5cdFx0cGxhbmVzWzFdID0gbmV3IFBsYW5lKG5ldyBWZWN0b3IzKG1lMyArIG1lMCwgbWU3ICsgbWU0LCBtZTExICsgbWU4KSwgbWUxNSArIG1lMTIpO1xyXG5cdFx0cGxhbmVzWzFdLm5vcm1hbGl6ZSgpO1xyXG5cclxuXHRcdHBsYW5lc1syXSA9IG5ldyBQbGFuZShuZXcgVmVjdG9yMyhtZTMgKyBtZTEsIG1lNyArIG1lNSwgbWUxMSArIG1lOSksIG1lMTUgKyBtZTEzKTtcclxuXHRcdHBsYW5lc1syXS5ub3JtYWxpemUoKTtcclxuXHJcblx0XHRwbGFuZXNbM10gPSBuZXcgUGxhbmUobmV3IFZlY3RvcjMobWUzIC0gbWUxLCBtZTcgLSBtZTUsIG1lMTEgLSBtZTkpLCBtZTE1IC0gbWUxMyk7XHJcblx0XHRwbGFuZXNbM10ubm9ybWFsaXplKCk7XHJcblxyXG5cdFx0cGxhbmVzWzRdID0gbmV3IFBsYW5lKG5ldyBWZWN0b3IzKG1lMyAtIG1lMiwgbWU3IC0gbWU2LCBtZTExIC0gbWUxMCksIG1lMTUgLSBtZTE0KTtcclxuXHRcdHBsYW5lc1s0XS5ub3JtYWxpemUoKTtcclxuXHJcblx0XHRwbGFuZXNbNV0gPSBuZXcgUGxhbmUobmV3IFZlY3RvcjMobWUzICsgbWUyLCBtZTcgKyBtZTYsIG1lMTEgKyBtZTEwKSwgbWUxNSArIG1lMTQpO1xyXG5cdFx0cGxhbmVzWzVdLm5vcm1hbGl6ZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmN1bGxpbmdWb2x1bWU7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVTaGFkZXJEYXRhKCkge1xyXG5cdFx0dGhpcy5zaGFkZXJEYXRhID0gbmV3IFNoYWRlckRhdGEoXCJjYW1lcmFcIiwgMCwgMSwgMSk7XHJcblx0XHRjb25zdCB1bmlmb3JtQnVmZmVyID0gbmV3IFVuaWZvcm1CdWZmZXIoeyBsYWJlbDogXCJjYW1lcmFcIiB9KTtcclxuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XCJwcm9qZWN0aW9uTWF0cml4XCIsXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9qZWN0aW9uTWF0cml4O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0XHJcblx0XHQpO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcInZpZXdNYXRyaXhcIixcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLnZpZXdNYXRyaXg7XHJcblx0XHRcdH0sXHJcblx0XHRcdFVuaWZvcm1FbnVtLk1hdDRcclxuXHRcdCk7XHJcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFwiaW52ZXJzZVZpZXdNYXRyaXhcIixcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmludmVyc2VWaWV3TWF0cml4O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0XHJcblx0XHQpO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcInBvc2l0aW9uXCIsXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wb3NpdGlvbjtcclxuXHRcdFx0fSxcclxuXHRcdFx0VW5pZm9ybUVudW0uRmxvYXRWZWMzXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5zaGFkZXJEYXRhLnNldFVuaWZvcm1CdWZmZXIoXCJjYW1lcmFcIiwgdW5pZm9ybUJ1ZmZlcik7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDdWxsaW5nVm9sdW1lIGZyb20gXCIuLi9jb3JlL0N1bGxpbmdWb2x1bWVcIjtcclxuaW1wb3J0IEdNYXRoIGZyb20gXCIuLi9tYXRoL01hdGhcIjtcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4uL21hdGgvTWF0cml4NFwiO1xyXG5pbXBvcnQgQ2FtZXJhIGZyb20gXCIuL0NhbWVyYVwiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZXJzcGVjdGl2ZUNhbWVyYSBleHRlbmRzIENhbWVyYSB7XHJcblx0eE9mZnNldDogbnVtYmVyO1xyXG5cdHlPZmZzZXQ6IG51bWJlcjtcclxuXHRjdWxsaW5nVm9sdW1lOiBDdWxsaW5nVm9sdW1lO1xyXG5cdHByaXZhdGUgX2FzcGVjdDogbnVtYmVyO1xyXG5cdHByaXZhdGUgX2ZvdjogbnVtYmVyO1xyXG5cdGhlaWdodDogbnVtYmVyO1xyXG5cdHdpZHRoOiBudW1iZXI7XHJcblx0aXNQZXJzcGVjdGl2ZUNhbWVyYTogYm9vbGVhbjtcclxuXHRuZWFyOiBudW1iZXI7XHJcblx0ZmFyOiBudW1iZXI7XHJcblx0dG9wOiBudW1iZXI7XHJcblx0bGVmdDogbnVtYmVyO1xyXG5cdGNvbnN0cnVjdG9yKGZvdiA9IDUwLCBhc3BlY3QgPSAxLCBuZWFyID0gMC4xLCBmYXIgPSAyMDAwKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0dGhpcy5fYXNwZWN0ID0gYXNwZWN0O1xyXG5cdFx0dGhpcy5mb3YgPSBmb3Y7XHJcblx0XHR0aGlzLm5lYXIgPSBuZWFyO1xyXG5cdFx0dGhpcy5mYXIgPSBmYXI7XHJcblx0XHR0aGlzLnhPZmZzZXQgPSAwO1xyXG5cdFx0dGhpcy55T2Zmc2V0ID0gMDtcclxuXHRcdHRoaXMucHJvamVjdE1hdHJpeERpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMudXBkYXRlQ2FtZXJhUGFybXMoKTtcclxuXHRcdHRoaXMuY3VsbGluZ1ZvbHVtZSA9IG5ldyBDdWxsaW5nVm9sdW1lKCk7XHJcblx0XHR0aGlzLmlzUGVyc3BlY3RpdmVDYW1lcmEgPSB0cnVlO1xyXG5cdH1cclxuXHRnZXQgYXNwZWN0KCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5fYXNwZWN0O1xyXG5cdH1cclxuXHJcblx0c2V0IGFzcGVjdCh2OiBudW1iZXIpIHtcclxuXHRcdHRoaXMucHJvamVjdE1hdHJpeERpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX2FzcGVjdCA9IHY7XHJcblx0fVxyXG5cdGdldCBmb3YoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzLl9mb3Y7XHJcblx0fVxyXG5cclxuXHRzZXQgZm92KHY6IG51bWJlcikge1xyXG5cdFx0dGhpcy5wcm9qZWN0TWF0cml4RGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fZm92ID0gdjtcclxuXHR9XHJcblx0cHJpdmF0ZSB1cGRhdGVDYW1lcmFQYXJtcygpIHtcclxuXHRcdHRoaXMudG9wID0gdGhpcy5uZWFyICogTWF0aC50YW4oMC41ICogR01hdGguUkFESUFOU19QRVJfREVHUkVFICogdGhpcy5mb3YpO1xyXG5cdFx0dGhpcy5oZWlnaHQgPSAyICogdGhpcy50b3A7XHJcblx0XHR0aGlzLndpZHRoID0gdGhpcy5hc3BlY3QgKiB0aGlzLmhlaWdodDtcclxuXHRcdHRoaXMubGVmdCA9IC0wLjUgKiB0aGlzLndpZHRoO1xyXG5cdH1cclxuXHRwdWJsaWMgdXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpIHtcclxuXHRcdGlmICh0aGlzLnByb2plY3RNYXRyaXhEaXJ0eSkge1xyXG5cdFx0XHR0aGlzLnVwZGF0ZUNhbWVyYVBhcm1zKCk7XHJcblx0XHRcdHRoaXMuX3Byb2plY3Rpb25NYXRyaXggPSBNYXRyaXg0Lm1ha2VQZXJzcGVjdGl2ZShcclxuXHRcdFx0XHR0aGlzLmxlZnQsXHJcblx0XHRcdFx0dGhpcy5sZWZ0ICsgdGhpcy53aWR0aCxcclxuXHRcdFx0XHR0aGlzLnRvcCxcclxuXHRcdFx0XHR0aGlzLnRvcCAtIHRoaXMuaGVpZ2h0LFxyXG5cdFx0XHRcdHRoaXMubmVhcixcclxuXHRcdFx0XHR0aGlzLmZhclxyXG5cdFx0XHQpO1xyXG5cdFx0XHR0aGlzLnByb2plY3RNYXRyaXhEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBCdWZmZXJVc2FnZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gXCIuLi9tYXRoL01hdHJpeDRcIjtcclxuaW1wb3J0IFNoYWRlckRhdGEgZnJvbSBcIi4uL3JlbmRlci9TaGFkZXJEYXRhXCI7XHJcbmltcG9ydCBVbmlmb3JtQnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybUJ1ZmZlclwiO1xyXG5pbXBvcnQgeyBVbmlmb3JtRW51bSB9IGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybXNcIjtcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gXCIuL1BlcnNwZWN0aXZlQ2FtZXJhXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQb2ludExpZ2h0U2hhZG93Q2FtZXJhIGV4dGVuZHMgUGVyc3BlY3RpdmVDYW1lcmEge1xyXG5cdHB1YmxpYyB2cE1hdHJpeEFycmF5OiBBcnJheTxNYXRyaXg0PjtcclxuXHRwdWJsaWMgdnBNYXRyaXhJbmRleEFycmF5OiBBcnJheTxudW1iZXI+O1xyXG5cclxuXHRjb25zdHJ1Y3Rvcihmb3YgPSA1MCwgYXNwZWN0ID0gMSwgbmVhciA9IDAuMSwgZmFyID0gMjAwMCkge1xyXG5cdFx0c3VwZXIoZm92LCBhc3BlY3QsIG5lYXIsIGZhcik7XHJcblx0XHR0aGlzLnZwTWF0cml4QXJyYXkgPSBbbmV3IE1hdHJpeDQoKSwgbmV3IE1hdHJpeDQoKSwgbmV3IE1hdHJpeDQoKSwgbmV3IE1hdHJpeDQoKSwgbmV3IE1hdHJpeDQoKSwgbmV3IE1hdHJpeDQoKV07XHJcblx0fVxyXG5cclxuXHQvLyBjcmVhdGVTaGFkZXJEYXRhKCkge1xyXG5cdC8vIFx0dGhpcy5zaGFkZXJEYXRhID0gbmV3IFNoYWRlckRhdGEoXCJjYW1lcmFcIiwgMCwgMSwgMSk7XHJcblxyXG5cdC8vIFx0Y29uc3QgdW5pZm9ybUJ1ZmZlciA9IG5ldyBVbmlmb3JtQnVmZmVyKHtcclxuXHQvLyBcdFx0bGFiZWw6IFwicG9pbnRMaWdodFNoYWRvd0NhbWVyYVwiLFxyXG5cdC8vIFx0XHR0eXBlOiBcInJlYWQtb25seS1zdG9yYWdlXCIsXHJcblx0Ly8gXHRcdHVzYWdlOiBCdWZmZXJVc2FnZS5TdG9yYWdlIHwgQnVmZmVyVXNhZ2UuQ29weURzdCxcclxuXHQvLyBcdFx0aGFzRHluYW1pY09mZnNldDogdHJ1ZSxcclxuXHQvLyBcdFx0bWluQmluZGluZ1NpemU6IDY0LFxyXG5cdC8vIFx0XHRtYXhPZmZzZXQ6IDYsXHJcblx0Ly8gXHRcdHNpemU6IDI1NiAqIDZcclxuXHQvLyBcdH0pO1xyXG5cdC8vIFx0dW5pZm9ybUJ1ZmZlci5zZXRNYXRyaXg0QXJyYXkoXHJcblx0Ly8gXHRcdFwidnBNYXRyaXhBcnJheVwiLFxyXG5cdC8vIFx0XHQoKSA9PiB7XHJcblx0Ly8gXHRcdFx0aWYgKHRoaXMudnBNYXRyaXhBcnJheS5sZW5ndGggIT0gNikgdGhyb3cgbmV3IEVycm9yKFwicG9pbnRMaWdodFNoYWRvd0NhbWVyYSB1bmlmb3JtQnVmZmVyIGhhcyBFcnJvclwiKTtcclxuXHJcblx0Ly8gXHRcdFx0cmV0dXJuIHRoaXMudnBNYXRyaXhBcnJheTtcclxuXHQvLyBcdFx0fSxcclxuXHQvLyBcdFx0NixcclxuXHQvLyBcdFx0MjU2XHJcblx0Ly8gXHQpO1xyXG5cclxuXHQvLyBcdHRoaXMuc2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwicG9pbnRMaWdodFNoYWRvd0NhbWVyYVwiLCB1bmlmb3JtQnVmZmVyKTtcclxuXHQvLyBcdHRoaXMuc2hhZGVyRGF0YS5zZXREZWZpbmUoXCJpc1BvaW50TGlnaHRTaGFkb3dNYXBcIiwgdHJ1ZSk7XHJcblx0Ly8gfVxyXG5cclxuXHRjcmVhdGVTaGFkZXJEYXRhKCkge1xyXG5cdFx0dGhpcy5zaGFkZXJEYXRhID0gbmV3IFNoYWRlckRhdGEoXCJjYW1lcmFcIiwgMCwgMSwgMSk7XHJcblxyXG5cdFx0Y29uc3QgdW5pZm9ybUJ1ZmZlciA9IG5ldyBVbmlmb3JtQnVmZmVyKHtcclxuXHRcdFx0bGFiZWw6IFwicG9pbnRMaWdodFNoYWRvd0NhbWVyYVwiLFxyXG5cdFx0XHR0eXBlOiBcInJlYWQtb25seS1zdG9yYWdlXCIsXHJcblx0XHRcdHVzYWdlOiBCdWZmZXJVc2FnZS5TdG9yYWdlIHwgQnVmZmVyVXNhZ2UuQ29weURzdFxyXG5cdFx0fSk7XHJcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFwidnBNYXRyaXhcIixcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLnZwTWF0cml4O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0XHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwicG9pbnRMaWdodFNoYWRvd0NhbWVyYVwiLCB1bmlmb3JtQnVmZmVyKTtcclxuXHRcdHRoaXMuc2hhZGVyRGF0YS5zZXREZWZpbmUoXCJpc1BvaW50TGlnaHRTaGFkb3dNYXBcIiwgdHJ1ZSk7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVWcE1hdHJpeEFycmF5QW5kSW5kZXgoaW5kZXg6IG51bWJlcikge1xyXG5cdFx0TWF0cml4NC5jbG9uZSh0aGlzLnZwTWF0cml4LCB0aGlzLnZwTWF0cml4QXJyYXlbaW5kZXhdKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vLi4vY2FtZXJhL0NhbWVyYVwiO1xyXG5pbXBvcnQgeyBUZXh0dXJlRm9ybWF0LCBUZXh0dXJlU2FtcGxlVHlwZSwgVGV4dHVyZVVzYWdlIH0gZnJvbSBcIi4uLy4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4uLy4uL21hdGgvVmVjdG9yMlwiO1xyXG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi4vLi4vbWF0aC9WZWN0b3I0XCI7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi8uLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5pbXBvcnQgeyBMaWdodCB9IGZyb20gXCIuLi9MaWdodFwiO1xyXG5leHBvcnQgY2xhc3MgQmFzZVNoYWRvdyB7XHJcblx0cHJvdGVjdGVkIF9zaGFkb3dNYXBTaXplOiBWZWN0b3IyO1xyXG5cdHByb3RlY3RlZCBfY2FtZXJhOiBDYW1lcmE7XHJcblx0cHJvdGVjdGVkIF9zaGFkb3dNYXA6IFRleHR1cmU7XHJcblx0cHVibGljIHR5cGU6IHN0cmluZztcclxuXHRwdWJsaWMgX3ZpZXdwb3J0czogQXJyYXk8VmVjdG9yND47XHJcblx0cHVibGljIHZpZXdwb3J0U2l6ZTogVmVjdG9yMjtcclxuXHRwdWJsaWMgY3VycmVudFZpZXdwb3J0SW5kZXg6IG51bWJlcjtcclxuXHRwdWJsaWMgdmlld1BvcnREaXJ0eTogYm9vbGVhbjtcclxuXHRwdWJsaWMgdnBNYXRyaXhEaXJ0eTogYm9vbGVhbjtcclxuXHJcblx0Y29uc3RydWN0b3Ioc2hhZG93TWFwU2l6ZTogVmVjdG9yMiwgY2FtZXJhOiBDYW1lcmEpIHtcclxuXHRcdHRoaXMuX3NoYWRvd01hcFNpemUgPSBzaGFkb3dNYXBTaXplO1xyXG5cdFx0dGhpcy5fY2FtZXJhID0gY2FtZXJhO1xyXG5cdFx0dGhpcy52aWV3UG9ydERpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMudnBNYXRyaXhEaXJ0eSA9IHRydWU7XHJcblxyXG5cdFx0dGhpcy5faW5pdCgpO1xyXG5cdH1cclxuXHJcblx0Z2V0IGNhbWVyYSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9jYW1lcmE7XHJcblx0fVxyXG5cclxuXHRnZXQgc2hhZG93TWFwU2l6ZSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9zaGFkb3dNYXBTaXplO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZpZXdwb3J0cygpIHtcclxuXHRcdHJldHVybiB0aGlzLl92aWV3cG9ydHM7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0U2hhZG93TWFwVGV4dHVyZSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9zaGFkb3dNYXA7XHJcblx0fVxyXG5cclxuXHRwcm90ZWN0ZWQgX2luaXQoKSB7XHJcblx0XHR0aGlzLl9pbml0U2hhZG93TWFwVGV4dHVyZSgpO1xyXG5cdH1cclxuXHJcblx0cHJvdGVjdGVkIF9pbml0U2hhZG93TWFwVGV4dHVyZSgpIHtcclxuXHRcdHRoaXMuX2NyZWF0ZVNoYWRvd01hcFRleHR1cmUoKTtcclxuXHR9XHJcblxyXG5cdHByb3RlY3RlZCBfY3JlYXRlU2hhZG93TWFwVGV4dHVyZSgpIHtcclxuXHRcdHRoaXMuX3NoYWRvd01hcCA9IG5ldyBUZXh0dXJlKHtcclxuXHRcdFx0c2l6ZToge1xyXG5cdFx0XHRcdHdpZHRoOiB0aGlzLl9zaGFkb3dNYXBTaXplLngsXHJcblx0XHRcdFx0aGVpZ2h0OiB0aGlzLl9zaGFkb3dNYXBTaXplLnksXHJcblx0XHRcdFx0ZGVwdGg6IDFcclxuXHRcdFx0fSxcclxuXHRcdFx0Zml4ZWRTaXplOiB0cnVlLFxyXG5cdFx0XHRzYW1wbGVUeXBlOiBUZXh0dXJlU2FtcGxlVHlwZS5EZXB0aCxcclxuXHRcdFx0Zm9ybWF0OiBUZXh0dXJlRm9ybWF0LkRlcHRoMjRQbHVzLFxyXG5cdFx0XHR1c2FnZTogVGV4dHVyZVVzYWdlLlJlbmRlckF0dGFjaG1lbnQgfCBUZXh0dXJlVXNhZ2UuVGV4dHVyZUJpbmRpbmcgfCBUZXh0dXJlVXNhZ2UuQ29weVNyY1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgdXBkYXRlKGxpZ2h0OiBMaWdodCkge31cclxufVxyXG4iLCJpbXBvcnQgUG9pbnRMaWdodFNoYWRvd0NhbWVyYSBmcm9tIFwiLi4vLi4vY2FtZXJhL1BvaW50TGlnaHRTaGFkb3dDYW1lcmFcIjtcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4uLy4uL21hdGgvVmVjdG9yMlwiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vLi4vbWF0aC9WZWN0b3IzXCI7XHJcbmltcG9ydCBWZWN0b3I0IGZyb20gXCIuLi8uLi9tYXRoL1ZlY3RvcjRcIjtcclxuaW1wb3J0IHsgUG9pbnRMaWdodCB9IGZyb20gXCIuLi9Qb2ludExpZ2h0XCI7XHJcbmltcG9ydCB7IEJhc2VTaGFkb3cgfSBmcm9tIFwiLi9CYXNlU2hhZG93XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUG9pbnRMaWdodFNoYWRvdyBleHRlbmRzIEJhc2VTaGFkb3cge1xyXG5cdHB1YmxpYyB0eXBlOiBzdHJpbmc7XHJcblx0cHJpdmF0ZSBfcG9pbnRMaWdodFNoYWRvd0xvb2tEaXJlY3Rpb25zOiBBcnJheTxWZWN0b3IzPjtcclxuXHRwcml2YXRlIF9wb2ludExpZ2h0U2hhZG93VXBzOiBBcnJheTxWZWN0b3IzPjtcclxuXHR2cE1hdHJpeEFycmF5RGlydHk6IGJvb2xlYW47XHJcblxyXG5cdGdldCBjYW1lcmEoKTogUG9pbnRMaWdodFNoYWRvd0NhbWVyYSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fY2FtZXJhIGFzIFBvaW50TGlnaHRTaGFkb3dDYW1lcmE7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdGNvbnN0IGNhbWVyYSA9IG5ldyBQb2ludExpZ2h0U2hhZG93Q2FtZXJhKDkwLCAxLCAwLjEsIDUwMCk7XHJcblx0XHRzdXBlcihuZXcgVmVjdG9yMigxNTM2LCAxMDI0KSwgY2FtZXJhKTtcclxuXHRcdHRoaXMudmlld3BvcnRTaXplID0gbmV3IFZlY3RvcjIoNTEyLCA1MTIpO1xyXG5cdFx0dGhpcy5jdXJyZW50Vmlld3BvcnRJbmRleCA9IDA7XHJcblx0XHR0aGlzLnR5cGUgPSBcInBvaW50TGlnaHRTaGFkb3dcIjtcclxuXHRcdHRoaXMudnBNYXRyaXhBcnJheURpcnR5ID0gdHJ1ZTtcclxuXHJcblx0XHR0aGlzLl92aWV3cG9ydHMgPSBbXHJcblx0XHRcdC8vIHBvc2l0aXZlIFggMFxyXG5cdFx0XHRuZXcgVmVjdG9yNCgwLCAwLCAxIC8gMywgMSAvIDIpLFxyXG5cdFx0XHQvLyBuZWdhdGl2ZSBYIDFcclxuXHRcdFx0bmV3IFZlY3RvcjQoMSwgMCwgMSAvIDMsIDEgLyAyKSxcclxuXHRcdFx0Ly8gcG9zaXRpdmUgWiAyXHJcblx0XHRcdG5ldyBWZWN0b3I0KDIsIDAsIDEgLyAzLCAxIC8gMiksXHJcblx0XHRcdC8vIG5lZ2F0aXZlIFogM1xyXG5cdFx0XHRuZXcgVmVjdG9yNCgwLCAxLCAxIC8gMywgMSAvIDIpLFxyXG5cdFx0XHQvLyBwb3NpdGl2ZSBZIDRcclxuXHRcdFx0bmV3IFZlY3RvcjQoMSwgMSwgMSAvIDMsIDEgLyAyKSxcclxuXHRcdFx0Ly8gbmVnYXRpdmUgWSA1XHJcblx0XHRcdG5ldyBWZWN0b3I0KDIsIDEsIDEgLyAzLCAxIC8gMilcclxuXHRcdF07XHJcblxyXG5cdFx0dGhpcy5fcG9pbnRMaWdodFNoYWRvd0xvb2tEaXJlY3Rpb25zID0gW1xyXG5cdFx0XHRuZXcgVmVjdG9yMygxLCAwLCAwKSxcclxuXHRcdFx0bmV3IFZlY3RvcjMoLTEsIDAsIDApLFxyXG5cdFx0XHRuZXcgVmVjdG9yMygwLCAwLCAxKSxcclxuXHRcdFx0bmV3IFZlY3RvcjMoMCwgMCwgLTEpLFxyXG5cdFx0XHRuZXcgVmVjdG9yMygwLCAxLCAwKSxcclxuXHRcdFx0bmV3IFZlY3RvcjMoMCwgLTEsIDApXHJcblx0XHRdO1xyXG5cclxuXHRcdHRoaXMuX3BvaW50TGlnaHRTaGFkb3dVcHMgPSBbXHJcblx0XHRcdG5ldyBWZWN0b3IzKDAsIDEsIDApLFxyXG5cdFx0XHRuZXcgVmVjdG9yMygwLCAxLCAwKSxcclxuXHRcdFx0bmV3IFZlY3RvcjMoMCwgMSwgMCksXHJcblx0XHRcdG5ldyBWZWN0b3IzKDAsIDEsIDApLFxyXG5cdFx0XHRuZXcgVmVjdG9yMygwLCAwLCAxKSxcclxuXHRcdFx0bmV3IFZlY3RvcjMoMCwgMCwgLTEpXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHVwZGF0ZShsaWdodDogUG9pbnRMaWdodCkge1xyXG5cdFx0dGhpcy51cGRhdGVNYXRyaWNlcyhsaWdodCk7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVNYXRyaWNlcyhsaWdodDogUG9pbnRMaWdodCkge1xyXG5cdFx0aWYgKHRoaXMuY2FtZXJhIGluc3RhbmNlb2YgUG9pbnRMaWdodFNoYWRvd0NhbWVyYSkge1xyXG5cdFx0XHR0aGlzLmNhbWVyYS5wb3NpdGlvbi5jb3B5KGxpZ2h0LnBvc2l0aW9uKTtcclxuXHRcdFx0Y29uc3QgdGFyZ2V0ID0gVmVjdG9yMy5jbG9uZShsaWdodC5wb3NpdGlvbik7XHJcblx0XHRcdHRhcmdldC5hZGQodGhpcy5fcG9pbnRMaWdodFNoYWRvd0xvb2tEaXJlY3Rpb25zW3RoaXMuY3VycmVudFZpZXdwb3J0SW5kZXhdKTtcclxuXHRcdFx0dGhpcy5jYW1lcmEudXAuY29weSh0aGlzLl9wb2ludExpZ2h0U2hhZG93VXBzW3RoaXMuY3VycmVudFZpZXdwb3J0SW5kZXhdKTtcclxuXHRcdFx0Y29uc3QgeyB4LCB5LCB6IH0gPSB0YXJnZXQ7XHJcblx0XHRcdHRoaXMuY2FtZXJhLmxvb2tBdCh4LCB5LCB6KTtcclxuXHRcdFx0dGhpcy5jYW1lcmEudXBkYXRlTWF0cml4KCk7XHJcblx0XHRcdHRoaXMuY2FtZXJhLnVwZGF0ZVZwTWF0cml4QXJyYXlBbmRJbmRleCh0aGlzLmN1cnJlbnRWaWV3cG9ydEluZGV4KTtcclxuXHRcdFx0aWYgKHRoaXMuY3VycmVudFZpZXdwb3J0SW5kZXggPT0gNSkgdGhpcy52cE1hdHJpeEFycmF5RGlydHkgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBMaWdodFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XHJcbmltcG9ydCB7IExpZ2h0IH0gZnJvbSBcIi4vTGlnaHRcIjtcclxuaW1wb3J0IHsgUG9pbnRMaWdodFNoYWRvdyB9IGZyb20gXCIuL3NoYWRvd3MvUG9pbnRMaWdodFNoYWRvd1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBvaW50TGlnaHQgZXh0ZW5kcyBMaWdodCB7XHJcblx0cHJpdmF0ZSBfZGlzdGFuY2U6IG51bWJlcjtcclxuXHRwcml2YXRlIF9kZWNheTogbnVtYmVyO1xyXG5cdGRpc3RhbmNlRGlydHk6IGJvb2xlYW47XHJcblx0ZGVjYXlEaXJ0eTogYm9vbGVhbjtcclxuXHJcblx0Z2V0IHNoYWRvdygpOiBQb2ludExpZ2h0U2hhZG93IHtcclxuXHRcdHJldHVybiB0aGlzLl9zaGFkb3cgYXMgUG9pbnRMaWdodFNoYWRvdztcclxuXHR9XHJcblxyXG5cdHNldCBzaGFkb3codmFsdWU6IFBvaW50TGlnaHRTaGFkb3cpIHtcclxuXHRcdHRoaXMuc2hhZG93RGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fc2hhZG93ID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3Rvcihjb2xvcjogVmVjdG9yMywgaW50ZW5zaXR5OiBudW1iZXIsIGRpc3RhbmNlID0gMCwgZGVjYXkgPSA0LCBvcGVuU2hhZG93ID0gdHJ1ZSkge1xyXG5cdFx0c3VwZXIoY29sb3IsIGludGVuc2l0eSk7XHJcblx0XHR0aGlzLl9kaXN0YW5jZSA9IGRpc3RhbmNlO1xyXG5cdFx0dGhpcy5fZGVjYXkgPSBkZWNheTtcclxuXHRcdHRoaXMuZGlzdGFuY2VEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmRlY2F5RGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5saWdodFR5cGUgPSBMaWdodFR5cGUuUG9pbnRMaWdodDtcclxuXHRcdGlmIChvcGVuU2hhZG93KSB0aGlzLnNoYWRvdyA9IG5ldyBQb2ludExpZ2h0U2hhZG93KCk7XHJcblx0fVxyXG5cdHNldCBkaXN0YW5jZSh2YWx1ZSkge1xyXG5cdFx0dGhpcy5kaXN0YW5jZURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX2Rpc3RhbmNlID0gdmFsdWU7XHJcblx0fVxyXG5cdGdldCBkaXN0YW5jZSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9kaXN0YW5jZTtcclxuXHR9XHJcblx0c2V0IGRlY2F5KHZhbHVlKSB7XHJcblx0XHR0aGlzLmRlY2F5RGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fZGVjYXkgPSB2YWx1ZTtcclxuXHR9XHJcblx0Z2V0IGRlY2F5KCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2RlY2F5O1xyXG5cdH1cclxufVxyXG4vLyB1bmlmb3JtXHJcbi8vIGNvbG9yOiB7fSxcclxuLy8gcG9zaXRpb246IHt9LFxyXG4vLyBkZWNheToge30sXHJcbi8vIGRpc3RhbmNlOiB7fVxyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XHJcbmltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XHJcbmltcG9ydCBMaWdodE1hbmdlciBmcm9tIFwiLi4vY29yZS9MaWdodE1hbmdlclwiO1xyXG5pbXBvcnQgUmVuZGVyUXVldWUgZnJvbSBcIi4uL2NvcmUvUmVuZGVyUXVldWVcIjtcclxuaW1wb3J0IHsgQ29tbWFuZFN1YlR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xyXG5pbXBvcnQgeyBMaWdodCB9IGZyb20gXCIuLi9saWdodC9MaWdodFwiO1xyXG5pbXBvcnQgeyBQb2ludExpZ2h0IH0gZnJvbSBcIi4uL2xpZ2h0L1BvaW50TGlnaHRcIjtcclxuaW1wb3J0IHsgQmFzZVNoYWRvdyB9IGZyb20gXCIuLi9saWdodC9zaGFkb3dzL0Jhc2VTaGFkb3dcIjtcclxuaW1wb3J0IHsgUG9pbnRMaWdodFNoYWRvdyB9IGZyb20gXCIuLi9saWdodC9zaGFkb3dzL1BvaW50TGlnaHRTaGFkb3dcIjtcclxuaW1wb3J0IFNoYWRlck1hdGVyaWFsIGZyb20gXCIuLi9tYXRlcmlhbC9TaGFkZXJNYXRlcmlhbFwiO1xyXG5pbXBvcnQgQXR0YWNobWVudCBmcm9tIFwiLi4vcmVuZGVyL0F0dGFjaG1lbnRcIjtcclxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL3JlbmRlci9Db250ZXh0XCI7XHJcbmltcG9ydCBSZW5kZXJUYXJnZXQgZnJvbSBcIi4uL3JlbmRlci9SZW5kZXJUYXJnZXRcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcbmltcG9ydCBnZXRWZXJ0RnJhZyBmcm9tIFwiLi4vc2hhZGVyL1NoYWRlcnNcIjtcclxuaW1wb3J0IFBhc3MgZnJvbSBcIi4vUGFzc1wiO1xyXG5leHBvcnQgY2xhc3MgU2hhZG93UGFzcyBleHRlbmRzIFBhc3Mge1xyXG5cdHB1YmxpYyBzaGFkb3dNYXRlcmlhbDogU2hhZGVyTWF0ZXJpYWw7XHJcblx0X3Rlc3RUZXh0dXJlOiBUZXh0dXJlO1xyXG5cdGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdHN1cGVyKGNvbnRleHQpO1xyXG5cdFx0dGhpcy5pbml0KGNvbnRleHQpO1xyXG5cdH1cclxuXHRyZW5kZXIoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSwgY2FtZXJhPzogQ2FtZXJhKSB7XHJcblx0XHRjb25zdCB7IHJlbmRlclF1ZXVlLCBjb250ZXh0LCBsaWdodE1hbmdlciB9ID0gZnJhbWVTdGF0ZTtcclxuXHRcdGNvbnN0IGxpZ2h0cyA9IGxpZ2h0TWFuZ2VyLmdldEFsbExpZ2h0cygpO1xyXG5cdFx0aWYgKGxpZ2h0cy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBsaWdodDogUG9pbnRMaWdodCB8IExpZ2h0ID0gbGlnaHRzW2ldO1xyXG5cdFx0XHRjb25zdCBzaGFkb3cgPSBsaWdodC5zaGFkb3c7XHJcblx0XHRcdGlmICghc2hhZG93KSBjb250aW51ZTtcclxuXHRcdFx0Ly8gdGhpcy5fdGVzdFRleHR1cmUgPSBjb250ZXh0LmxpZ2h0TWFuZ2VyLl90ZXN0VGV4dHVyZVxyXG5cdFx0XHQvLyB0aGlzLmJlZm9yZVJlbmRlcih7IHNoYWRvdyB9KTtcclxuXHRcdFx0aWYgKHNoYWRvdyBpbnN0YW5jZW9mIFBvaW50TGlnaHRTaGFkb3cgJiYgbGlnaHQgaW5zdGFuY2VvZiBQb2ludExpZ2h0KSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzaGFkb3cudmlld3BvcnRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHQvLyDliqjmgIFidWZmZXLmmoLmnKrosIPpgJrvvIzlhYjku6XmraTnp43mlrnlvI/op6PlhrNcclxuXHRcdFx0XHRcdHN3aXRjaCAoaSkge1xyXG5cdFx0XHRcdFx0XHRjYXNlIDA6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5yZW5kZXJUYXJnZXQuZGVwdGhBdHRhY2htZW50Lm9wID0gXCJjbGVhclwiO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnJlbmRlclRhcmdldC5kZXB0aEF0dGFjaG1lbnQub3AgPSBcImxvYWRcIjtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMuYmVmb3JlUmVuZGVyKHsgc2hhZG93IH0pO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IHZpZXdwb3J0ID0gc2hhZG93LnZpZXdwb3J0c1tpXTtcclxuXHRcdFx0XHRcdGNvbnN0IHZpZXdwb3J0U2l6ZSA9IHNoYWRvdy52aWV3cG9ydFNpemU7XHJcblx0XHRcdFx0XHRzaGFkb3cuY3VycmVudFZpZXdwb3J0SW5kZXggPSBpO1xyXG5cdFx0XHRcdFx0c2hhZG93LnVwZGF0ZShsaWdodCk7XHJcblx0XHRcdFx0XHQvLyBsaWdodC5mb3JjZVVwZGF0ZSA9IHRydWU7XHJcblx0XHRcdFx0XHRjb250ZXh0LnNldFZpZXdQb3J0KFxyXG5cdFx0XHRcdFx0XHR2aWV3cG9ydC54ICogdmlld3BvcnRTaXplLngsXHJcblx0XHRcdFx0XHRcdHZpZXdwb3J0LnkgKiB2aWV3cG9ydFNpemUueSxcclxuXHRcdFx0XHRcdFx0dmlld3BvcnRTaXplLngsXHJcblx0XHRcdFx0XHRcdHZpZXdwb3J0U2l6ZS55XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0Y29udGV4dC5zZXRTY2lzc29yVGVzdChcclxuXHRcdFx0XHRcdFx0dmlld3BvcnQueCAqIHZpZXdwb3J0U2l6ZS54LFxyXG5cdFx0XHRcdFx0XHR2aWV3cG9ydC55ICogdmlld3BvcnRTaXplLnksXHJcblx0XHRcdFx0XHRcdHZpZXdwb3J0U2l6ZS54LFxyXG5cdFx0XHRcdFx0XHR2aWV3cG9ydFNpemUueVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdHRoaXMuc3ViUmVuZGVyKHJlbmRlclF1ZXVlLCBzaGFkb3csIGxpZ2h0TWFuZ2VyKTtcclxuXHRcdFx0XHRcdHN1cGVyLmFmdGVyUmVuZGVyKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMucmVuZGVyVGFyZ2V0LmRlcHRoQXR0YWNobWVudC5vcCA9IFwiY2xlYXJcIjtcclxuXHRcdFx0XHR0aGlzLmJlZm9yZVJlbmRlcih7IHNoYWRvdyB9KTtcclxuXHRcdFx0XHRzaGFkb3cudXBkYXRlKGxpZ2h0KTtcclxuXHRcdFx0XHRjb250ZXh0LnNldFZpZXdQb3J0KDAsIDAsIHNoYWRvdy5zaGFkb3dNYXBTaXplLngsIHNoYWRvdy5zaGFkb3dNYXBTaXplLnkpO1xyXG5cdFx0XHRcdGNvbnRleHQuc2V0U2Npc3NvclRlc3QoMCwgMCwgc2hhZG93LnNoYWRvd01hcFNpemUueCwgc2hhZG93LnNoYWRvd01hcFNpemUueSk7XHJcblx0XHRcdFx0dGhpcy5zdWJSZW5kZXIocmVuZGVyUXVldWUsIHNoYWRvdywgbGlnaHRNYW5nZXIpO1xyXG5cdFx0XHRcdHN1cGVyLmFmdGVyUmVuZGVyKCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vIHN1cGVyLmFmdGVyUmVuZGVyKCk7XHJcblx0XHRsaWdodE1hbmdlci51cGRhdGVMaWdodFNoYWRvdygpO1xyXG5cdFx0Y29udGV4dC5yZXNldFZpZXdQb3J0VG9GdWxsQ2FudmFzKCk7XHJcblx0fVxyXG5cclxuXHRzdWJSZW5kZXIocmVuZGVyUXVldWU6IFJlbmRlclF1ZXVlLCBzaGFkb3c6IEJhc2VTaGFkb3csIGxpZ2h0TWFuZ2VyOiBMaWdodE1hbmdlcikge1xyXG5cdFx0cmVuZGVyUXVldWUuc29ydCgpO1xyXG5cdFx0Ly8gcmVuZGVyUXVldWUucHJlUmVuZGVyKHNoYWRvdy5jYW1lcmEsIHRoaXMuY29udGV4dCwgdGhpcy5wYXNzUmVuZGVyRW5jb2Rlcik7XHJcblx0XHRyZW5kZXJRdWV1ZS50cmFuc3BhcmVudFJlbmRlcihcclxuXHRcdFx0c2hhZG93LmNhbWVyYSxcclxuXHRcdFx0dGhpcy5jb250ZXh0LFxyXG5cdFx0XHR0aGlzLnBhc3NSZW5kZXJFbmNvZGVyLFxyXG5cdFx0XHR0aGlzLnNoYWRvd01hdGVyaWFsLFxyXG5cdFx0XHRDb21tYW5kU3ViVHlwZS5TaGFkb3csXHJcblx0XHRcdGxpZ2h0TWFuZ2VyXHJcblx0XHQpO1xyXG5cdFx0cmVuZGVyUXVldWUub3BhcXVlUmVuZGVyKFxyXG5cdFx0XHRzaGFkb3cuY2FtZXJhLFxyXG5cdFx0XHR0aGlzLmNvbnRleHQsXHJcblx0XHRcdHRoaXMucGFzc1JlbmRlckVuY29kZXIsXHJcblx0XHRcdHRoaXMuc2hhZG93TWF0ZXJpYWwsXHJcblx0XHRcdENvbW1hbmRTdWJUeXBlLlNoYWRvdyxcclxuXHRcdFx0bGlnaHRNYW5nZXJcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHQvLyBnZXREZXB0aFRleHR1cmUoKTogVGV4dHVyZSB7XHJcblx0Ly8gXHRyZXR1cm4gdGhpcy5fdGVzdFRleHR1cmU7XHJcblx0Ly8gfVxyXG5cdGJlZm9yZVJlbmRlcihvcHRpb25zOiB7IHNoYWRvdzogQmFzZVNoYWRvdyB9KSB7XHJcblx0XHRjb25zdCB7IHNoYWRvdyB9ID0gb3B0aW9ucztcclxuXHRcdHRoaXMuc2V0UmVuZGVyVGFyZ2V0KHNoYWRvdyk7XHJcblx0XHRzdXBlci5iZWZvcmVSZW5kZXIoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2V0UmVuZGVyVGFyZ2V0KHNoYWRvdzogQmFzZVNoYWRvdykge1xyXG5cdFx0dGhpcy5yZW5kZXJUYXJnZXQuZGVwdGhBdHRhY2htZW50LnRleHR1cmUgPSBzaGFkb3cuZ2V0U2hhZG93TWFwVGV4dHVyZSgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBpbml0KGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdHRoaXMuY3JlYXRlUmVuZGVyVGFyZ2V0KGNvbnRleHQpO1xyXG5cdFx0dGhpcy5jcmVhdGVTaGFkb3dNYXRlcmlhbCgpO1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZVJlbmRlclRhcmdldChjb250ZXh0OiBDb250ZXh0KSB7XHJcblx0XHRjb25zdCBkZXB0aEF0dGFjaG1lbnQgPSBuZXcgQXR0YWNobWVudCgxLjAsIHsgdGV4dHVyZTogdW5kZWZpbmVkIH0pO1xyXG5cdFx0dGhpcy5yZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0KFwicmVuZGVyXCIsIFtdLCBkZXB0aEF0dGFjaG1lbnQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVTaGFkb3dNYXRlcmlhbCgpIHtcclxuXHRcdGNvbnN0IHNoYWRvd01hcFNoYWRlckZ1bmN0aW9uID0gKGRlZmluZXMgPSB7fSkgPT4ge1xyXG5cdFx0XHRjb25zdCBmaW5hbERlZmluZXMgPSBPYmplY3QuYXNzaWduKFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdHNlbGZCaW5kaW5nOiAwLFxyXG5cdFx0XHRcdFx0Y2FtZXJhQmluZGluZzogMCxcclxuXHRcdFx0XHRcdHBvc2l0aW9uTG9jYXRpb246IDBcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGRlZmluZXNcclxuXHRcdFx0KTtcclxuXHRcdFx0cmV0dXJuIGdldFZlcnRGcmFnKFwic2hhZG93TWFwXCIsIGZpbmFsRGVmaW5lcykudmVydDtcclxuXHRcdH07XHJcblxyXG5cdFx0dGhpcy5zaGFkb3dNYXRlcmlhbCA9IG5ldyBTaGFkZXJNYXRlcmlhbCh7XHJcblx0XHRcdHR5cGU6IFwic2hhZG93TWF0ZXJpYWxcIixcclxuXHRcdFx0dW5pZm9ybXM6IHtcclxuXHRcdFx0XHRtb2RlbE1hdHJpeDogeyB0eXBlOiBcIm1hdDRcIiwgdmFsdWU6IG51bGwgfVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR2ZXJ0OiBzaGFkb3dNYXBTaGFkZXJGdW5jdGlvbixcclxuXHRcdFx0ZnJhZzogdW5kZWZpbmVkLFxyXG5cdFx0XHRsaWdodDogZmFsc2UgLy8gVE9ETzrlhYh0cnVl77yMZmFsc2XmnInmmL7npLpidWdcclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XHJcbmltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XHJcbmltcG9ydCB7IEJhc2ljUGFzcyB9IGZyb20gXCIuLi9wYXNzL0Jhc2ljUGFzc1wiO1xyXG5pbXBvcnQgeyBTaGFkb3dQYXNzIH0gZnJvbSBcIi4uL3Bhc3MvU2hhZG93UGFzc1wiO1xyXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vcmVuZGVyL0NvbnRleHRcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcbmltcG9ydCBJQmFzZVJlbmRlckxpbmUgZnJvbSBcIi4vSUJhc2VSZW5kZXJMaW5lXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3J3YXJkUmVuZGVyTGluZSBpbXBsZW1lbnRzIElCYXNlUmVuZGVyTGluZSB7XHJcblx0cHJpdmF0ZSBiYXNpY1Bhc3M6IEJhc2ljUGFzcztcclxuXHRwcm90ZWN0ZWQgc2hhZG93UGFzczogU2hhZG93UGFzcztcclxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgY29udGV4dDogQ29udGV4dCkge1xyXG5cdFx0dGhpcy5iYXNpY1Bhc3MgPSBuZXcgQmFzaWNQYXNzKGNvbnRleHQpO1xyXG5cdFx0dGhpcy5zaGFkb3dQYXNzID0gbmV3IFNoYWRvd1Bhc3MoY29udGV4dCk7XHJcblx0XHQvLyBjb25zdCBibG9vbT1uZXcgQmxvb21Qb3N0RWZmZWN0KHtcclxuXHRcdC8vIFx0d2lkdGgsXHJcblx0XHQvLyBcdGhlaWdodCxcclxuXHRcdC8vIFx0c3RyZW5ndGg6MC4zLFxyXG5cdFx0Ly8gXHRyYWRpdXM6MC4zLFxyXG5cdFx0Ly8gXHR0aHJlc2hvbGQ6MC41XHJcblx0XHQvLyB9KTtcclxuXHRcdC8vIHRoaXMucG9zdEVmZmVjdENvbGxlY3Rpb24uYWRkKGJsb29tKVxyXG5cdH1cclxuXHRnZXRPdXRwdXRUZXh0dXJlKCk6IFRleHR1cmUge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmFzaWNQYXNzLmdldENvbG9yVGV4dHVyZSgwKTtcclxuXHRcdC8vIHJldHVybiB0aGlzLnNoYWRvd1Bhc3MuZ2V0RGVwdGhUZXh0dXJlKClcclxuXHR9XHJcblx0cmVuZGVyKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUsIGNhbWVyYT86IENhbWVyYSkge1xyXG5cdFx0dGhpcy5zaGFkb3dQYXNzLnJlbmRlcihmcmFtZVN0YXRlLCBjYW1lcmEpO1xyXG5cclxuXHRcdHRoaXMuYmFzaWNQYXNzLmJlZm9yZVJlbmRlcihmcmFtZVN0YXRlKTtcclxuXHRcdHRoaXMuYmFzaWNQYXNzLnJlbmRlcihmcmFtZVN0YXRlLCBjYW1lcmEpO1xyXG5cdFx0dGhpcy5iYXNpY1Bhc3MuYWZ0ZXJSZW5kZXIoKTtcclxuXHR9XHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXMuYmFzaWNQYXNzID0gdW5kZWZpbmVkO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuL2NhbWVyYS9DYW1lcmFcIjtcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tIFwiLi9jYW1lcmEvUGVyc3BlY3RpdmVDYW1lcmFcIjtcbmltcG9ydCB7IEV2ZW50RGlzcGF0Y2hlciB9IGZyb20gXCIuL2NvcmUvRXZlbnREaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBGcmFtZVN0YXRlLCBCYWNrZ3JvdW5kIH0gZnJvbSBcIi4vY29yZS9GcmFtZVN0YXRlXCI7XG5pbXBvcnQgTGlnaHRNYW5nZXIgZnJvbSBcIi4vY29yZS9MaWdodE1hbmdlclwiO1xuaW1wb3J0IE1lc2hNYW5nZXIgZnJvbSBcIi4vY29yZS9NZXNoTWFuZ2VyXCI7XG5pbXBvcnQgdGV4dHVyZUNhY2hlIGZyb20gXCIuL2NvcmUvVGV4dHVyZUNhY2hlXCI7XG5pbXBvcnQgeyBJbnN0YW5jZSwgUmVuZGVyT2JqZWN0VHlwZSB9IGZyb20gXCIuL2NvcmUvV2ViR1BVVHlwZXNcIjtcbmltcG9ydCB7IExpZ2h0IH0gZnJvbSBcIi4vbGlnaHQvTGlnaHRcIjtcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi9tZXNoL01lc2hcIjtcbmltcG9ydCBOb2RlIGZyb20gXCIuL21lc2gvTm9kZVwiO1xuaW1wb3J0IFBvc3RFZmZlY3QgZnJvbSBcIi4vcG9zdC1wcm9jZXNzL1Bvc3RFZmZlY3RcIjtcbmltcG9ydCBQb3N0RWZmZWN0Q29sbGVjdGlvbiBmcm9tIFwiLi9wb3N0LXByb2Nlc3MvUG9zdEVmZmVjdENvbGxlY3Rpb25cIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuL3JlbmRlci9Db250ZXh0XCI7XG5pbXBvcnQgeyBWaWV3UG9ydCB9IGZyb20gXCIuL3JlbmRlci9SZW5kZXJTdGF0ZVwiO1xuaW1wb3J0IEZvcndhcmRSZW5kZXJMaW5lIGZyb20gXCIuL3JlbmRlcnBpcGVsaW5lL0ZvcndhcmRSZW5kZXJMaW5lXCI7XG5pbXBvcnQgSUJhc2VSZW5kZXJMaW5lIGZyb20gXCIuL3JlbmRlcnBpcGVsaW5lL0lCYXNlUmVuZGVyTGluZVwiO1xuXG5leHBvcnQgY2xhc3MgU2NlbmUgZXh0ZW5kcyBFdmVudERpc3BhdGNoZXIge1xuXHRjYW1lcmE6IFBlcnNwZWN0aXZlQ2FtZXJhO1xuXHRjb250ZXh0OiBDb250ZXh0O1xuXHRyZXF1ZXN0QWRhcHRlcjogb2JqZWN0O1xuXHRkZXZpY2VEZXNjcmlwdG9yOiBvYmplY3Q7XG5cdHByZXNlbnRhdGlvbkNvbnRleHREZXNjcmlwdG9yOiBvYmplY3Q7XG5cdGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQ7XG5cdGZyYW1lU3RhdGU6IEZyYW1lU3RhdGU7XG5cdGN1cnJlbnRSZW5kZXJQaXBlbGluZTogSUJhc2VSZW5kZXJMaW5lO1xuXHR2aWV3cG9ydDogVmlld1BvcnQ7XG5cdGJhY2tncm91bmQ6IEJhY2tncm91bmQ7XG5cdHByaXZhdGUgcmVhZHk6IGJvb2xlYW47XG5cdHByaXZhdGUgaW5pdGVkOiBib29sZWFuO1xuXHRwcml2YXRlIG1lc2hNYW5nZXI6IE1lc2hNYW5nZXI7XG5cdHByaXZhdGUgcG9zdEVmZmVjdENvbGxlY3Rpb246IFBvc3RFZmZlY3RDb2xsZWN0aW9uO1xuXHRwcml2YXRlIGxpZ2h0TWFuZ2VyOiBMaWdodE1hbmdlcjtcblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5jb250YWluZXIgPVxuXHRcdFx0b3B0aW9ucy5jb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRGl2RWxlbWVudFxuXHRcdFx0XHQ/IG9wdGlvbnMuY29udGFpbmVyXG5cdFx0XHRcdDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3B0aW9ucy5jb250YWluZXIpO1xuXHRcdHRoaXMubWVzaE1hbmdlciA9IG5ldyBNZXNoTWFuZ2VyKCk7XG5cdFx0dGhpcy5wb3N0RWZmZWN0Q29sbGVjdGlvbiA9IG5ldyBQb3N0RWZmZWN0Q29sbGVjdGlvbigpO1xuXHRcdHRoaXMuY29udGV4dCA9IG5ldyBDb250ZXh0KHtcblx0XHRcdGNhbnZhczogbnVsbCxcblx0XHRcdGNvbnRhaW5lcjogdGhpcy5jb250YWluZXIsXG5cdFx0XHRwaXhlbFJhdGlvOiAxXG5cdFx0fSk7XG5cdFx0dGhpcy5yZXF1ZXN0QWRhcHRlciA9IG9wdGlvbnMucmVxdWVzdEFkYXB0ZXIgfHwge307XG5cdFx0dGhpcy5kZXZpY2VEZXNjcmlwdG9yID0gb3B0aW9ucy5kZXZpY2VEZXNjcmlwdG9yIHx8IHt9O1xuXHRcdHRoaXMucHJlc2VudGF0aW9uQ29udGV4dERlc2NyaXB0b3IgPSBvcHRpb25zLnByZXNlbnRhdGlvbkNvbnRleHREZXNjcmlwdG9yO1xuXHRcdHRoaXMucmVhZHkgPSBmYWxzZTtcblx0XHR0aGlzLmluaXRlZCA9IGZhbHNlO1xuXHRcdHRoaXMubGlnaHRNYW5nZXIgPSBuZXcgTGlnaHRNYW5nZXIoeyBvcGVuU2hhZG93OiB0cnVlIH0pO1xuXHRcdHRoaXMuYmFja2dyb3VuZCA9IG9wdGlvbnMuYmFja2dyb3VuZDtcblx0fVxuXHRwcml2YXRlIGFzeW5jIGluaXQoKSB7XG5cdFx0YXdhaXQgdGhpcy5jb250ZXh0LmluaXQodGhpcy5yZXF1ZXN0QWRhcHRlciwgdGhpcy5kZXZpY2VEZXNjcmlwdG9yLCB0aGlzLnByZXNlbnRhdGlvbkNvbnRleHREZXNjcmlwdG9yKTtcblx0XHR0aGlzLmN1cnJlbnRSZW5kZXJQaXBlbGluZSA9IG5ldyBGb3J3YXJkUmVuZGVyTGluZSh0aGlzLmNvbnRleHQpO1xuXHRcdHRoaXMuZnJhbWVTdGF0ZSA9IG5ldyBGcmFtZVN0YXRlKHRoaXMuY29udGV4dCwgdGhpcy5saWdodE1hbmdlciwgRnJhbWVTdGF0ZS5nZXRGcmFtZVN0YXRlT3B0aW9uc0J5U2NlbmUodGhpcykpO1xuXHRcdHRoaXMudmlld3BvcnQgPSBuZXcgVmlld1BvcnQoMCwgMCwgdGhpcy5jb250ZXh0LnByZXNlbnRhdGlvblNpemUud2lkdGgsIHRoaXMuY29udGV4dC5wcmVzZW50YXRpb25TaXplLmhlaWdodCk7XG5cdFx0dGhpcy5yZWFkeSA9IHRydWU7XG5cdH1cblx0YWRkKGluc3RhbmNlOiBJbnN0YW5jZSkge1xuXHRcdGlmIChcblx0XHRcdFtSZW5kZXJPYmplY3RUeXBlLk5vZGUsIFJlbmRlck9iamVjdFR5cGUuU2t5Ym94LCBSZW5kZXJPYmplY3RUeXBlLk1lc2gsIFJlbmRlck9iamVjdFR5cGUuRGVidWddLmluY2x1ZGVzKFxuXHRcdFx0XHRpbnN0YW5jZS50eXBlXG5cdFx0XHQpXG5cdFx0KSB7XG5cdFx0XHR0aGlzLm1lc2hNYW5nZXIuYWRkKDxNZXNoPmluc3RhbmNlKTtcblx0XHR9IGVsc2UgaWYgKGluc3RhbmNlLnR5cGUgPT0gUmVuZGVyT2JqZWN0VHlwZS5MaWdodCkge1xuXHRcdFx0dGhpcy5saWdodE1hbmdlci5hZGQoPExpZ2h0Pmluc3RhbmNlKTtcblx0XHR9IGVsc2UgaWYgKGluc3RhbmNlLnR5cGUgPT0gUmVuZGVyT2JqZWN0VHlwZS5Qb3N0RWZmZWN0KSB7XG5cdFx0XHR0aGlzLnBvc3RFZmZlY3RDb2xsZWN0aW9uLmFkZCg8UG9zdEVmZmVjdD5pbnN0YW5jZSk7XG5cdFx0fVxuXHR9XG5cdHJlbW92ZShpbnN0YW5jZTogSW5zdGFuY2UpIHtcblx0XHRpZiAoW1JlbmRlck9iamVjdFR5cGUuTm9kZSwgUmVuZGVyT2JqZWN0VHlwZS5Ta3lib3gsIFJlbmRlck9iamVjdFR5cGUuTWVzaF0uaW5jbHVkZXMoaW5zdGFuY2UudHlwZSkpIHtcblx0XHRcdHRoaXMubWVzaE1hbmdlci5yZW1vdmUoPE1lc2g+aW5zdGFuY2UpO1xuXHRcdH0gZWxzZSBpZiAoaW5zdGFuY2UudHlwZSA9PSBSZW5kZXJPYmplY3RUeXBlLkxpZ2h0KSB7XG5cdFx0XHR0aGlzLmxpZ2h0TWFuZ2VyLnJlbW92ZSg8TGlnaHQ+aW5zdGFuY2UpO1xuXHRcdH0gZWxzZSBpZiAoaW5zdGFuY2UudHlwZSA9PSBSZW5kZXJPYmplY3RUeXBlLlBvc3RFZmZlY3QpIHtcblx0XHRcdHRoaXMucG9zdEVmZmVjdENvbGxlY3Rpb24ucmVtb3ZlKDxQb3N0RWZmZWN0Pmluc3RhbmNlKTtcblx0XHR9XG5cdH1cblx0c2V0Q2FtZXJhKGNhbWVyYSkge1xuXHRcdHRoaXMuY2FtZXJhID0gY2FtZXJhO1xuXHR9XG5cdHJlc2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuXHRcdHRoaXMuY29udGV4dC5yZXNpemUod2lkdGgsIGhlaWdodCk7XG5cdFx0dGhpcy5wb3N0RWZmZWN0Q29sbGVjdGlvbi5zZXRSZXNvbHZlRnJhbWVEaXJ0eSh0cnVlKTtcblx0fVxuXHRhc3luYyByZW5kZXIobm9kZT86IE5vZGUsIGNhbWVyYT86IENhbWVyYSkge1xuXHRcdGlmICghdGhpcy5pbml0ZWQpIHtcblx0XHRcdHRoaXMuaW5pdGVkID0gdHJ1ZTtcblx0XHRcdGF3YWl0IHRoaXMuaW5pdCgpO1xuXHRcdFx0dGhpcy51cGRhdGUobm9kZSwgY2FtZXJhKTtcblx0XHRcdHRoaXMuYWZ0ZXJSZW5kZXIoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy51cGRhdGUobm9kZSwgY2FtZXJhKTtcblx0XHRcdHRoaXMuYWZ0ZXJSZW5kZXIoKTtcblx0XHR9XG5cdH1cblxuXHRhZnRlclJlbmRlcigpIHt9XG5cblx0cHVibGljIHNldFZpZXdQb3J0KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdGlmICghdGhpcy5yZWFkeSkgcmV0dXJuIGZhbHNlO1xuXHRcdHRoaXMuY29udGV4dC5zZXRWaWV3UG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRwdWJsaWMgc2V0U2Npc3NvclRlc3QoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogYm9vbGVhbiB7XG5cdFx0aWYgKCF0aGlzLnJlYWR5KSByZXR1cm4gZmFsc2U7XG5cdFx0dGhpcy5jb250ZXh0LnNldFNjaXNzb3JUZXN0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHByaXZhdGUgdXBkYXRlKG5vZGU/OiBOb2RlLCBjYW1lcmE/OiBDYW1lcmEpIHtcblx0XHRpZiAoIXRoaXMucmVhZHkpIHJldHVybjtcblx0XHQvLyDph4rmlL7nurnnkIZcblx0XHR0ZXh0dXJlQ2FjaGUucmVsZWFzZWRUZXh0dXJlcygpO1xuXHRcdC8vIOabtOaWsEZyYW1lU3RhdGVcblx0XHR0aGlzLmZyYW1lU3RhdGUudXBkYXRlKGNhbWVyYSA/PyB0aGlzLmNhbWVyYSwgRnJhbWVTdGF0ZS5nZXRGcmFtZVN0YXRlT3B0aW9uc0J5U2NlbmUodGhpcykpO1xuXHRcdC8vIHVwZGF0ZSBwcmltaXRpdmUgYW5kIHNlbGVjdFxuXHRcdChub2RlID8/IHRoaXMubWVzaE1hbmdlcikudXBkYXRlKHRoaXMuZnJhbWVTdGF0ZSwgY2FtZXJhID8/IHRoaXMuY2FtZXJhKTtcblx0XHQvLyBzZWxjdCByZW5kZXJQaXBlbGluZVxuXHRcdHRoaXMuY3VycmVudFJlbmRlclBpcGVsaW5lLnJlbmRlcih0aGlzLmZyYW1lU3RhdGUsIGNhbWVyYSA/PyB0aGlzLmNhbWVyYSk7XG5cdFx0Ly8g5ZCO5aSE55CGXG5cdFx0dGhpcy5wb3N0RWZmZWN0Q29sbGVjdGlvbi5yZW5kZXIodGhpcy5jb250ZXh0LCB0aGlzLmN1cnJlbnRSZW5kZXJQaXBlbGluZS5nZXRPdXRwdXRUZXh0dXJlKCkpO1xuXHR9XG59XG4iLCJpbXBvcnQgSUNsb25lIGZyb20gXCIuLi9jb3JlL0lDbG9uZVwiO1xyXG5pbXBvcnQgeyBSZW5kZXJPYmplY3RUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuLi9nZW9tZXRyeS9HZW9tZXRyeVwiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xyXG5pbXBvcnQgeyBGbG9hdDMyQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcclxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL3JlbmRlci9Db250ZXh0XCI7XHJcbmltcG9ydCB7IFByaW1pdGl2ZSwgUmVuZGVyU3RhdGUsIFRhcmdldCB9IGZyb20gXCIuLi9yZW5kZXIvUmVuZGVyU3RhdGVcIjtcclxuaW1wb3J0IFJlbmRlclRhcmdldCBmcm9tIFwiLi4vcmVuZGVyL1JlbmRlclRhcmdldFwiO1xyXG5pbXBvcnQgU2FtcGxlciBmcm9tIFwiLi4vcmVuZGVyL1NhbXBsZXJcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQb3N0RWZmZWN0IGltcGxlbWVudHMgSUNsb25lIHtcclxuXHR3aWR0aDogbnVtYmVyO1xyXG5cclxuXHRoZWlnaHQ6IG51bWJlcjtcclxuXHJcblx0ZGVmYXVsdFNhbXBsZXI6IFNhbXBsZXI7XHJcblxyXG5cdHJlc29sdmVUb0NhbnZhczogYm9vbGVhbjtcclxuXHJcblx0Y3VycmVudFJlbmRlclRhcmdldDogUmVuZGVyVGFyZ2V0O1xyXG5cclxuXHRmdWxsU2NyZWVuUXVhZDogTWVzaDtcclxuXHJcblx0cmVuZGVyU3RhdGU6IFJlbmRlclN0YXRlO1xyXG5cclxuXHRpZDogc3RyaW5nO1xyXG5cclxuXHRwcmlvcml0eTogbnVtYmVyO1xyXG5cclxuXHRpc1Bvc3RFZmZlY3Q6IGJvb2xlYW47XHJcblxyXG5cdHR5cGU6IFJlbmRlck9iamVjdFR5cGU7XHJcblxyXG5cdGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBpZDogc3RyaW5nKSB7XHJcblx0XHR0aGlzLndpZHRoID0gd2lkdGg7XHJcblx0XHR0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuXHRcdHRoaXMuaW5pdERlZmF1bHRQYXJtcygpO1xyXG5cdFx0dGhpcy5pZCA9IGlkO1xyXG5cdFx0dGhpcy5wcmlvcml0eSA9IDA7XHJcblx0XHR0aGlzLmlzUG9zdEVmZmVjdCA9IHRydWU7XHJcblx0XHR0aGlzLnR5cGUgPSBSZW5kZXJPYmplY3RUeXBlLlBvc3RFZmZlY3Q7XHJcblx0fVxyXG5cdHJlbmRlcihjb250ZXh0OiBDb250ZXh0LCBjb2xvclRleHR1cmU6IFRleHR1cmUpOiBUZXh0dXJlIHtcclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHRkZXN0cm95KCkge1xyXG5cdFx0dGhpcz8uY3VycmVudFJlbmRlclRhcmdldD8uZGVzdHJveSgpO1xyXG5cdH1cclxuXHRwcm90ZWN0ZWQgcmVuZGVyTWVzaChjb250ZXh0OiBDb250ZXh0KSB7XHJcblx0XHR0aGlzLmZ1bGxTY3JlZW5RdWFkLm1hdGVyaWFsLmRpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuZnVsbFNjcmVlblF1YWQubWF0ZXJpYWwudXBkYXRlKCk7XHJcblx0XHRjb25zdCBkcmF3Q29tYW5kID0gdGhpcy5mdWxsU2NyZWVuUXVhZC5nZXREcmF3Q29tbWFuZCgpO1xyXG5cdFx0Y29uc3QgY3VycmVudFJlbmRlclBhc3NFbmNvZGVyID0gdGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0LmJlZ2luUmVuZGVyUGFzc0VuY29kZXIoY29udGV4dCk7XHJcblx0XHRkcmF3Q29tYW5kLnJlbmRlcihjb250ZXh0LCBjdXJyZW50UmVuZGVyUGFzc0VuY29kZXIpO1xyXG5cdFx0dGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0LmVuZFJlbmRlclBhc3NFbmNvZGVyKCk7XHJcblx0fVxyXG5cdHByaXZhdGUgaW5pdERlZmF1bHRQYXJtcygpIHtcclxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IEdlb21ldHJ5KHt9KTtcclxuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZShcclxuXHRcdFx0bmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJwb3NpdGlvblwiLCBbLTEuMCwgMS4wLCAtMS4wLCAtMS4wLCAxLjAsIC0xLjAsIDEuMCwgLTEuMCwgMS4wLCAxLjAsIC0xLjAsIDEuMF0sIDIpXHJcblx0XHQpO1xyXG5cdFx0Z2VvbWV0cnkuY291bnQgPSA2O1xyXG5cdFx0Ly8gcnNcclxuXHRcdGNvbnN0IHByaW1pdGl2ZSA9IG5ldyBQcmltaXRpdmUoKTtcclxuXHRcdGNvbnN0IHRhcmdldCA9IG5ldyBUYXJnZXQoKTtcclxuXHRcdC8vIHRhcmdldC5mb3JtYXQ9VGV4dHVyZUZvcm1hdC5SR0JBOFVub3JtXHJcblx0XHRjb25zdCByZW5kZXJTdGF0ZSA9IG5ldyBSZW5kZXJTdGF0ZSgpO1xyXG5cdFx0cmVuZGVyU3RhdGUucHJpbWl0aXZlID0gcHJpbWl0aXZlO1xyXG5cdFx0cmVuZGVyU3RhdGUudGFyZ2V0cyA9IFt0YXJnZXRdO1xyXG5cdFx0dGhpcy5yZW5kZXJTdGF0ZSA9IHJlbmRlclN0YXRlO1xyXG5cdFx0dGhpcy5mdWxsU2NyZWVuUXVhZCA9IG5ldyBNZXNoKGdlb21ldHJ5KTtcclxuXHJcblx0XHR0aGlzLmRlZmF1bHRTYW1wbGVyID0gbmV3IFNhbXBsZXIoKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgVGV4dHVyZUZvcm1hdCwgVGV4dHVyZVVzYWdlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IHsgVW5pZm9ybXMgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgU2hhZGVyTWF0ZXJpYWwgZnJvbSBcIi4uL21hdGVyaWFsL1NoYWRlck1hdGVyaWFsXCI7XHJcbmltcG9ydCBDb2xvciBmcm9tIFwiLi4vbWF0aC9Db2xvclwiO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tIFwiLi4vbWF0aC9WZWN0b3IyXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuaW1wb3J0IEF0dGFjaG1lbnQgZnJvbSBcIi4uL3JlbmRlci9BdHRhY2htZW50XCI7XHJcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9yZW5kZXIvQ29udGV4dFwiO1xyXG5pbXBvcnQgUmVuZGVyVGFyZ2V0IGZyb20gXCIuLi9yZW5kZXIvUmVuZGVyVGFyZ2V0XCI7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5pbXBvcnQgZ2V0VmVydEZyYWcgZnJvbSBcIi4uL3NoYWRlci9TaGFkZXJzXCI7XHJcbmltcG9ydCBQb3N0RWZmZWN0IGZyb20gXCIuL1Bvc3RFZmZlY3RcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJsb29tUG9zdEVmZmVjdCBleHRlbmRzIFBvc3RFZmZlY3Qge1xyXG5cdHN0YXRpYyBCbHVyRGlyZWN0aW9uWCA9IG5ldyBWZWN0b3IyKDEuMCwgMC4wKTtcclxuXHRzdGF0aWMgQmx1ckRpcmVjdGlvblkgPSBuZXcgVmVjdG9yMigwLjAsIDEuMCk7XHJcblx0c3RyZW5ndGg6IG51bWJlcjtcclxuXHRyYWRpdXM6IG51bWJlcjtcclxuXHR0aHJlc2hvbGQ6IG51bWJlcjtcclxuXHRyZW5kZXJUYXJnZXRzSG9yaXpvbnRhbDogUmVuZGVyVGFyZ2V0W107XHJcblx0cmVuZGVyVGFyZ2V0c1ZlcnRpY2FsOiBSZW5kZXJUYXJnZXRbXTtcclxuXHRuTWlwczogbnVtYmVyO1xyXG5cdHJlbmRlclRhcmdldEJyaWdodDogUmVuZGVyVGFyZ2V0O1xyXG5cdG1hdGVyaWFsSGlnaFBhc3NGaWx0ZXI6IFNoYWRlck1hdGVyaWFsO1xyXG5cdGhpZ2hQYXNzVW5pZm9ybXM6IFVuaWZvcm1zO1xyXG5cdGNvbXBvc2l0ZU1hdGVyaWFsOiBTaGFkZXJNYXRlcmlhbDtcclxuXHRzZXBhcmFibGVCbHVyTWF0ZXJpYWxzOiBTaGFkZXJNYXRlcmlhbFtdO1xyXG5cdHNlcGFyYWJsZUJsdXJZTWF0ZXJpYWxzOiBTaGFkZXJNYXRlcmlhbFtdO1xyXG5cdGJsZW5kVW5pZm9ybXM6IFVuaWZvcm1zO1xyXG5cdGJsZW5kTWF0ZXJpYWw6IFNoYWRlck1hdGVyaWFsO1xyXG5cdGJsZW5kVGFyZ2V0OiBSZW5kZXJUYXJnZXQ7XHJcblxyXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJsb29tUG9zdEVmZmVjdFByb3BzKSB7XHJcblx0XHRzdXBlcihvcHRpb25zLndpZHRoLCBvcHRpb25zLmhlaWdodCwgXCJibG9vbVwiKTtcclxuXHRcdHRoaXMuc3RyZW5ndGggPSBvcHRpb25zLnN0cmVuZ3RoO1xyXG5cdFx0dGhpcy5yYWRpdXMgPSBvcHRpb25zLnJhZGl1cztcclxuXHRcdHRoaXMudGhyZXNob2xkID0gb3B0aW9ucy50aHJlc2hvbGQ7XHJcblx0XHR0aGlzLmluaXQoKTtcclxuXHR9XHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXMucmVuZGVyVGFyZ2V0QnJpZ2h0LmRlc3Ryb3koKTtcclxuXHR9XHJcblx0cmVuZGVyKGNvbnRleHQ6IENvbnRleHQsIGNvbG9yVGV4dHVyZTogVGV4dHVyZSk6IFRleHR1cmUge1xyXG5cdFx0Ly8gMS4gRXh0cmFjdCBCcmlnaHQgQXJlYXNcclxuXHRcdHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9IHRoaXMucmVuZGVyVGFyZ2V0QnJpZ2h0O1xyXG5cdFx0dGhpcy5oaWdoUGFzc1VuaWZvcm1zLnREaWZmdXNlLnZhbHVlID0gY29sb3JUZXh0dXJlO1xyXG5cdFx0dGhpcy5mdWxsU2NyZWVuUXVhZC5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxIaWdoUGFzc0ZpbHRlcjtcclxuXHRcdHRoaXMucmVuZGVyTWVzaChjb250ZXh0KTtcclxuXHRcdC8vIDIuIEJsdXIgQWxsIHRoZSBtaXBzIHByb2dyZXNzaXZlbHlcclxuXHRcdGxldCBpbnB1dFJlbmRlclRhcmdldCA9IHRoaXMucmVuZGVyVGFyZ2V0QnJpZ2h0O1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5NaXBzOyBpKyspIHtcclxuXHRcdFx0dGhpcy5mdWxsU2NyZWVuUXVhZC5tYXRlcmlhbCA9IHRoaXMuc2VwYXJhYmxlQmx1ck1hdGVyaWFsc1tpXTtcclxuXHJcblx0XHRcdHRoaXMuc2VwYXJhYmxlQmx1ck1hdGVyaWFsc1tpXS51bmlmb3Jtcy50RGlmZnVzZS52YWx1ZSA9IGlucHV0UmVuZGVyVGFyZ2V0LmdldENvbG9yVGV4dHVyZSgpO1xyXG5cdFx0XHR0aGlzLnNlcGFyYWJsZUJsdXJNYXRlcmlhbHNbaV0udW5pZm9ybXMuZGlyZWN0aW9uLnZhbHVlID0gQmxvb21Qb3N0RWZmZWN0LkJsdXJEaXJlY3Rpb25YO1xyXG5cdFx0XHR0aGlzLmN1cnJlbnRSZW5kZXJUYXJnZXQgPSB0aGlzLnJlbmRlclRhcmdldHNIb3Jpem9udGFsW2ldO1xyXG5cclxuXHRcdFx0dGhpcy5yZW5kZXJNZXNoKGNvbnRleHQpO1xyXG5cdFx0XHR0aGlzLmZ1bGxTY3JlZW5RdWFkLm1hdGVyaWFsID0gdGhpcy5zZXBhcmFibGVCbHVyWU1hdGVyaWFsc1tpXTtcclxuXHRcdFx0dGhpcy5zZXBhcmFibGVCbHVyWU1hdGVyaWFsc1tpXS51bmlmb3Jtcy50RGlmZnVzZS52YWx1ZSA9IHRoaXMucmVuZGVyVGFyZ2V0c0hvcml6b250YWxbaV0uZ2V0Q29sb3JUZXh0dXJlKCk7XHJcblx0XHRcdHRoaXMuc2VwYXJhYmxlQmx1cllNYXRlcmlhbHNbaV0udW5pZm9ybXMuZGlyZWN0aW9uLnZhbHVlID0gQmxvb21Qb3N0RWZmZWN0LkJsdXJEaXJlY3Rpb25ZO1xyXG5cdFx0XHR0aGlzLmN1cnJlbnRSZW5kZXJUYXJnZXQgPSB0aGlzLnJlbmRlclRhcmdldHNWZXJ0aWNhbFtpXTtcclxuXHJcblx0XHRcdHRoaXMucmVuZGVyTWVzaChjb250ZXh0KTtcclxuXHJcblx0XHRcdGlucHV0UmVuZGVyVGFyZ2V0ID0gdGhpcy5yZW5kZXJUYXJnZXRzVmVydGljYWxbaV07XHJcblx0XHR9XHJcblx0XHQvLyBDb21wb3NpdGUgQWxsIHRoZSBtaXBzXHJcblx0XHR0aGlzLmZ1bGxTY3JlZW5RdWFkLm1hdGVyaWFsID0gdGhpcy5jb21wb3NpdGVNYXRlcmlhbDtcclxuXHRcdHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9IHRoaXMucmVuZGVyVGFyZ2V0c0hvcml6b250YWxbMF07XHJcblx0XHR0aGlzLnJlbmRlck1lc2goY29udGV4dCk7XHJcblx0XHQvLyBibGVuZFxyXG5cdFx0dGhpcy5ibGVuZFVuaWZvcm1zLmJhc2VDb2xvclRleHR1cmUudmFsdWUgPSBjb2xvclRleHR1cmU7XHJcblx0XHR0aGlzLmZ1bGxTY3JlZW5RdWFkLm1hdGVyaWFsID0gdGhpcy5ibGVuZE1hdGVyaWFsO1xyXG5cdFx0dGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID0gdGhpcy5ibGVuZFRhcmdldDtcclxuXHRcdHRoaXMucmVuZGVyTWVzaChjb250ZXh0KTtcclxuXHRcdHJldHVybiB0aGlzLmN1cnJlbnRSZW5kZXJUYXJnZXQuZ2V0Q29sb3JUZXh0dXJlKCk7XHJcblx0fVxyXG5cdHByaXZhdGUgaW5pdCgpIHtcclxuXHRcdHRoaXMucmVuZGVyVGFyZ2V0c0hvcml6b250YWwgPSBbXTtcclxuXHRcdHRoaXMucmVuZGVyVGFyZ2V0c1ZlcnRpY2FsID0gW107XHJcblx0XHR0aGlzLm5NaXBzID0gNTtcclxuXHRcdGxldCByZXN4ID0gTWF0aC5yb3VuZCh0aGlzLndpZHRoIC8gMik7XHJcblx0XHRsZXQgcmVzeSA9IE1hdGgucm91bmQodGhpcy5oZWlnaHQgLyAyKTtcclxuXHJcblx0XHR0aGlzLnJlbmRlclRhcmdldEJyaWdodCA9IG5ldyBSZW5kZXJUYXJnZXQoXCJyZW5kZXJcIiwgW3RoaXMuY3JlYXRlQ29sb3JBdHRhY2htZW50KHJlc3gsIHJlc3kpXSk7XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5NaXBzOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgcmVuZGVyVGFyZ2V0SG9yaXpvbmFsID0gbmV3IFJlbmRlclRhcmdldChcInJlbmRlclwiLCBbdGhpcy5jcmVhdGVDb2xvckF0dGFjaG1lbnQocmVzeCwgcmVzeSldKTtcclxuXHRcdFx0dGhpcy5yZW5kZXJUYXJnZXRzSG9yaXpvbnRhbC5wdXNoKHJlbmRlclRhcmdldEhvcml6b25hbCk7XHJcblx0XHRcdGNvbnN0IHJlbmRlclRhcmdldFZlcnRpY2FsID0gbmV3IFJlbmRlclRhcmdldChcInJlbmRlclwiLCBbdGhpcy5jcmVhdGVDb2xvckF0dGFjaG1lbnQocmVzeCwgcmVzeSldKTtcclxuXHRcdFx0dGhpcy5yZW5kZXJUYXJnZXRzVmVydGljYWwucHVzaChyZW5kZXJUYXJnZXRWZXJ0aWNhbCk7XHJcblx0XHRcdHJlc3ggPSBNYXRoLnJvdW5kKHJlc3ggLyAyKTtcclxuXHRcdFx0cmVzeSA9IE1hdGgucm91bmQocmVzeSAvIDIpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gbHVtaW5vc2l0eSBoaWdoIHBhc3MgbWF0ZXJpYWxcclxuXHRcdHRoaXMuaGlnaFBhc3NVbmlmb3JtcyA9IHtcclxuXHRcdFx0dERpZmZ1c2U6IHsgdHlwZTogXCJ0ZXh0dXJlXCIsIHZhbHVlOiBudWxsIH0sXHJcblx0XHRcdHRTYW1wbGVyOiB7XHJcblx0XHRcdFx0dHlwZTogXCJzYW1wbGVyXCIsXHJcblx0XHRcdFx0dmFsdWU6IHRoaXMuZGVmYXVsdFNhbXBsZXJcclxuXHRcdFx0fSxcclxuXHRcdFx0bHVtaW5vc2l0eVRocmVzaG9sOiB7IHR5cGU6IFwiZmxvYXRcIiwgdmFsdWU6IHRoaXMudGhyZXNob2xkIH0sXHJcblx0XHRcdHNtb290aFdpZHRoOiB7IHR5cGU6IFwiZmxvYXRcIiwgdmFsdWU6IDAuMDEgfSxcclxuXHRcdFx0ZGVmYXVsdENvbG9yOiB7IHR5cGU6IFwiY29sb3JcIiwgdmFsdWU6IG5ldyBDb2xvcigwLjAsIDAsIDApIH0sXHJcblx0XHRcdGRlZmF1bHRPcGFjaXR5OiB7IHR5cGU6IFwiZmxvYXRcIiwgdmFsdWU6IDEuMCB9XHJcblx0XHR9O1xyXG5cdFx0Y29uc3Qgc2hhZGVyID0gZ2V0VmVydEZyYWcoXCJsdW1pbm9zaXR5SGlnaFwiLCB7IHBvc2l0aW9uTG9jYXRpb246IDAgfSk7XHJcblx0XHR0aGlzLm1hdGVyaWFsSGlnaFBhc3NGaWx0ZXIgPSBuZXcgU2hhZGVyTWF0ZXJpYWwoe1xyXG5cdFx0XHR0eXBlOiBcImJsb29tXCIsXHJcblx0XHRcdHVuaWZvcm1zOiB0aGlzLmhpZ2hQYXNzVW5pZm9ybXMsXHJcblx0XHRcdHZlcnQ6IHNoYWRlci52ZXJ0LFxyXG5cdFx0XHRmcmFnOiBzaGFkZXIuZnJhZ1xyXG5cdFx0fSk7XHJcblx0XHQvLyBHYXVzc2lhbiBCbHVyIE1hdGVyaWFsc1xyXG5cdFx0dGhpcy5tYXRlcmlhbEhpZ2hQYXNzRmlsdGVyLnJlbmRlclN0YXRlID0gdGhpcy5yZW5kZXJTdGF0ZTtcclxuXHRcdHRoaXMuc2VwYXJhYmxlQmx1ck1hdGVyaWFscyA9IFtdO1xyXG5cdFx0dGhpcy5zZXBhcmFibGVCbHVyWU1hdGVyaWFscyA9IFtdO1xyXG5cdFx0Y29uc3Qga2VybmVsU2l6ZUFycmF5ID0gWzMsIDUsIDcsIDksIDExXTtcclxuXHRcdHJlc3ggPSBNYXRoLnJvdW5kKHRoaXMud2lkdGggLyAyKTtcclxuXHRcdHJlc3kgPSBNYXRoLnJvdW5kKHRoaXMuaGVpZ2h0IC8gMik7XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5NaXBzOyBpKyspIHtcclxuXHRcdFx0dGhpcy5zZXBhcmFibGVCbHVyTWF0ZXJpYWxzLnB1c2godGhpcy5nZXRTZXBlcmFibGVCbHVyTWF0ZXJpYWwoa2VybmVsU2l6ZUFycmF5W2ldLCBcIkJsdXJNYXRlcmlhbFwiICsgaSkpO1xyXG5cdFx0XHR0aGlzLnNlcGFyYWJsZUJsdXJZTWF0ZXJpYWxzLnB1c2godGhpcy5nZXRTZXBlcmFibGVCbHVyTWF0ZXJpYWwoa2VybmVsU2l6ZUFycmF5W2ldLCBcIkJsdXJNYXRlcmlhbFlcIiArIGkpKTtcclxuXHRcdFx0cmVzeCA9IE1hdGgucm91bmQocmVzeCAvIDIpO1xyXG5cclxuXHRcdFx0cmVzeSA9IE1hdGgucm91bmQocmVzeSAvIDIpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gQ29tcG9zaXRlIG1hdGVyaWFsXHJcblx0XHR0aGlzLmNvbXBvc2l0ZU1hdGVyaWFsID0gdGhpcy5nZXRDb21wb3NpdGVNYXRlcmlhbCh0aGlzLm5NaXBzLCBcImNvbXBvc2l0ZU1hdGVyaWFsXCIpO1xyXG5cdFx0dGhpcy5jb21wb3NpdGVNYXRlcmlhbC5yZW5kZXJTdGF0ZSA9IHRoaXMucmVuZGVyU3RhdGU7XHJcblx0XHR0aGlzLmJsZW5kVW5pZm9ybXMgPSB7XHJcblx0XHRcdHREaWZmdXNlOiB7IHR5cGU6IFwidGV4dHVyZVwiLCB2YWx1ZTogdGhpcy5yZW5kZXJUYXJnZXRzSG9yaXpvbnRhbFswXS5nZXRDb2xvclRleHR1cmUoKSB9LFxyXG5cdFx0XHRiYXNlQ29sb3JUZXh0dXJlOiB7IHR5cGU6IFwidGV4dHVyZVwiLCB2YWx1ZTogbnVsbCB9LFxyXG5cdFx0XHR0U2FtcGxlcjoge1xyXG5cdFx0XHRcdHR5cGU6IFwic2FtcGxlclwiLFxyXG5cdFx0XHRcdHZhbHVlOiB0aGlzLmRlZmF1bHRTYW1wbGVyXHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0XHRjb25zdCBibGVuZFNoYWRlciA9IGdldFZlcnRGcmFnKFwiYmxlbmRcIiwgeyBwb3NpdGlvbkxvY2F0aW9uOiAwIH0pO1xyXG5cdFx0dGhpcy5ibGVuZE1hdGVyaWFsID0gbmV3IFNoYWRlck1hdGVyaWFsKHtcclxuXHRcdFx0dHlwZTogXCJwb3N0QmxlbmRcIixcclxuXHRcdFx0dW5pZm9ybXM6IHRoaXMuYmxlbmRVbmlmb3JtcyxcclxuXHRcdFx0dmVydDogYmxlbmRTaGFkZXIudmVydCxcclxuXHRcdFx0ZnJhZzogYmxlbmRTaGFkZXIuZnJhZ1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmJsZW5kTWF0ZXJpYWwucmVuZGVyU3RhdGUgPSB0aGlzLnJlbmRlclN0YXRlO1xyXG5cdFx0dGhpcy5ibGVuZFRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoXCJyZW5kZXJcIiwgW3RoaXMuY3JlYXRlQ29sb3JBdHRhY2htZW50KHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KV0pO1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZUNvbG9yQXR0YWNobWVudCh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IEF0dGFjaG1lbnQge1xyXG5cdFx0Y29uc3QgY29sb3JUZXh0dXJlID0gbmV3IFRleHR1cmUoe1xyXG5cdFx0XHRzaXplOiB7IHdpZHRoLCBoZWlnaHQsIGRlcHRoOiAxIH0sXHJcblx0XHRcdGZvcm1hdDogVGV4dHVyZUZvcm1hdC5CR1JBOFVub3JtLFxyXG5cdFx0XHR1c2FnZTogVGV4dHVyZVVzYWdlLlJlbmRlckF0dGFjaG1lbnQgfCBUZXh0dXJlVXNhZ2UuVGV4dHVyZUJpbmRpbmdcclxuXHRcdH0pO1xyXG5cdFx0Y29uc3QgY29sb3JBdHRhY2htZW50ID0gbmV3IEF0dGFjaG1lbnQoeyByOiAwLjAsIGc6IDAuMCwgYjogMC4wLCBhOiAwLjAgfSwgeyB0ZXh0dXJlOiBjb2xvclRleHR1cmUgfSk7XHJcblx0XHRyZXR1cm4gY29sb3JBdHRhY2htZW50O1xyXG5cdH1cclxuXHRwcml2YXRlIGdldENvbXBvc2l0ZU1hdGVyaWFsKG5NaXBzOiBudW1iZXIsIHR5cGUpOiBTaGFkZXJNYXRlcmlhbCB7XHJcblx0XHRyZXR1cm4gbmV3IFNoYWRlck1hdGVyaWFsKHtcclxuXHRcdFx0dHlwZSxcclxuXHRcdFx0dW5pZm9ybXM6IHtcclxuXHRcdFx0XHRibHVyVGV4dHVyZTE6IHsgdHlwZTogXCJ0ZXh0dXJlXCIsIHZhbHVlOiB0aGlzLnJlbmRlclRhcmdldHNWZXJ0aWNhbFswXS5nZXRDb2xvclRleHR1cmUoKSB9LFxyXG5cdFx0XHRcdGJsdXJUZXh0dXJlMjogeyB0eXBlOiBcInRleHR1cmVcIiwgdmFsdWU6IHRoaXMucmVuZGVyVGFyZ2V0c1ZlcnRpY2FsWzFdLmdldENvbG9yVGV4dHVyZSgpIH0sXHJcblx0XHRcdFx0Ymx1clRleHR1cmUzOiB7IHR5cGU6IFwidGV4dHVyZVwiLCB2YWx1ZTogdGhpcy5yZW5kZXJUYXJnZXRzVmVydGljYWxbMl0uZ2V0Q29sb3JUZXh0dXJlKCkgfSxcclxuXHRcdFx0XHRibHVyVGV4dHVyZTQ6IHsgdHlwZTogXCJ0ZXh0dXJlXCIsIHZhbHVlOiB0aGlzLnJlbmRlclRhcmdldHNWZXJ0aWNhbFszXS5nZXRDb2xvclRleHR1cmUoKSB9LFxyXG5cdFx0XHRcdGJsdXJUZXh0dXJlNTogeyB0eXBlOiBcInRleHR1cmVcIiwgdmFsdWU6IHRoaXMucmVuZGVyVGFyZ2V0c1ZlcnRpY2FsWzRdLmdldENvbG9yVGV4dHVyZSgpIH0sXHJcblx0XHRcdFx0dFNhbXBsZXI6IHtcclxuXHRcdFx0XHRcdHR5cGU6IFwic2FtcGxlclwiLFxyXG5cdFx0XHRcdFx0dmFsdWU6IHRoaXMuZGVmYXVsdFNhbXBsZXJcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGJsb29tU3RyZW5ndGg6IHsgdHlwZTogXCJmbG9hdFwiLCB2YWx1ZTogdGhpcy5zdHJlbmd0aCB9LFxyXG5cdFx0XHRcdGJsb29tUmFkaXVzOiB7IHR5cGU6IFwiZmxvYXRcIiwgdmFsdWU6IHRoaXMucmFkaXVzIH0sXHJcblx0XHRcdFx0Ymxvb21GYWN0b3JzOiB7IHR5cGU6IFwiZmxvYXQtYXJyYXlcIiwgdmFsdWU6IFsxLjAsIDAuOCwgMC42LCAwLjQsIDAuMl0gfSxcclxuXHRcdFx0XHRibG9vbVRpbnRDb2xvcnM6IHtcclxuXHRcdFx0XHRcdHR5cGU6IFwidmVjMy1hcnJheVwiLFxyXG5cdFx0XHRcdFx0dmFsdWU6IFtcclxuXHRcdFx0XHRcdFx0bmV3IFZlY3RvcjMoMSwgMSwgMSksXHJcblx0XHRcdFx0XHRcdG5ldyBWZWN0b3IzKDEsIDEsIDEpLFxyXG5cdFx0XHRcdFx0XHRuZXcgVmVjdG9yMygxLCAxLCAxKSxcclxuXHRcdFx0XHRcdFx0bmV3IFZlY3RvcjMoMSwgMSwgMSksXHJcblx0XHRcdFx0XHRcdG5ldyBWZWN0b3IzKDEsIDEsIDEpXHJcblx0XHRcdFx0XHRdXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0dmVydDogKGRlZmluZXMpID0+IHtcclxuXHRcdFx0XHRgXHJcbiAgICAgICAgICAgICAgc3RydWN0IFZlcnRleElucHV0IHtcclxuICAgICAgICAgICAgICAgICAgICBAbG9jYXRpb24oMCkgcG9zaXRpb246IHZlYzI8ZjMyPiwgICAgICAgXHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgc3RydWN0IFZlcnRleE91dHB1dCB7XHJcbiAgICAgICAgICAgICAgICAgICAgQGJ1aWx0aW4ocG9zaXRpb24pIHBvc2l0aW9uOiB2ZWM0PGYzMj4sXHJcbiAgICAgICAgICAgICAgICAgICAgQGxvY2F0aW9uKDApIHV2OiB2ZWMyPGYzMj4sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICBAdmVydGV4XHJcbiAgICAgICAgICAgICAgIGZuIG1haW4oaW5wdXQ6IFZlcnRleElucHV0KSAtPiBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgICAgICAgICAgICAgdmFyIG91dHB1dDpWZXJ0ZXhPdXRwdXQ7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQudXYgPSBpbnB1dC5wb3NpdGlvbiAqIDAuNSArIDAuNTtcclxuICAgICAgICAgICAgICAgIG91dHB1dC5wb3NpdGlvbiA9IHZlYzQ8ZjMyPihpbnB1dC5wb3NpdGlvbiwgMC4wLCAxLjApOztcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGA7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHRmcmFnOiAoZGVmaW5lcykgPT4ge1xyXG5cdFx0XHRcdGBcclxuICAgICAgICAgICAgICAgIHN0cnVjdCBGcmFnSW5wdXQge1xyXG4gICAgICAgICAgICAgICAgICAgIEBsb2NhdGlvbigwKSB1djogdmVjMjxmMzI+LFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHN0cnVjdCBCbG9vbVVuaWZvcm1ze1xyXG4gICAgICAgICAgICAgICAgICAgIGJsb29tU3RyZW5ndGg6ZjMyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJsb29tUmFkaXVzOmYzMixcclxuICAgICAgICAgICAgICAgICAgICBibG9vbUZhY3RvcnMgOiBhcnJheTxmMzIsNT4sXHJcbiAgICAgICAgICAgICAgICAgICAgYmxvb21UaW50Q29sb3JzIDogYXJyYXk8dmVjMzxmMzI+LDU+XHJcbiAgICAgICAgICAgICAgICB9ICBcclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygwKSAgdmFyPHN0b3JhZ2UsIHJlYWQ+IGJsb29tVW5pZm9ybXMgOiBCbG9vbVVuaWZvcm1zO1xyXG5cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYmx1clRleHR1cmUxQmluZGluZ30pIHZhciBibHVyVGV4dHVyZTE6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYmx1clRleHR1cmUyQmluZGluZ30pIHZhciBibHVyVGV4dHVyZTI6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYmx1clRleHR1cmUzQmluZGluZ30pIHZhciBibHVyVGV4dHVyZTM6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYmx1clRleHR1cmU0QmluZGluZ30pIHZhciBibHVyVGV4dHVyZTQ6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYmx1clRleHR1cmU1QmluZGluZ30pIHZhciBibHVyVGV4dHVyZTU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMudFNhbXBsZXJCaW5kaW5nfX0pIHZhciB0U2FtcGxlcjogc2FtcGxlcjtcclxuXHJcblx0XHRcdFx0Zm4gbGVycEJsb29tRmFjdG9yKGZhY3RvcjpmMzIpLT5mMzIge1xyXG5cdFx0XHRcdFx0bGV0IG1pcnJvckZhY3RvcjpmMzIgPSAxLjIgLSBmYWN0b3I7XHJcblx0XHRcdFx0XHRyZXR1cm4gbWl4KGZhY3RvciwgbWlycm9yRmFjdG9yLCBibG9vbVVuaWZvcm1zLmJsb29tUmFkaXVzKTtcclxuXHRcdFx0XHR9XHJcbiAgICAgICAgICAgICAgICBAZnJhZ21lbnRcclxuXHRcdFx0XHRmbiBtYWluKGlucHV0OkZyYWdJbnB1dCktPiBAbG9jYXRpb24oMCkgdmVjNDxmMzI+ICB7XHJcblx0XHRcdFx0XHRyZXR1cm4gYmxvb21Vbmlmb3Jtcy5ibG9vbVN0cmVuZ3RoICogKCBsZXJwQmxvb21GYWN0b3IoYmxvb21Vbmlmb3Jtcy5ibG9vbUZhY3RvcnNbMF0pICogdmVjNChibG9vbVVuaWZvcm1zLmJsb29tVGludENvbG9yc1swXSwgMS4wKSAqIHRleHR1cmVTYW1wbGUoYmx1clRleHR1cmUxLCB0U2FtcGxlciwgaW5wdXQudXYpICtcclxuXHRcdFx0XHRcdFx0bGVycEJsb29tRmFjdG9yKGJsb29tVW5pZm9ybXMuYmxvb21GYWN0b3JzWzFdKSAqIHZlYzQ8ZjMyPihibG9vbVVuaWZvcm1zLmJsb29tVGludENvbG9yc1sxXSwgMS4wKSAqIHRleHR1cmVTYW1wbGUoYmx1clRleHR1cmUyLCB0U2FtcGxlciwgaW5wdXQudXYpICtcclxuXHRcdFx0XHRcdFx0bGVycEJsb29tRmFjdG9yKGJsb29tVW5pZm9ybXMuYmxvb21GYWN0b3JzWzJdKSAqIHZlYzQ8ZjMyPihibG9vbVVuaWZvcm1zLmJsb29tVGludENvbG9yc1syXSwgMS4wKSAqIHRleHR1cmVTYW1wbGUoYmx1clRleHR1cmUzLCB0U2FtcGxlciwgaW5wdXQudXYpICtcclxuXHRcdFx0XHRcdFx0bGVycEJsb29tRmFjdG9yKGJsb29tVW5pZm9ybXMuYmxvb21GYWN0b3JzWzNdKSAqIHZlYzQ8ZjMyPihibG9vbVVuaWZvcm1zLmJsb29tVGludENvbG9yc1szXSwgMS4wKSAqIHRleHR1cmVTYW1wbGUoYmx1clRleHR1cmU0LCB0U2FtcGxlciwgaW5wdXQudXYpICtcclxuXHRcdFx0XHRcdFx0bGVycEJsb29tRmFjdG9yKGJsb29tVW5pZm9ybXMuYmxvb21GYWN0b3JzWzRdKSAqIHZlYzQ8ZjMyPihibG9vbVVuaWZvcm1zLmJsb29tVGludENvbG9yc1s0XSwgMS4wKSAqIHRleHR1cmVTYW1wbGUoYmx1clRleHR1cmU1LCB0U2FtcGxlciwgaW5wdXQudXYpICk7XHJcblx0XHRcdFx0fWA7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHRwcml2YXRlIGdldFNlcGVyYWJsZUJsdXJNYXRlcmlhbChrZXJuZWxSYWRpdXMsIHR5cGUpIHtcclxuXHRcdGNvbnN0IHNoYWRlciA9IGdldFZlcnRGcmFnKFwiYmx1clwiLCB7XHJcblx0XHRcdEtFUk5FTF9SQURJVVM6IGtlcm5lbFJhZGl1cyxcclxuXHRcdFx0U0lHTUE6IGtlcm5lbFJhZGl1cyxcclxuXHRcdFx0cG9zaXRpb25Mb2NhdGlvbjogMFxyXG5cdFx0fSk7XHJcblx0XHRjb25zdCBtYXQgPSBuZXcgU2hhZGVyTWF0ZXJpYWwoe1xyXG5cdFx0XHR0eXBlLFxyXG5cdFx0XHR1bmlmb3Jtczoge1xyXG5cdFx0XHRcdHREaWZmdXNlOiB7IHR5cGU6IFwidGV4dHVyZVwiLCB2YWx1ZTogbnVsbCB9LFxyXG5cdFx0XHRcdGRpcmVjdGlvbjogeyB0eXBlOiBcInZlYzJcIiwgdmFsdWU6IG5ldyBWZWN0b3IyKDAuMCwgMC4wKSB9LFxyXG5cdFx0XHRcdHRTYW1wbGVyOiB7XHJcblx0XHRcdFx0XHR0eXBlOiBcInNhbXBsZXJcIixcclxuXHRcdFx0XHRcdHZhbHVlOiB0aGlzLmRlZmF1bHRTYW1wbGVyXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0dmVydDogc2hhZGVyLnZlcnQsXHJcblxyXG5cdFx0XHRmcmFnOiBzaGFkZXIuZnJhZ1xyXG5cdFx0fSk7XHJcblx0XHRtYXQucmVuZGVyU3RhdGUgPSB0aGlzLnJlbmRlclN0YXRlO1xyXG5cdFx0cmV0dXJuIG1hdDtcclxuXHR9XHJcbn1cclxuXHJcbnR5cGUgQmxvb21Qb3N0RWZmZWN0UHJvcHMgPSB7XHJcblx0d2lkdGg6IG51bWJlcjtcclxuXHRoZWlnaHQ6IG51bWJlcjtcclxuXHRzdHJlbmd0aDogbnVtYmVyO1xyXG5cdHJhZGl1czogbnVtYmVyO1xyXG5cdHRocmVzaG9sZDogbnVtYmVyO1xyXG59O1xyXG4iLCJpbXBvcnQgTWF0cml4NCBmcm9tIFwiLi4vbWF0aC9NYXRyaXg0XCI7XHJcbmltcG9ydCBDYW1lcmEgZnJvbSBcIi4vQ2FtZXJhXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9ydGhvZ3JhcGhpY0NhbWVyYSBleHRlbmRzIENhbWVyYSB7XHJcblx0cmlnaHQ6IG51bWJlcjtcclxuXHRpc09ydGhvZ3JhcGhpY0NhbWVyYTogYm9vbGVhbjtcclxuXHRib3R0b206IG51bWJlcjtcclxuXHRsZWZ0OiBudW1iZXI7XHJcblx0bmVhcjogbnVtYmVyO1xyXG5cdGZhcjogbnVtYmVyO1xyXG5cdHRvcDogbnVtYmVyO1xyXG5cdGNvbnN0cnVjdG9yKGxlZnQgPSAtMSwgcmlnaHQgPSAxLCB0b3AgPSAxLCBib3R0b20gPSAtMSwgbmVhciA9IDAuMSwgZmFyID0gMjAwMCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHRcdHRoaXMubmVhciA9IG5lYXI7XHJcblx0XHR0aGlzLmZhciA9IGZhcjtcclxuXHRcdHRoaXMubGVmdCA9IGxlZnQ7XHJcblx0XHR0aGlzLnRvcCA9IHRvcDtcclxuXHRcdHRoaXMuYm90dG9tID0gYm90dG9tO1xyXG5cdFx0dGhpcy5yaWdodCA9IHJpZ2h0O1xyXG5cdFx0dGhpcy5pc09ydGhvZ3JhcGhpY0NhbWVyYSA9IHRydWU7XHJcblx0fVxyXG5cdHByaXZhdGUgdXBkYXRlQ2FtZXJhUGFybXMoKSB7XHJcblx0XHRjb25zdCBkeCA9ICh0aGlzLnJpZ2h0IC0gdGhpcy5sZWZ0KSAvIDI7XHJcblx0XHRjb25zdCBkeSA9ICh0aGlzLnRvcCAtIHRoaXMuYm90dG9tKSAvIDI7XHJcblx0XHRjb25zdCBjeCA9ICh0aGlzLnJpZ2h0ICsgdGhpcy5sZWZ0KSAvIDI7XHJcblx0XHRjb25zdCBjeSA9ICh0aGlzLnRvcCArIHRoaXMuYm90dG9tKSAvIDI7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRsZWZ0OiBjeCAtIGR4LFxyXG5cdFx0XHRyaWdodDogY3ggKyBkeCxcclxuXHRcdFx0dG9wOiBjeSArIGR5LFxyXG5cdFx0XHRib3R0b206IGN5IC0gZHlcclxuXHRcdH07XHJcblx0fVxyXG5cdHB1YmxpYyB1cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkge1xyXG5cdFx0aWYgKHRoaXMucHJvamVjdE1hdHJpeERpcnR5KSB7XHJcblx0XHRcdGNvbnN0IHsgbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tIH0gPSB0aGlzLnVwZGF0ZUNhbWVyYVBhcm1zKCk7XHJcblx0XHRcdHRoaXMuX3Byb2plY3Rpb25NYXRyaXggPSBNYXRyaXg0Lm1ha2VPcnRob2dyYXBoaWMobGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCB0aGlzLm5lYXIsIHRoaXMuZmFyKTtcclxuXHRcdFx0dGhpcy5wcm9qZWN0TWF0cml4RGlydHkgPSBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gXCIuLi8uLi9jYW1lcmEvUGVyc3BlY3RpdmVDYW1lcmFcIjtcbmltcG9ydCBWZWN0b3IyIGZyb20gXCIuLi8uLi9tYXRoL1ZlY3RvcjJcIjtcbmltcG9ydCB7IFNwb3RMaWdodCB9IGZyb20gXCIuLi9TcG90TGlnaHRcIjtcbmltcG9ydCB7IEJhc2VTaGFkb3cgfSBmcm9tIFwiLi9CYXNlU2hhZG93XCI7XG5cbmV4cG9ydCBjbGFzcyBTcG90TGlnaHRTaGFkb3cgZXh0ZW5kcyBCYXNlU2hhZG93IHtcblx0cHVibGljIHR5cGU6IHN0cmluZztcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Y29uc3QgY2FtZXJhID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKDYwLCAxLCAwLjEsIDUwMCk7XG5cdFx0c3VwZXIobmV3IFZlY3RvcjIoMTAyNCwgMTAyNCksIGNhbWVyYSk7XG5cdFx0dGhpcy50eXBlID0gXCJzcG90TGlnaHRTaGFkb3dcIjtcblx0fVxuXG5cdHB1YmxpYyB1cGRhdGUobGlnaHQ6IFNwb3RMaWdodCkge1xuXHRcdHRoaXMudXBkYXRlTWF0cmljZXMobGlnaHQpO1xuXHR9XG5cblx0dXBkYXRlTWF0cmljZXMobGlnaHQ6IFNwb3RMaWdodCkge1xuXHRcdHRoaXMuY2FtZXJhLnBvc2l0aW9uLmNvcHkobGlnaHQucG9zaXRpb24pO1xuXHRcdGNvbnN0IHsgeCwgeSwgeiB9ID0gbGlnaHQudGFyZ2V0O1xuXHRcdHRoaXMuY2FtZXJhLmxvb2tBdCh4LCB5LCB6KTtcblx0XHR0aGlzLmNhbWVyYS51cGRhdGVNYXRyaXgoKTtcblx0XHR0aGlzLnZwTWF0cml4RGlydHkgPSB0cnVlO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBMaWdodFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XHJcbmltcG9ydCB7IExpZ2h0IH0gZnJvbSBcIi4vTGlnaHRcIjtcclxuaW1wb3J0IHsgU3BvdExpZ2h0U2hhZG93IH0gZnJvbSBcIi4vc2hhZG93cy9TcG90TGlnaHRTaGFkb3dcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTcG90TGlnaHQgZXh0ZW5kcyBMaWdodCB7XHJcblx0cHJpdmF0ZSBfZGlzdGFuY2U6IG51bWJlcjtcclxuXHRwcml2YXRlIF9hbmdsZTogbnVtYmVyO1xyXG5cdHByaXZhdGUgX3BlbnVtYnJhOiBudW1iZXI7XHJcblx0cHJpdmF0ZSBfZGVjYXk6IG51bWJlcjtcclxuXHRkZWNheURpcnR5OiBib29sZWFuO1xyXG5cdGRpc3RhbmNlRGlydHk6IGJvb2xlYW47XHJcblx0cHJpdmF0ZSBfY29uZUNvczogbnVtYmVyO1xyXG5cdHByaXZhdGUgX3BlbnVtYnJhQ29zOiBudW1iZXI7XHJcblx0Y29uZUNvc0RpcnR5OiBib29sZWFuO1xyXG5cdHBlbnVtYnJhRGlydHk6IGJvb2xlYW47XHJcblx0YW5nbGVEaXJ0eTogYm9vbGVhbjtcclxuXHRwZW51bWJyYUNvc0RpcnR5OiBib29sZWFuO1xyXG5cdGNvbnN0cnVjdG9yKGNvbG9yLCBpbnRlbnNpdHksIGRpc3RhbmNlID0gMCwgYW5nbGUgPSA2MCwgcGVudW1icmEgPSA2MCwgZGVjYXkgPSA0LCBvcGVuU2hhZG93ID0gdHJ1ZSkge1xyXG5cdFx0c3VwZXIoY29sb3IsIGludGVuc2l0eSk7XHJcblx0XHR0aGlzLl9kaXN0YW5jZSA9IGRpc3RhbmNlO1xyXG5cdFx0dGhpcy5fYW5nbGUgPSAoYW5nbGUgLyAxODApICogTWF0aC5QSTtcclxuXHRcdHRoaXMuX3BlbnVtYnJhID0gKHBlbnVtYnJhIC8gMTgwKSAqIE1hdGguUEk7XHJcblx0XHR0aGlzLl9kZWNheSA9IGRlY2F5O1xyXG5cdFx0dGhpcy5saWdodFR5cGUgPSBMaWdodFR5cGUuU3BvdExpZ2h0O1xyXG5cdFx0dGhpcy5hbmdsZURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMucGVudW1icmFEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmRpc3RhbmNlRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5kZWNheURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuY29uZUNvc0RpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMucGVudW1icmFDb3NEaXJ0eSA9IHRydWU7XHJcblx0XHRpZiAob3BlblNoYWRvdykgdGhpcy5zaGFkb3cgPSBuZXcgU3BvdExpZ2h0U2hhZG93KCk7XHJcblx0XHR0aGlzLnVwZGF0ZUNvbmVDb3NPclBlbnVtYnJhQ29zKCk7XHJcblx0fVxyXG5cclxuXHRnZXQgZGlydGVjdERpcnR5KCkge1xyXG5cdFx0cmV0dXJuIHRoaXMucG9zaXRpb25EaXJ0eSB8fCB0aGlzLnRhcmdldERpcnR5O1xyXG5cdH1cclxuXHJcblx0c2V0IGRpcnRlY3REaXJ0eSh2YWx1ZSkge1xyXG5cdFx0dGhpcy5wb3NpdGlvbkRpcnR5ID0gdmFsdWU7XHJcblx0XHR0aGlzLnRhcmdldERpcnR5ID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRnZXQgZGlyZWN0aW9uYWwoKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0VmVjdG9yMy5zdWJ0cmFjdCh0aGlzLnBvc2l0aW9uLCB0aGlzLnRhcmdldCwgcmVzdWx0KTtcclxuXHRcdHJldHVybiBWZWN0b3IzLm5vcm1hbGl6ZShyZXN1bHQsIG5ldyBWZWN0b3IzKCkpO1xyXG5cdH1cclxuXHRnZXQgYW5nbGUoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fYW5nbGU7XHJcblx0fVxyXG5cdHNldCBhbmdsZSh2YWx1ZSkge1xyXG5cdFx0dGhpcy5hbmdsZURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX2FuZ2xlID0gKHZhbHVlIC8gMTgwKSAqIE1hdGguUEk7XHJcblx0XHR0aGlzLnVwZGF0ZUNvbmVDb3NPclBlbnVtYnJhQ29zKCk7XHJcblx0fVxyXG5cdGdldCBwZW51bWJyYSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9wZW51bWJyYTtcclxuXHR9XHJcblx0c2V0IHBlbnVtYnJhKHZhbHVlKSB7XHJcblx0XHR0aGlzLnBlbnVtYnJhRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fcGVudW1icmEgPSAodmFsdWUgLyAxODApICogTWF0aC5QSTtcclxuXHRcdHRoaXMudXBkYXRlQ29uZUNvc09yUGVudW1icmFDb3MoKTtcclxuXHR9XHJcblx0c2V0IGRpc3RhbmNlKHZhbHVlKSB7XHJcblx0XHR0aGlzLmRpc3RhbmNlRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fZGlzdGFuY2UgPSB2YWx1ZTtcclxuXHR9XHJcblx0Z2V0IGRpc3RhbmNlKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3RhbmNlO1xyXG5cdH1cclxuXHRzZXQgZGVjYXkodmFsdWUpIHtcclxuXHRcdHRoaXMuZGVjYXlEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9kZWNheSA9IHZhbHVlO1xyXG5cdH1cclxuXHRnZXQgZGVjYXkoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fZGVjYXk7XHJcblx0fVxyXG5cdHNldCBjb25lQ29zKHZhbHVlKSB7XHJcblx0XHR0aGlzLmNvbmVDb3NEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9jb25lQ29zID0gdmFsdWU7XHJcblx0fVxyXG5cdGdldCBjb25lQ29zKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2NvbmVDb3M7XHJcblx0fVxyXG5cdHNldCBwZW51bWJyYUNvcyh2YWx1ZSkge1xyXG5cdFx0dGhpcy5wZW51bWJyYUNvc0RpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX3BlbnVtYnJhQ29zID0gdmFsdWU7XHJcblx0fVxyXG5cdGdldCBwZW51bWJyYUNvcygpIHtcclxuXHRcdHJldHVybiB0aGlzLl9wZW51bWJyYUNvcztcclxuXHR9XHJcblx0cHJpdmF0ZSB1cGRhdGVDb25lQ29zT3JQZW51bWJyYUNvcygpIHtcclxuXHRcdHRoaXMuX2NvbmVDb3MgPSBNYXRoLmNvcyh0aGlzLmFuZ2xlKTtcclxuXHRcdHRoaXMuX3BlbnVtYnJhQ29zID0gTWF0aC5jb3ModGhpcy5hbmdsZSArIHRoaXMucGVudW1icmEpO1xyXG5cdH1cclxufVxyXG4vLyB1bmlmb3JtXHJcbi8vIGNvbG9yOiB7fSxcclxuLy8gcG9zaXRpb246IHt9LFxyXG4vLyBkaXJlY3Rpb246IHt9LFxyXG4vLyBkaXN0YW5jZToge30sXHJcbi8vIGNvbmVDb3M6IHt9LFxyXG4vLyBwZW51bWJyYUNvczoge30sXHJcbi8vIGRlY2F5OiB7fVxyXG4iLCJpbXBvcnQgT3J0aG9ncmFwaGljQ2FtZXJhIGZyb20gXCIuLi8uLi9jYW1lcmEvT3J0aG9ncmFwaGljQ2FtZXJhXCI7XG5pbXBvcnQgVmVjdG9yMiBmcm9tIFwiLi4vLi4vbWF0aC9WZWN0b3IyXCI7XG5pbXBvcnQgeyBEaXJlY3Rpb25hbExpZ2h0IH0gZnJvbSBcIi4uL0RpcmVjdGlvbmFsTGlnaHRcIjtcbmltcG9ydCB7IEJhc2VTaGFkb3cgfSBmcm9tIFwiLi9CYXNlU2hhZG93XCI7XG5cbmV4cG9ydCBjbGFzcyBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGV4dGVuZHMgQmFzZVNoYWRvdyB7XG5cdHB1YmxpYyB0eXBlOiBzdHJpbmc7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGNvbnN0IGNhbWVyYSA9IG5ldyBPcnRob2dyYXBoaWNDYW1lcmEoLTUwLCA1MCwgNTAsIC01MCwgMCwgMTAwKTtcblx0XHRzdXBlcihuZXcgVmVjdG9yMigxMDI0LCAxMDI0KSwgY2FtZXJhKTtcblx0XHR0aGlzLnR5cGUgPSBcImRpcmVjdGlvbmFsTGlnaHRTaGFkb3dcIjtcblx0fVxuXG5cdHB1YmxpYyB1cGRhdGUobGlnaHQ6IERpcmVjdGlvbmFsTGlnaHQpIHtcblx0XHR0aGlzLnVwZGF0ZU1hdHJpY2VzKGxpZ2h0KTtcblx0fVxuXG5cdHVwZGF0ZU1hdHJpY2VzKGxpZ2h0OiBEaXJlY3Rpb25hbExpZ2h0KSB7XG5cdFx0dGhpcy5jYW1lcmEucG9zaXRpb24uY29weShsaWdodC5wb3NpdGlvbik7XG5cdFx0Y29uc3QgeyB4LCB5LCB6IH0gPSBsaWdodC50YXJnZXQ7XG5cdFx0dGhpcy5jYW1lcmEubG9va0F0KHgsIHksIHopO1xuXHRcdHRoaXMuY2FtZXJhLnVwZGF0ZU1hdHJpeCgpO1xuXHRcdHRoaXMudnBNYXRyaXhEaXJ0eSA9IHRydWU7XG5cdH1cbn1cbiIsImltcG9ydCB7IExpZ2h0VHlwZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XG5pbXBvcnQgeyBMaWdodCB9IGZyb20gXCIuL0xpZ2h0XCI7XG5pbXBvcnQgeyBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IH0gZnJvbSBcIi4vc2hhZG93cy9EaXJlY3Rpb25hbExpZ2h0U2hhZG93XCI7XG5cbmV4cG9ydCBjbGFzcyBEaXJlY3Rpb25hbExpZ2h0IGV4dGVuZHMgTGlnaHQge1xuXHRjb25zdHJ1Y3Rvcihjb2xvcjogVmVjdG9yMywgaW50ZW5zaXR5OiBudW1iZXIsIG9wZW5TaGFkb3cgPSB0cnVlKSB7XG5cdFx0c3VwZXIoY29sb3IsIGludGVuc2l0eSk7XG5cdFx0dGhpcy5saWdodFR5cGUgPSBMaWdodFR5cGUuRGlyZWN0aW9uYWxMaWdodDtcblx0XHRpZiAob3BlblNoYWRvdykgdGhpcy5zaGFkb3cgPSBuZXcgRGlyZWN0aW9uYWxMaWdodFNoYWRvdygpO1xuXHR9XG5cblx0Z2V0IGRpcnRlY3REaXJ0eSgpIHtcblx0XHRyZXR1cm4gdGhpcy5wb3NpdGlvbkRpcnR5IHx8IHRoaXMudGFyZ2V0RGlydHk7XG5cdH1cblxuXHRzZXQgZGlydGVjdERpcnR5KHZhbHVlKSB7XG5cdFx0dGhpcy5wb3NpdGlvbkRpcnR5ID0gdmFsdWU7XG5cdFx0dGhpcy50YXJnZXREaXJ0eSA9IHZhbHVlO1xuXHR9XG5cblx0Z2V0IGRpcmVjdGlvbmFsKCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0VmVjdG9yMy5zdWJ0cmFjdCh0aGlzLnRhcmdldCwgdGhpcy5wb3NpdGlvbiwgcmVzdWx0KTtcblx0XHRyZXR1cm4gcmVzdWx0Lm5vcm1hbGl6ZSgpO1xuXHR9XG59XG4vLyB1bmlmb3JtXG4vLyBkaXJlY3Rpb246IHt9LFxuLy8gY29sb3I6IHt9XG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XHJcbmltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XHJcbmltcG9ydCBSZW5kZXJPYmplY3QgZnJvbSBcIi4uL2NvcmUvUmVuZGVyT2JqZWN0XCI7XHJcbmltcG9ydCB7IFJlbmRlck9iamVjdFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgY3JlYXRlR3VpZCBmcm9tIFwiLi4vdXRpbHMvY3JlYXRlR3VpZFwiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4vTWVzaFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9kZSBleHRlbmRzIFJlbmRlck9iamVjdCB7XHJcblx0dWlkOiBzdHJpbmc7XHJcblx0Y2hpbGRyZW46IE1hcDxzdHJpbmcsIE5vZGUgfCBNZXNoPjtcclxuXHRuYW1lOiBzdHJpbmc7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0dGhpcy50eXBlID0gUmVuZGVyT2JqZWN0VHlwZS5Ob2RlO1xyXG5cdFx0dGhpcy5jaGlsZHJlbiA9IG5ldyBNYXAoKTtcclxuXHRcdHRoaXMucGFyZW50ID0gbnVsbDtcclxuXHRcdHRoaXMudWlkID0gY3JlYXRlR3VpZCgpO1xyXG5cdH1cclxuXHRhZGQobm9kZTogTm9kZSB8IE1lc2gpIHtcclxuXHRcdG5vZGUucGFyZW50ID0gdGhpcztcclxuXHRcdHRoaXMuY2hpbGRyZW4uc2V0KG5vZGUudWlkLCBub2RlKTtcclxuXHR9XHJcblx0cmVtb3ZlKG5vZGU6IE5vZGUgfCBNZXNoKSB7XHJcblx0XHR0aGlzLmNoaWxkcmVuLmRlbGV0ZShub2RlLnVpZCk7XHJcblx0fVxyXG5cdHVwZGF0ZShmcmFtZVN0YXRlOiBGcmFtZVN0YXRlLCBjYW1lcmE/OiBDYW1lcmEpIHtcclxuXHRcdHRoaXMudXBkYXRlTWF0cml4KHRoaXM/LnBhcmVudD8ubW9kZWxNYXRyaXg/LmNsb25lKCkpO1xyXG5cdFx0dGhpcz8uY2hpbGRyZW4/LmZvckVhY2g/Ligobm9kZSkgPT4ge1xyXG5cdFx0XHRub2RlLnVwZGF0ZShmcmFtZVN0YXRlLCBjYW1lcmEpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdGRlc3Ryb3koKSB7XHJcblx0XHR0aGlzLmNoaWxkcmVuLmZvckVhY2goKG5vZGUpID0+IHtcclxuXHRcdFx0bm9kZS5kZXN0cm95KCk7XHJcblx0XHR9KTtcclxuXHRcdHRoaXM/LmNoaWxkcmVuPy5jbGVhcigpO1xyXG5cdH1cclxuXHR0cmF2ZXJzZSh0cmF2ZXJzZUZ1bmN0aW9uOiBGdW5jdGlvbiwgcGFyYW06IHsgW3Byb3A6IHN0cmluZ106IGFueSB9KTogdm9pZCB7XHJcblx0XHRmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5jaGlsZHJlbi5zaXplOyBpIDwgbGVuOyBpKyspIHtcclxuXHRcdFx0dGhpcy5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xyXG5cdFx0XHRcdGNoaWxkLnRyYXZlcnNlKHRyYXZlcnNlRnVuY3Rpb24sIHBhcmFtKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDYW1lcmEgZnJvbSBcIi4uL2NhbWVyYS9DYW1lcmFcIjtcbmltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XG5pbXBvcnQgeyBCdWZmZXJCaW5kaW5nVHlwZSwgQnVmZmVyVXNhZ2UgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xuaW1wb3J0IHsgUmVuZGVyT2JqZWN0VHlwZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5pbXBvcnQgR2VvbWV0cnkgZnJvbSBcIi4uL2dlb21ldHJ5L0dlb21ldHJ5XCI7XG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCIuLi9tYXRlcmlhbC9NYXRlcmlhbFwiO1xuaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4uL21hdGgvTWF0cml4NFwiO1xuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XG5pbXBvcnQgeyBVbmlmb3JtRW51bSB9IGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybXNcIjtcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi9NZXNoXCI7XG5pbXBvcnQgTm9kZSBmcm9tIFwiLi9Ob2RlXCI7XG5cbmV4cG9ydCBjbGFzcyBTS2luTWVzaCBleHRlbmRzIE1lc2gge1xuXHRpbnZlcnNlQmluZE1hdHJpY2VzOiBBcnJheTxNYXRyaXg0Pjtcblx0dW5pZm9ybU1hdHJpeHM6IEFycmF5PE1hdHJpeDQ+O1xuXHRqb2ludHM6IEFycmF5PE5vZGU+O1xuXHRwcml2YXRlIGhhc0FkZEpvaW50czogYm9vbGVhbjtcblx0Y29uc3RydWN0b3IoZ2VvbWV0cnk/OiBHZW9tZXRyeSwgbWF0ZXJpYWw/OiBNYXRlcmlhbCkge1xuXHRcdHN1cGVyKGdlb21ldHJ5LCBtYXRlcmlhbCk7XG5cdFx0dGhpcy50eXBlID0gUmVuZGVyT2JqZWN0VHlwZS5Ta2luTWVzaDtcblx0XHR0aGlzLnVuaWZvcm1NYXRyaXhzID0gW107XG5cdFx0dGhpcy5oYXNBZGRKb2ludHMgPSBmYWxzZTtcblx0fVxuXHRzZXRTa2luRGF0YShkYXRhOiBTa2luRGF0YVR5cGUpIHtcblx0XHR0aGlzLmludmVyc2VCaW5kTWF0cmljZXMgPSBkYXRhLmludmVyc2VCaW5kTWF0cmljZXM7XG5cdFx0dGhpcy5qb2ludHMgPSBkYXRhLmpvaW50cztcblx0fVxuXHR1cGRhdGUoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSwgY2FtZXJhPzogQ2FtZXJhKSB7XG5cdFx0dGhpcy51bmlmb3JtTWF0cml4cyA9IHRoaXMuam9pbnRzLm1hcCgoam9pbnQpID0+IChqb2ludCBhcyBOb2RlKS5tb2RlbE1hdHJpeCk7XG5cdFx0c3VwZXIudXBkYXRlKGZyYW1lU3RhdGUsIGNhbWVyYSk7XG5cdFx0aWYgKCF0aGlzLmhhc0FkZEpvaW50cykgdGhpcy5hZGRVbmlmb3Jtc1RvTWF0ZXJpYWwoKTtcblx0fVxuXHRwcml2YXRlIGFkZFVuaWZvcm1zVG9NYXRlcmlhbCgpIHtcblx0XHRpZiAoIXRoaXMubWF0ZXJpYWwuc2hhZGVyRGF0YSkgcmV0dXJuO1xuXHRcdHRoaXMuaGFzQWRkSm9pbnRzID0gdHJ1ZTtcblx0XHRpZiAodGhpcy5qb2ludHMpIHtcblx0XHRcdGNvbnN0IHNraW5Kb2ludHNCdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7XG5cdFx0XHRcdGxhYmVsOiBcInNraW5Kb2ludHNCdWZmZXJcIixcblx0XHRcdFx0dHlwZTogQnVmZmVyQmluZGluZ1R5cGUuUmVhZE9ubHlTdG9yYWdlLFxuXHRcdFx0XHR1c2FnZTogQnVmZmVyVXNhZ2UuU3RvcmFnZSB8IEJ1ZmZlclVzYWdlLkNvcHlEc3QsXG5cdFx0XHRcdHNpemU6IDMwMDBcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgaW52c0J1ZmZlciA9IG5ldyBVbmlmb3JtQnVmZmVyKHtcblx0XHRcdFx0bGFiZWw6IFwiaW52c0J1ZmZlclwiLFxuXHRcdFx0XHR0eXBlOiBCdWZmZXJCaW5kaW5nVHlwZS5SZWFkT25seVN0b3JhZ2UsXG5cdFx0XHRcdHVzYWdlOiBCdWZmZXJVc2FnZS5TdG9yYWdlIHwgQnVmZmVyVXNhZ2UuQ29weURzdCxcblx0XHRcdFx0c2l6ZTogMzAwMFxuXHRcdFx0fSk7XG5cdFx0XHRza2luSm9pbnRzQnVmZmVyLnNldFVuaWZvcm0oXG5cdFx0XHRcdFwiam9pbnRzXCIsXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy51bmlmb3JtTWF0cml4cztcblx0XHRcdFx0fSxcblx0XHRcdFx0VW5pZm9ybUVudW0uTWF0NEFycmF5LFxuXHRcdFx0XHR0aGlzLnVuaWZvcm1NYXRyaXhzLmxlbmd0aFxuXHRcdFx0KTtcblx0XHRcdGludnNCdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFx0XCJqb2ludHNJbnZcIixcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmludmVyc2VCaW5kTWF0cmljZXM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdFVuaWZvcm1FbnVtLk1hdDRBcnJheSxcblx0XHRcdFx0dGhpcy5pbnZlcnNlQmluZE1hdHJpY2VzLmxlbmd0aFxuXHRcdFx0KTtcblx0XHRcdHRoaXMubWF0ZXJpYWwuc2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwic2tpbkpvaW50c0J1ZmZlclwiLCBza2luSm9pbnRzQnVmZmVyKTtcblx0XHRcdHRoaXMubWF0ZXJpYWwuc2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwiaW52c0J1ZmZlclwiLCBpbnZzQnVmZmVyKTtcblx0XHR9XG5cdH1cbn1cbmV4cG9ydCB0eXBlIFNraW5EYXRhVHlwZSA9IHtcblx0aW52ZXJzZUJpbmRNYXRyaWNlcz86IEFycmF5PE1hdHJpeDQ+O1xuXHRqb2ludHM/OiBBcnJheTxOb2RlPjtcbn07XG4iLCJpbXBvcnQgeyBRdWF0ZXJuaW9uIH0gZnJvbSBcIi4uL21hdGgvUXVhdGVybmlvblwiO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tIFwiLi4vbWF0aC9WZWN0b3IyXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjbGFtcChudW06IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKSB7XHJcblx0cmV0dXJuIE1hdGgubWluKE1hdGgubWF4KG51bSwgbWluKSwgbWF4KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHRvRmxvYXQobnVtOiBudW1iZXIgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZSA9IDEpIHtcclxuXHRjb25zdCBuID0gbnVtICE9PSB1bmRlZmluZWQgPyBudW0gOiBkZWZhdWx0VmFsdWU7XHJcblx0aWYgKE51bWJlci5pc0ludGVnZXIobikpIHtcclxuXHRcdHJldHVybiBgJHtufS4wYDtcclxuXHR9XHJcblx0cmV0dXJuIG47XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFR5cGVkQXJyYXkgPSBJbnQ4QXJyYXkgfCBVaW50OEFycmF5IHwgSW50MTZBcnJheSB8IFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXkgfCBGbG9hdDMyQXJyYXk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbmV3VHlwZWRBcnJheSh0eXBlOiBudW1iZXIsIGJ1ZmZlcjogQXJyYXlCdWZmZXIsIGJ5dGVPZmZzZXQ6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpIHtcclxuXHRzd2l0Y2ggKHR5cGUpIHtcclxuXHRcdGNhc2UgNTEyMDpcclxuXHRcdFx0cmV0dXJuIG5ldyBJbnQ4QXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xyXG5cdFx0Y2FzZSA1MTIxOlxyXG5cdFx0XHRyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xyXG5cdFx0Y2FzZSA1MTIyOlxyXG5cdFx0XHRyZXR1cm4gbmV3IEludDE2QXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xyXG5cdFx0Y2FzZSA1MTIzOlxyXG5cdFx0XHRyZXR1cm4gbmV3IFVpbnQxNkFycmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcclxuXHRcdGNhc2UgNTEyNDpcclxuXHRcdFx0cmV0dXJuIG5ldyBJbnQzMkFycmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcclxuXHRcdGNhc2UgNTEyNTpcclxuXHRcdFx0cmV0dXJuIG5ldyBVaW50MzJBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XHJcblx0XHRjYXNlIDUxMjY6XHJcblx0XHRcdHJldHVybiBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcclxuXHRcdGRlZmF1bHQ6XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgY29tcG9uZW50IHR5cGVcIik7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdG9JbmRpY2VzKGFycmF5OiBUeXBlZEFycmF5KTogVWludDE2QXJyYXkgfCBVaW50MzJBcnJheSB7XHJcblx0aWYgKGFycmF5IGluc3RhbmNlb2YgVWludDE2QXJyYXkgfHwgYXJyYXkgaW5zdGFuY2VvZiBVaW50MzJBcnJheSkge1xyXG5cdFx0cmV0dXJuIGFycmF5O1xyXG5cdH1cclxuXHRsZXQgdG9BcnJheTtcclxuXHRpZiAoYXJyYXkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpIHtcclxuXHRcdHRvQXJyYXkgPSBuZXcgVWludDMyQXJyYXkoYXJyYXkubGVuZ3RoKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0dG9BcnJheSA9IG5ldyBVaW50MTZBcnJheShhcnJheS5sZW5ndGgpO1xyXG5cdH1cclxuXHRhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xyXG5cdFx0dG9BcnJheVtpbmRleF0gPSBlbGVtZW50O1xyXG5cdH0pO1xyXG5cdHJldHVybiB0b0FycmF5O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gam9pbkFycmF5KGFycmF5czogQXJyYXk8RmxvYXQzMkFycmF5Pikge1xyXG5cdGxldCBsZW5ndGggPSAwO1xyXG5cdGFycmF5cy5mb3JFYWNoKChhcnJheSkgPT4ge1xyXG5cdFx0bGVuZ3RoICs9IGFycmF5Lmxlbmd0aDtcclxuXHR9KTtcclxuXHRjb25zdCBqb2luZWQgPSBuZXcgRmxvYXQzMkFycmF5KGxlbmd0aCk7XHJcblx0bGVuZ3RoID0gMDtcclxuXHRhcnJheXMuZm9yRWFjaCgoYXJyYXkpID0+IHtcclxuXHRcdGpvaW5lZC5zZXQoYXJyYXksIGxlbmd0aCk7XHJcblx0XHRsZW5ndGggKz0gYXJyYXkubGVuZ3RoO1xyXG5cdH0pO1xyXG5cdHJldHVybiBqb2luZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHUFVCdWZmZXIoYXJyYXk6IFR5cGVkQXJyYXksIHVzYWdlOiBudW1iZXIsIGRldmljZTogR1BVRGV2aWNlKSB7XHJcblx0Y29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XHJcblx0XHRzaXplOiAoYXJyYXkuYnl0ZUxlbmd0aCArIDMpICYgfjMsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tYml0d2lzZVxyXG5cdFx0dXNhZ2UsXHJcblx0XHRtYXBwZWRBdENyZWF0aW9uOiB0cnVlXHJcblx0fSk7XHJcblx0bGV0IHdyaXRlQXJhcnk7XHJcblx0aWYgKGFycmF5IGluc3RhbmNlb2YgSW50OEFycmF5KSB7XHJcblx0XHR3cml0ZUFyYXJ5ID0gbmV3IEludDhBcnJheShidWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKSk7XHJcblx0fSBlbHNlIGlmIChhcnJheSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcclxuXHRcdHdyaXRlQXJhcnkgPSBuZXcgVWludDhBcnJheShidWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKSk7XHJcblx0fSBlbHNlIGlmIChhcnJheSBpbnN0YW5jZW9mIEludDE2QXJyYXkpIHtcclxuXHRcdHdyaXRlQXJhcnkgPSBuZXcgSW50MTZBcnJheShidWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKSk7XHJcblx0fSBlbHNlIGlmIChhcnJheSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KSB7XHJcblx0XHR3cml0ZUFyYXJ5ID0gbmV3IFVpbnQxNkFycmF5KGJ1ZmZlci5nZXRNYXBwZWRSYW5nZSgpKTtcclxuXHR9IGVsc2UgaWYgKGFycmF5IGluc3RhbmNlb2YgVWludDMyQXJyYXkpIHtcclxuXHRcdHdyaXRlQXJhcnkgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyLmdldE1hcHBlZFJhbmdlKCkpO1xyXG5cdH0gZWxzZSB7XHJcblx0XHR3cml0ZUFyYXJ5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKSk7XHJcblx0fVxyXG5cdHdyaXRlQXJhcnkuc2V0KGFycmF5KTtcclxuXHRidWZmZXIudW5tYXAoKTtcclxuXHRyZXR1cm4gYnVmZmVyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVOb3JtYWxzKGluZGljZXM6IFR5cGVkQXJyYXkgfCBudWxsLCBwb3NpdGlvbnM6IFR5cGVkQXJyYXkpIHtcclxuXHRjb25zdCBub3JtYWxzID0gbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbnMubGVuZ3RoKTtcclxuXHRjb25zdCB2ZXJ0ZXhDb3VudCA9IGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHBvc2l0aW9ucy5sZW5ndGg7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSArPSAzKSB7XHJcblx0XHRjb25zdCB0cmlJbmRpY2VzID0gW107XHJcblx0XHRmb3IgKGxldCBuID0gMDsgbiA8IDM7IG4gKz0gMSkge1xyXG5cdFx0XHRpZiAoaW5kaWNlcykge1xyXG5cdFx0XHRcdHRyaUluZGljZXMucHVzaChpbmRpY2VzW2kgKyBuXSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dHJpSW5kaWNlcy5wdXNoKGkgKyBuKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Y29uc3QgdHJpYW5nbGUgPSB0cmlJbmRpY2VzLm1hcCgodmVydGV4SW5kZXgpID0+IHtcclxuXHRcdFx0Y29uc3QgaW5kZXggPSB2ZXJ0ZXhJbmRleCAqIDM7XHJcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yMyhwb3NpdGlvbnNbaW5kZXhdLCBwb3NpdGlvbnNbaW5kZXggKyAxXSwgcG9zaXRpb25zW2luZGV4ICsgMl0pO1xyXG5cdFx0fSk7XHJcblx0XHRjb25zdCBkdjEgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0VmVjdG9yMy5zdWJ0cmFjdCh0cmlhbmdsZVsxXSwgdHJpYW5nbGVbMF0sIGR2MSk7XHJcblx0XHRjb25zdCBkdjIgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0VmVjdG9yMy5zdWJ0cmFjdCh0cmlhbmdsZVsyXSwgdHJpYW5nbGVbMF0sIGR2Mik7XHJcblx0XHRjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0VmVjdG9yMy5jcm9zcyhkdjEubm9ybWFsaXplKCksIGR2Mi5ub3JtYWxpemUoKSwgbm9ybWFsKTtcclxuXHRcdGZvciAobGV0IG4gPSAwOyBuIDwgMzsgbiArPSAxKSB7XHJcblx0XHRcdGNvbnN0IGluZGV4ID0gKGkgKyBuKSAqIDM7XHJcblx0XHRcdG5vcm1hbHNbaW5kZXggKyAwXSArPSBub3JtYWwueDtcclxuXHRcdFx0bm9ybWFsc1tpbmRleCArIDFdICs9IG5vcm1hbC55O1xyXG5cdFx0XHRub3JtYWxzW2luZGV4ICsgMl0gKz0gbm9ybWFsLno7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBub3JtYWxzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVUYW5nZW50cyhcclxuXHRpbmRpY2VzOiBUeXBlZEFycmF5IHwgbnVsbCxcclxuXHRwb3NpdGlvbnM6IFR5cGVkQXJyYXksXHJcblx0bm9ybWFsczogVHlwZWRBcnJheSxcclxuXHR1dnM6IFR5cGVkQXJyYXlcclxuKSB7XHJcblx0Y29uc3QgdGFuZ2VudHMgPSBuZXcgRmxvYXQzMkFycmF5KChub3JtYWxzLmxlbmd0aCAvIDMpICogNCk7XHJcblx0Y29uc3QgdmVydGV4Q291bnQgPSBpbmRpY2VzID8gaW5kaWNlcy5sZW5ndGggOiBwb3NpdGlvbnMubGVuZ3RoO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4Q291bnQ7IGkgKz0gMykge1xyXG5cdFx0Y29uc3QgdHJpSW5kaWNlcyA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgbiA9IDA7IG4gPCAzOyBuICs9IDEpIHtcclxuXHRcdFx0aWYgKGluZGljZXMpIHtcclxuXHRcdFx0XHR0cmlJbmRpY2VzLnB1c2goaW5kaWNlc1tpICsgbl0pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRyaUluZGljZXMucHVzaChpICsgbik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGNvbnN0IHBvcyA9IHRyaUluZGljZXMubWFwKCh2ZXJ0ZXhJbmRleCkgPT4ge1xyXG5cdFx0XHRjb25zdCBpbmRleCA9IHZlcnRleEluZGV4ICogMztcclxuXHRcdFx0cmV0dXJuIG5ldyBWZWN0b3IzKHBvc2l0aW9uc1tpbmRleF0sIHBvc2l0aW9uc1tpbmRleCArIDFdLCBwb3NpdGlvbnNbaW5kZXggKyAyXSk7XHJcblx0XHR9KTtcclxuXHRcdGNvbnN0IHV2ID0gdHJpSW5kaWNlcy5tYXAoKHZlcnRleEluZGV4KSA9PiB7XHJcblx0XHRcdGNvbnN0IGluZGV4ID0gdmVydGV4SW5kZXggKiAyO1xyXG5cdFx0XHRyZXR1cm4gbmV3IFZlY3RvcjIodXZzPy5baW5kZXhdLCB1dnM/LltpbmRleCArIDFdKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdGNvbnN0IGR2MSA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHRWZWN0b3IzLnN1YnRyYWN0KHBvc1sxXSwgcG9zWzBdLCBkdjEpO1xyXG5cdFx0Y29uc3QgZHYyID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdFZlY3RvcjMuc3VidHJhY3QocG9zWzJdLCBwb3NbMF0sIGR2Mik7XHJcblx0XHRjb25zdCBkdXYxID0gbmV3IFZlY3RvcjIoKTtcclxuXHRcdFZlY3RvcjIuc3VidHJhY3QodXZbMV0sIHV2WzBdLCBkdXYxKTtcclxuXHRcdGNvbnN0IGR1djIgPSBuZXcgVmVjdG9yMigpO1xyXG5cdFx0VmVjdG9yMi5zdWJ0cmFjdCh1dlsyXSwgdXZbMF0sIGR1djIpO1xyXG5cclxuXHRcdGNvbnN0IHRhbmdlbnQgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGR2MSwgZHV2MS55LCBkdjEpO1xyXG5cdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGR2MiwgZHV2Mi55LCBkdjIpO1xyXG5cdFx0VmVjdG9yMy5zdWJ0cmFjdChkdjEsIGR2MiwgdGFuZ2VudCk7XHJcblxyXG5cdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKHRhbmdlbnQsIGR1djIueSAqIGR1djEueCAtIGR1djEueSAqIGR1djIueCwgdGFuZ2VudCk7XHJcblxyXG5cdFx0dGFuZ2VudC5ub3JtYWxpemUoKTtcclxuXHRcdGZvciAobGV0IG4gPSAwOyBuIDwgMzsgbiArPSAxKSB7XHJcblx0XHRcdGNvbnN0IGluZGV4ID0gKGkgKyBuKSAqIDQ7XHJcblxyXG5cdFx0XHR0YW5nZW50c1tpbmRleCArIDBdICs9IHRhbmdlbnQueDtcclxuXHRcdFx0dGFuZ2VudHNbaW5kZXggKyAxXSArPSB0YW5nZW50Lnk7XHJcblx0XHRcdHRhbmdlbnRzW2luZGV4ICsgMl0gKz0gdGFuZ2VudC56O1xyXG5cdFx0XHR0YW5nZW50c1tpbmRleCArIDNdID0gMTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIHRhbmdlbnRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBsZXJwKGE6IG51bWJlciwgYjogbnVtYmVyLCB4OiBudW1iZXIpIHtcclxuXHRpZiAoeCA8IGEpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxuXHRpZiAoeCA+IGIpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH1cclxuXHRyZXR1cm4gKHggLSBhKSAvIChiIC0gYSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbnRlcnBRdWF0KGlucHV0OiBUeXBlZEFycmF5LCBvOiBUeXBlZEFycmF5LCB0aW1lOiBudW1iZXIsIG1ldGhvZDogc3RyaW5nKSB7XHJcblx0bGV0IGluZGV4ID0gMTtcclxuXHR3aGlsZSAoaW5kZXggPCBpbnB1dC5sZW5ndGggLSAxICYmIHRpbWUgPj0gaW5wdXRbaW5kZXhdKSB7XHJcblx0XHRpbmRleCArPSAxO1xyXG5cdH1cclxuXHRjb25zdCB0ID0gbGVycChpbnB1dFtpbmRleCAtIDFdLCBpbnB1dFtpbmRleF0sIHRpbWUpO1xyXG5cclxuXHRpZiAobWV0aG9kID09PSBcIkNVQklDU1BMSU5FXCIpIHtcclxuXHRcdGNvbnN0IHRkID0gaW5wdXRbaW5kZXhdIC0gaW5wdXRbaW5kZXggLSAxXTtcclxuXHRcdGNvbnN0IHQyID0gdCAqIHQ7XHJcblx0XHRjb25zdCB0MyA9IHQyICogdDtcclxuXHRcdGNvbnN0IGkgPSAxMiAqIGluZGV4O1xyXG5cclxuXHRcdGNvbnN0IHYwID0gbmV3IFF1YXRlcm5pb24ob1tpIC0gOF0sIG9baSAtIDddLCBvW2kgLSA2XSwgb1tpIC0gNV0pO1xyXG5cdFx0Y29uc3QgYjAgPSBuZXcgUXVhdGVybmlvbihvW2kgLSA0XSwgb1tpIC0gM10sIG9baSAtIDJdLCBvW2kgLSAxXSk7XHJcblx0XHRjb25zdCB2MSA9IG5ldyBRdWF0ZXJuaW9uKG9baSArIDRdLCBvW2kgKyA1XSwgb1tpICsgNl0sIG9baSArIDddKTtcclxuXHRcdGNvbnN0IGExID0gbmV3IFF1YXRlcm5pb24ob1tpXSwgb1tpICsgMV0sIG9baSArIDJdLCBvW2kgKyAzXSk7XHJcblx0XHRRdWF0ZXJuaW9uLm11bHRpcGx5QnlTY2FsYXIodjAsIDIgKiB0MyAtIDMgKiB0MiArIDEsIHYwKTtcclxuXHRcdFF1YXRlcm5pb24ubXVsdGlwbHlCeVNjYWxhcihiMCwgdGQgKiAodDMgLSAyICogdDIgKyB0KSwgYjApO1xyXG5cdFx0UXVhdGVybmlvbi5tdWx0aXBseUJ5U2NhbGFyKHYxLCAtMiAqIHQzICsgMyAqIHQyLCB2MSk7XHJcblx0XHRRdWF0ZXJuaW9uLm11bHRpcGx5QnlTY2FsYXIoYTEsIHRkICogKHQzIC0gdDIpLCBhMSk7XHJcblxyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IFF1YXRlcm5pb24oKTtcclxuXHRcdFF1YXRlcm5pb24uYWRkKHJlc3VsdCwgdjAsIHJlc3VsdCk7XHJcblx0XHRRdWF0ZXJuaW9uLmFkZChyZXN1bHQsIGIwLCByZXN1bHQpO1xyXG5cdFx0UXVhdGVybmlvbi5hZGQocmVzdWx0LCB2MSwgcmVzdWx0KTtcclxuXHRcdFF1YXRlcm5pb24uYWRkKHJlc3VsdCwgYTEsIHJlc3VsdCk7XHJcblx0XHRRdWF0ZXJuaW9uLm5vcm1hbGl6ZShyZXN1bHQsIHJlc3VsdCk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y29uc3QgcSA9IFtdO1xyXG5cdGZvciAobGV0IG4gPSAtMTsgbiA8IDE7IG4gKz0gMSkge1xyXG5cdFx0Y29uc3QgaSA9IDQgKiAoaW5kZXggKyBuKTtcclxuXHRcdHEucHVzaChuZXcgUXVhdGVybmlvbihvW2ldLCBvW2kgKyAxXSwgb1tpICsgMl0sIG9baSArIDNdKSk7XHJcblx0fVxyXG5cclxuXHRpZiAobWV0aG9kID09PSBcIlNURVBcIikge1xyXG5cdFx0cmV0dXJuIHQgPCAxID8gcVswXSA6IHFbMV07XHJcblx0fVxyXG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBRdWF0ZXJuaW9uKCk7XHJcblx0UXVhdGVybmlvbi5zbGVycChxWzBdLCBxWzFdLCB0LCByZXN1bHQpO1xyXG5cdHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbnRlcnBWZWMzKGlucHV0OiBUeXBlZEFycmF5LCBvdXRwdXQ6IFR5cGVkQXJyYXksIHRpbWU6IG51bWJlciwgbWV0aG9kOiBzdHJpbmcpIHtcclxuXHRsZXQgaW5kZXggPSAxO1xyXG5cdHdoaWxlIChpbmRleCA8IGlucHV0Lmxlbmd0aCAtIDEgJiYgdGltZSA+PSBpbnB1dFtpbmRleF0pIHtcclxuXHRcdGluZGV4ICs9IDE7XHJcblx0fVxyXG5cdGNvbnN0IHQgPSBsZXJwKGlucHV0W2luZGV4IC0gMV0sIGlucHV0W2luZGV4XSwgdGltZSk7XHJcblxyXG5cdGlmIChtZXRob2QgPT09IFwiQ1VCSUNTUExJTkVcIikge1xyXG5cdFx0Y29uc3QgdGQgPSBpbnB1dFtpbmRleF0gLSBpbnB1dFtpbmRleCAtIDFdO1xyXG5cdFx0Y29uc3QgdDIgPSB0ICogdDtcclxuXHRcdGNvbnN0IHQzID0gdDIgKiB0O1xyXG5cdFx0Y29uc3QgaSA9IDkgKiBpbmRleDtcclxuXHRcdGNvbnN0IHYwID0gbmV3IFZlY3RvcjMob3V0cHV0W2kgLSA2XSwgb3V0cHV0W2kgLSA1XSwgb3V0cHV0W2kgLSA0XSk7XHJcblx0XHRjb25zdCBiMCA9IG5ldyBWZWN0b3IzKG91dHB1dFtpIC0gM10sIG91dHB1dFtpIC0gMl0sIG91dHB1dFtpIC0gMV0pO1xyXG5cdFx0Y29uc3QgdjEgPSBuZXcgVmVjdG9yMyhvdXRwdXRbaSArIDNdLCBvdXRwdXRbaSArIDRdLCBvdXRwdXRbaSArIDVdKTtcclxuXHRcdGNvbnN0IGExID0gbmV3IFZlY3RvcjMob3V0cHV0W2ldLCBvdXRwdXRbaSArIDFdLCBvdXRwdXRbaSArIDJdKTtcclxuXHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcih2MCwgMiAqIHQzIC0gMyAqIHQyICsgMSwgdjApO1xyXG5cdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGIwLCB0ZCAqICh0MyAtIDIgKiB0MiArIHQpLCBiMCk7XHJcblx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIodjEsIC0yICogdDMgKyAzICogdDIsIHYxKTtcclxuXHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcihhMSwgdGQgKiAodDMgLSB0MiksIGExKTtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHRWZWN0b3IzLmFkZChyZXN1bHQsIHYwLCByZXN1bHQpO1xyXG5cdFx0VmVjdG9yMy5hZGQocmVzdWx0LCBiMCwgcmVzdWx0KTtcclxuXHRcdFZlY3RvcjMuYWRkKHJlc3VsdCwgdjEsIHJlc3VsdCk7XHJcblx0XHRWZWN0b3IzLmFkZChyZXN1bHQsIGExLCByZXN1bHQpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNvbnN0IHYgPSBbXTtcclxuXHRmb3IgKGxldCBuID0gLTE7IG4gPCAxOyBuICs9IDEpIHtcclxuXHRcdGNvbnN0IGkgPSAzICogKGluZGV4ICsgbik7XHJcblx0XHR2LnB1c2gobmV3IFZlY3RvcjMob3V0cHV0W2ldLCBvdXRwdXRbaSArIDFdLCBvdXRwdXRbaSArIDJdKSk7XHJcblx0fVxyXG5cclxuXHRpZiAobWV0aG9kID09PSBcIlNURVBcIikge1xyXG5cdFx0cmV0dXJuIHQgPCAxID8gdlswXSA6IHZbMV07XHJcblx0fVxyXG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBWZWN0b3IzKCk7XHJcblx0cmV0dXJuIFZlY3RvcjMubGVycCh2WzBdLCB2WzFdLCB0LCByZXN1bHQpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2x0ZkVudW06IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIH0gPSB7XHJcblx0U0NBTEFSOiAxLFxyXG5cdFZFQzI6IDIsXHJcblx0VkVDMzogMyxcclxuXHRWRUM0OiA0LFxyXG5cdE1BVDI6IDQsXHJcblx0TUFUMzogOSxcclxuXHRNQVQ0OiAxNixcclxuXHQ1MTIwOiAxLFxyXG5cdDUxMjE6IDEsXHJcblx0NTEyMjogMixcclxuXHQ1MTIzOiAyLFxyXG5cdDUxMjU6IDQsXHJcblx0NTEyNjogNCxcclxuXHQ5NzI4OiBcIm5lYXJlc3RcIixcclxuXHQ5NzI5OiBcImxpbmVhclwiLFxyXG5cdDk5ODQ6IFwibGluZWFyXCIsXHJcblx0OTk4NTogXCJsaW5lYXJcIixcclxuXHQ5OTg2OiBcImxpbmVhclwiLFxyXG5cdDk5ODc6IFwibGluZWFyXCIsXHJcblx0MzMwNzE6IFwiY2xhbXAtdG8tZWRnZVwiLFxyXG5cdDMzNjQ4OiBcIm1pcnJvci1yZXBlYXRcIixcclxuXHQxMDQ5NzogXCJyZXBlYXRcIlxyXG59O1xyXG4iLCJpbXBvcnQgTWF0cml4NCBmcm9tIFwiLi4vLi4vLi4vbWF0aC9NYXRyaXg0XCI7XHJcbmltcG9ydCBWZWN0b3I0IGZyb20gXCIuLi8uLi8uLi9tYXRoL1ZlY3RvcjRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NvciB7XHJcblx0dmFsdWVzOiBhbnk7XHJcblx0aWQ6IG51bWJlcjtcclxuXHRjb3VudDogbnVtYmVyO1xyXG5cdGNvbXBvbmVudFR5cGU6IG51bWJlcjtcclxuXHR0eXBlOiBudW1iZXI7XHJcblx0bWluOiBudW1iZXJbXTtcclxuXHRtYXg6IG51bWJlcltdO1xyXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IEFjY2Vzc29yUGFybXMpIHtcclxuXHRcdHRoaXMudmFsdWVzID0gb3B0aW9ucy52YWx1ZXMgPz8gW107XHJcblx0XHR0aGlzLmlkID0gb3B0aW9ucy5pZDtcclxuXHRcdHRoaXMuY291bnQgPSBvcHRpb25zLmNvdW50O1xyXG5cdFx0dGhpcy5jb21wb25lbnRUeXBlID0gb3B0aW9ucy5jb21wb25lbnRUeXBlO1xyXG5cdFx0dGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xyXG5cdFx0dGhpcy5taW4gPSBvcHRpb25zLm1pbjtcclxuXHRcdHRoaXMubWF4ID0gb3B0aW9ucy5tYXg7XHJcblx0fVxyXG5cdGdldEFycmF5KCk6IG51bWJlcltdIHtcclxuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMudmFsdWVzKTtcclxuXHR9XHJcblx0Z2V0VmVjNEFycmF5KCk6IFZlY3RvcjRbXSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpICs9IDQpIHtcclxuXHRcdFx0cmVzdWx0LnB1c2gobmV3IFZlY3RvcjQodGhpcy52YWx1ZXNbaV0sIHRoaXMudmFsdWVzW2kgKyAxXSwgdGhpcy52YWx1ZXNbaSArIDJdLCB0aGlzLnZhbHVlc1tpICsgM10pKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cdGdldE1hdDRBcnJheSgpOiBNYXRyaXg0W10ge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaSArPSAxNikge1xyXG5cdFx0XHRjb25zdCBtYXQ0ID0gbmV3IE1hdHJpeDQoKTtcclxuXHRcdFx0TWF0cml4NC5mcm9tQ29sdW1uTWFqb3JBcnJheSh0aGlzLnZhbHVlcy5zbGljZShpLCBpICsgMTYpLCBtYXQ0KTtcclxuXHRcdFx0cmVzdWx0LnB1c2gobWF0NCk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxufVxyXG5leHBvcnQgdHlwZSBBY2Nlc3NvclBhcm1zID0gUGFydGlhbDxBY2Nlc3Nvcj47XHJcbiIsImltcG9ydCB7IFF1YXRlcm5pb24gfSBmcm9tIFwiLi4vLi4vLi4vbWF0aC9RdWF0ZXJuaW9uXCI7XG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi4vLi4vLi4vbWF0aC9WZWN0b3I0XCI7XG5pbXBvcnQgeyBBbmltYXRpb25DaGFubmVsIH0gZnJvbSBcIi4vQW5pbWF0aW9uQ2hhbm5lbFwiO1xuaW1wb3J0IHsgQW5pbWF0aW9uU2FtcGxlciB9IGZyb20gXCIuL0FuaW1hdGlvblNhbXBsZXJcIjtcblxuZXhwb3J0IGNsYXNzIEFuaW1hdGlvbiB7XG5cdGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHB1YmxpYyBzYW1wbGVyczogQW5pbWF0aW9uU2FtcGxlcltdLCBwdWJsaWMgY2hhbm5lbHM6IEFuaW1hdGlvbkNoYW5uZWxbXSkge31cblx0cGxheSh0aW1lOiBudW1iZXIpIHtcblx0XHRsZXQgbm9kZSwgYW5pbWF0aW9uU2FtcGxlciwgdGFyZ2V0O1xuXHRcdHRoaXM/LmNoYW5uZWxzPy5tYXAoKGNoYW5uZWwpID0+IHtcblx0XHRcdGFuaW1hdGlvblNhbXBsZXIgPSBjaGFubmVsLnNhbXBsZXI7XG5cdFx0XHRhbmltYXRpb25TYW1wbGVyLmdldFZhbHVlKHRpbWUpO1xuXHRcdFx0dGFyZ2V0ID0gY2hhbm5lbC50YXJnZXQ7XG5cdFx0XHRub2RlID0gdGFyZ2V0Lm5vZGU7XG5cdFx0XHRzd2l0Y2ggKHRhcmdldC5wYXRoKSB7XG5cdFx0XHRcdGNhc2UgXCJyb3RhdGlvblwiOlxuXHRcdFx0XHRcdFF1YXRlcm5pb24uY2xvbmUoYW5pbWF0aW9uU2FtcGxlci5jdXJyZW50VmFsdWUsIG5vZGUucXVhdGVybmlvbik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJ0cmFuc2xhdGlvblwiOlxuXHRcdFx0XHRcdFZlY3RvcjQuY2xvbmUoYW5pbWF0aW9uU2FtcGxlci5jdXJyZW50VmFsdWUsIG5vZGUucG9zaXRpb24pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwic2NhbGVcIjpcblx0XHRcdFx0XHRWZWN0b3I0LmNsb25lKGFuaW1hdGlvblNhbXBsZXIuY3VycmVudFZhbHVlLCBub2RlLnNjYWxlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQW5pbWF0aW9uQ2hhbm5lbFRhcmdldCB9IGZyb20gXCIuL0FuaW1hdGlvbkNoYW5uZWxUYXJnZXRcIjtcbmltcG9ydCB7IEFuaW1hdGlvblNhbXBsZXIgfSBmcm9tIFwiLi9BbmltYXRpb25TYW1wbGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBBbmltYXRpb25DaGFubmVsIHtcblx0c2FtcGxlcjogQW5pbWF0aW9uU2FtcGxlcjtcblx0dGFyZ2V0OiBBbmltYXRpb25DaGFubmVsVGFyZ2V0O1xuXHRjb25zdHJ1Y3RvcigpIHt9XG59XG4iLCJpbXBvcnQgTm9kZSBmcm9tIFwiLi4vLi4vLi4vbWVzaC9Ob2RlXCI7XG5cbmV4cG9ydCBjbGFzcyBBbmltYXRpb25DaGFubmVsVGFyZ2V0IHtcblx0bm9kZTogTm9kZTtcblx0cGF0aDogXCJ0cmFuc2xhdGlvblwiIHwgXCJyb3RhdGlvblwiIHwgXCJzY2FsZVwiIHwgXCJ3ZWlnaHRzXCI7XG5cdGNvbnN0cnVjdG9yKG5vZGUsIHBhdGgpIHtcblx0XHR0aGlzLm5vZGUgPSBub2RlO1xuXHRcdHRoaXMucGF0aCA9IHBhdGg7XG5cdH1cbn1cbiIsImV4cG9ydCBlbnVtIFR5cGUyTnVtT2ZDb21wb25lbnQge1xyXG5cdFwiU0NBTEFSXCIgPSAxLFxyXG5cdFwiVkVDMlwiID0gMixcclxuXHRcIlZFQzNcIiA9IDMsXHJcblx0XCJWRUM0XCIgPSA0LFxyXG5cdFwiTUFUMlwiID0gNCxcclxuXHRcIk1BVDNcIiA9IDksXHJcblx0XCJNQVQ0XCIgPSAxNlxyXG59XHJcbiIsImltcG9ydCB7IFF1YXRlcm5pb24gfSBmcm9tIFwiLi4vLi4vLi4vbWF0aC9RdWF0ZXJuaW9uXCI7XHJcbmltcG9ydCBWZWN0b3I0IGZyb20gXCIuLi8uLi8uLi9tYXRoL1ZlY3RvcjRcIjtcclxuaW1wb3J0IHsgVHlwZTJOdW1PZkNvbXBvbmVudCB9IGZyb20gXCIuLi90eXBlcy9nbHRmVHlwZVwiO1xyXG5leHBvcnQgY2xhc3MgQW5pbWF0aW9uU2FtcGxlciB7XHJcblx0aW5wdXQ6IGFueTtcclxuXHRpbnRlcnBvbGF0aW9uOiBcIkxJTkVBUlwiIHwgXCJTVEVQXCIgfCBcIkNVQklDU1BMSU5FXCI7XHJcblx0b3V0cHV0OiBhbnk7XHJcblx0Y3VycmVudEluZGV4OiBudW1iZXI7XHJcblx0c3RhcnRUaW1lOiBudW1iZXI7XHJcblx0ZW5kVGltZTogbnVtYmVyO1xyXG5cdGN1cnJlbnRWYWx1ZTogVmVjdG9yNCB8IFF1YXRlcm5pb247XHJcblx0ZHVyYXRpb246IG51bWJlcjtcclxuXHRpbnB1dE1heDogbnVtYmVyO1xyXG5cdHByaXZhdGUgaW5wdXRUeXBlOiBzdHJpbmc7XHJcblx0cHJpdmF0ZSBvdXRwdXRUeXBlOiBzdHJpbmc7XHJcblx0Y29uc3RydWN0b3IoKSB7fVxyXG5cdGZvcm1HbHRmKGdsdGYsIHNhbXBsZXIpIHtcclxuXHRcdHRoaXMuaW5wdXQgPSBnbHRmLmFjY2Vzc29yc1tzYW1wbGVyLmlucHV0XS52YWx1ZXM7IC8vcmVxdWlyZWQsIGFjY2Vzc29yIG9iamVjdFxyXG5cdFx0dGhpcy5vdXRwdXQgPSBnbHRmLmFjY2Vzc29yc1tzYW1wbGVyLm91dHB1dF0udmFsdWVzOyAvL3JlcXVpcmVkLCBhY2Nlc3NvciBvYmplY3RcclxuXHRcdHRoaXMuaW50ZXJwb2xhdGlvbiA9IHNhbXBsZXIuaW50ZXJwb2xhdGlvbiAhPT0gdW5kZWZpbmVkID8gc2FtcGxlci5pbnRlcnBvbGF0aW9uIDogXCJMSU5FQVJcIjtcclxuXHRcdHRoaXMuY3VycmVudEluZGV4ID0gMDtcclxuXHRcdC8vIHRoaXMuY3VycmVudFZhbHVlPW5ldyBWZWN0b3I0KCk7XHJcblx0XHR0aGlzLmVuZFRpbWUgPSB0aGlzLmlucHV0W3RoaXMuaW5wdXQubGVuZ3RoIC0gMV07XHJcblx0XHR0aGlzLmlucHV0TWF4ID0gdGhpcy5lbmRUaW1lIC0gdGhpcy5pbnB1dFswXTtcclxuXHRcdHRoaXMuaW5wdXRUeXBlID0gZ2x0Zj8uanNvbj8uYWNjZXNzb3JzW3NhbXBsZXIuaW5wdXRdPy50eXBlO1xyXG5cdFx0dGhpcy5vdXRwdXRUeXBlID0gZ2x0Zj8uanNvbj8uYWNjZXNzb3JzW3NhbXBsZXIub3V0cHV0XT8udHlwZTtcclxuXHR9XHJcblx0Z2V0VmFsdWUodGltZTogbnVtYmVyKTogdm9pZCB7XHJcblx0XHRpZiAodGltZSA+IHRoaXMuZW5kVGltZSkge1xyXG5cdFx0XHR0aW1lIC09IHRoaXMuaW5wdXRNYXggKiBNYXRoLmNlaWwoKHRpbWUgLSB0aGlzLmVuZFRpbWUpIC8gdGhpcy5pbnB1dE1heCk7XHJcblx0XHRcdHRoaXMuY3VycmVudEluZGV4ID0gMDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBsZW4gPSB0aGlzLmlucHV0Lmxlbmd0aDtcclxuXHRcdHdoaWxlICh0aGlzLmN1cnJlbnRJbmRleCA8PSBsZW4gLSAyICYmIHRpbWUgPj0gdGhpcy5pbnB1dFt0aGlzLmN1cnJlbnRJbmRleCArIDFdKSB7XHJcblx0XHRcdHRoaXMuY3VycmVudEluZGV4Kys7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuY3VycmVudEluZGV4ID49IGxlbiAtIDEpIHtcclxuXHRcdFx0Ly8gbG9vcFxyXG5cdFx0XHR0aW1lIC09IHRoaXMuaW5wdXRNYXg7XHJcblx0XHRcdHRoaXMuY3VycmVudEluZGV4ID0gMDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBAdG1wOiBhc3N1bWUgbm8gc3RyaWRlXHJcblx0XHRjb25zdCBjb3VudCA9IFR5cGUyTnVtT2ZDb21wb25lbnRbdGhpcy5vdXRwdXRUeXBlXTtcclxuXHJcblx0XHRjb25zdCBhbmltYXRpb25PdXRwdXRWYWx1ZVZlYzRhID0gY291bnQgPT09IDQgPyBuZXcgUXVhdGVybmlvbigpIDogbmV3IFZlY3RvcjQoKTtcclxuXHRcdGNvbnN0IGFuaW1hdGlvbk91dHB1dFZhbHVlVmVjNGIgPSBjb3VudCA9PT0gNCA/IG5ldyBRdWF0ZXJuaW9uKCkgOiBuZXcgVmVjdG9yNCgpO1xyXG5cdFx0aWYgKCF0aGlzLmN1cnJlbnRWYWx1ZSkgdGhpcy5jdXJyZW50VmFsdWUgPSBjb3VudCA9PT0gNCA/IG5ldyBRdWF0ZXJuaW9uKCkgOiBuZXcgVmVjdG9yNCgpO1xyXG5cdFx0Y29uc3QgaSA9IHRoaXMuY3VycmVudEluZGV4O1xyXG5cdFx0Y29uc3QgbyA9IGkgKiBjb3VudDtcclxuXHRcdGNvbnN0IG9uID0gbyArIGNvdW50O1xyXG5cclxuXHRcdGNvbnN0IHUgPSBNYXRoLm1heCgwLCB0aW1lIC0gdGhpcy5pbnB1dFtpXSkgLyAodGhpcy5pbnB1dFtpICsgMV0gLSB0aGlzLmlucHV0W2ldKTtcclxuXHRcdGFuaW1hdGlvbk91dHB1dFZhbHVlVmVjNGEuc2V0KHRoaXMub3V0cHV0W28gKyAwXSwgdGhpcy5vdXRwdXRbbyArIDFdLCB0aGlzLm91dHB1dFtvICsgMl0sIHRoaXMub3V0cHV0W28gKyAzXSk7XHJcblx0XHRhbmltYXRpb25PdXRwdXRWYWx1ZVZlYzRiLnNldChcclxuXHRcdFx0dGhpcy5vdXRwdXRbb24gKyAwXSxcclxuXHRcdFx0dGhpcy5vdXRwdXRbb24gKyAxXSxcclxuXHRcdFx0dGhpcy5vdXRwdXRbb24gKyAyXSxcclxuXHRcdFx0dGhpcy5vdXRwdXRbb24gKyAzXVxyXG5cdFx0KTtcclxuXHRcdHN3aXRjaCAodGhpcy5pbnRlcnBvbGF0aW9uKSB7XHJcblx0XHRcdGNhc2UgXCJMSU5FQVJcIjpcclxuXHRcdFx0XHRjb3VudCA9PT0gNFxyXG5cdFx0XHRcdFx0PyBRdWF0ZXJuaW9uLnNsZXJwKFxyXG5cdFx0XHRcdFx0XHRcdDxRdWF0ZXJuaW9uPmFuaW1hdGlvbk91dHB1dFZhbHVlVmVjNGEsXHJcblx0XHRcdFx0XHRcdFx0PFF1YXRlcm5pb24+YW5pbWF0aW9uT3V0cHV0VmFsdWVWZWM0YixcclxuXHRcdFx0XHRcdFx0XHR1LFxyXG5cdFx0XHRcdFx0XHRcdDxRdWF0ZXJuaW9uPnRoaXMuY3VycmVudFZhbHVlXHJcblx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdDogVmVjdG9yNC5sZXJwKFxyXG5cdFx0XHRcdFx0XHRcdDxWZWN0b3I0PmFuaW1hdGlvbk91dHB1dFZhbHVlVmVjNGEsXHJcblx0XHRcdFx0XHRcdFx0PFZlY3RvcjQ+YW5pbWF0aW9uT3V0cHV0VmFsdWVWZWM0YixcclxuXHRcdFx0XHRcdFx0XHR1LFxyXG5cdFx0XHRcdFx0XHRcdDxWZWN0b3I0PnRoaXMuY3VycmVudFZhbHVlXHJcblx0XHRcdFx0XHQgICk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IFJlbmRlck9iamVjdFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSBcIi4uL2dlb21ldHJ5L0dlb21ldHJ5XCI7XHJcbmltcG9ydCBQYnJNYXRlcmlhbCBmcm9tIFwiLi4vbWF0ZXJpYWwvUGJyTWF0ZXJpYWxcIjtcclxuaW1wb3J0IENvbG9yIGZyb20gXCIuLi9tYXRoL0NvbG9yXCI7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gXCIuLi9tYXRoL01hdHJpeDRcIjtcclxuaW1wb3J0IHsgUXVhdGVybmlvbiB9IGZyb20gXCIuLi9tYXRoL1F1YXRlcm5pb25cIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xyXG5pbXBvcnQgTm9kZSBmcm9tIFwiLi4vbWVzaC9Ob2RlXCI7XHJcbmltcG9ydCB7IFNLaW5NZXNoIH0gZnJvbSBcIi4uL21lc2gvU0tpbk1lc2hcIjtcclxuaW1wb3J0IHsgRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XHJcbmltcG9ydCBTYW1wbGVyIGZyb20gXCIuLi9yZW5kZXIvU2FtcGxlclwiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcclxuaW1wb3J0IHsgZ2VuZXJhdGVOb3JtYWxzLCBnbHRmRW51bSwgbmV3VHlwZWRBcnJheSwgdG9JbmRpY2VzLCBUeXBlZEFycmF5IH0gZnJvbSBcIi4uL3V0aWxzL2dsdGZVdGlsc1wiO1xyXG5pbXBvcnQgeyBBY2Nlc3NvciB9IGZyb20gXCIuL2dsdGYvbGlicy9BY2Nlc3NvclwiO1xyXG5pbXBvcnQgeyBBbmltYXRpb24gfSBmcm9tIFwiLi9nbHRmL2xpYnMvQW5pbWF0aW9uXCI7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkNoYW5uZWwgfSBmcm9tIFwiLi9nbHRmL2xpYnMvQW5pbWF0aW9uQ2hhbm5lbFwiO1xyXG5pbXBvcnQgeyBBbmltYXRpb25DaGFubmVsVGFyZ2V0IH0gZnJvbSBcIi4vZ2x0Zi9saWJzL0FuaW1hdGlvbkNoYW5uZWxUYXJnZXRcIjtcclxuaW1wb3J0IHsgQW5pbWF0aW9uU2FtcGxlciB9IGZyb20gXCIuL2dsdGYvbGlicy9BbmltYXRpb25TYW1wbGVyXCI7XHJcblxyXG5leHBvcnQgdHlwZSBHTFRGUHJpbWl0aXZlID0ge1xyXG5cdHZlcnRleENvdW50OiBudW1iZXI7XHJcblx0aW5kaWNlczogVWludDE2QXJyYXkgfCBVaW50MzJBcnJheSB8IG51bGw7XHJcblx0cG9zaXRpb25zOiBUeXBlZEFycmF5O1xyXG5cdG5vcm1hbHM6IFR5cGVkQXJyYXk7XHJcblx0dXZzOiBUeXBlZEFycmF5IHwgbnVsbDtcclxuXHR1djFzOiBUeXBlZEFycmF5IHwgbnVsbDtcclxuXHR0YW5nZW50czogVHlwZWRBcnJheSB8IG51bGw7XHJcblx0Y29sb3JzOiBUeXBlZEFycmF5IHwgbnVsbDtcclxuXHRtYXRlcmlhbDogYW55O1xyXG5cdGJvdW5kaW5nQm94OiB7XHJcblx0XHRtYXg6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcclxuXHRcdG1pbjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xyXG5cdH07XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBHTFRGTWVzaCA9IEFycmF5PEdMVEZQcmltaXRpdmU+O1xyXG5cclxuZXhwb3J0IHR5cGUgR0xURkFuaW1hdGlvbiA9IHtcclxuXHRjaGFubmVsczogQXJyYXk8e1xyXG5cdFx0aW5wdXQ6IFR5cGVkQXJyYXk7XHJcblx0XHRvdXRwdXQ6IFR5cGVkQXJyYXk7XHJcblx0XHRpbnRlcnBvbGF0aW9uOiBzdHJpbmc7XHJcblx0XHRub2RlOiBudW1iZXI7XHJcblx0XHRwYXRoOiBzdHJpbmc7XHJcblx0fT47XHJcblx0bGVuZ3RoOiBudW1iZXI7XHJcbn07XHJcblxyXG5leHBvcnQgY2xhc3MgR0xURiB7XHJcblx0c2NlbmVzOiBBcnJheTxOb2RlPjtcclxuXHJcblx0bm9kZXM6IEFycmF5PGFueT47XHJcblxyXG5cdGNhbWVyYXM6IEFycmF5PGFueT47XHJcblxyXG5cdG1lc2hlczogQXJyYXk8YW55PjtcclxuXHJcblx0aW1hZ2VzOiBBcnJheTxJbWFnZUJpdG1hcD47XHJcblxyXG5cdGFuaW1hdGlvbnM6IEFycmF5PEdMVEZBbmltYXRpb24+O1xyXG5cclxuXHRwcml2YXRlIGdsYk9mZnNldDogbnVtYmVyO1xyXG5cclxuXHRwcml2YXRlIGJ1ZmZlcnM6IEFycmF5QnVmZmVyW107XHJcblxyXG5cdHByaXZhdGUgYnVmZmVyVmlld3M6IGFueTtcclxuXHJcblx0YWNjZXNzb3JzOiBhbnk7XHJcblxyXG5cdGpzb246IGFueTtcclxuXHJcblx0cHJpdmF0ZSBtYXRlcmlhbHM6IGFueTtcclxuXHJcblx0cHJpdmF0ZSBnbGJCaW4/OiBBcnJheUJ1ZmZlcjtcclxuXHJcblx0cHJpdmF0ZSByb290VXJsOiBzdHJpbmc7XHJcblxyXG5cdHRleHR1cmVzOiBhbnlbXTtcclxuXHJcblx0c2FtcGxlcnM6IFNhbXBsZXJbXTtcclxuXHJcblx0Y29uc3RydWN0b3IoanNvbjogYW55LCByb290VXJsOiBzdHJpbmcsIGdsYk9mZnNldCA9IDAsIGdsYkJpbj86IEFycmF5QnVmZmVyKSB7XHJcblx0XHR0aGlzLmpzb24gPSBqc29uO1xyXG5cdFx0dGhpcy5idWZmZXJWaWV3cyA9IGpzb24uYnVmZmVyVmlld3M7XHJcblx0XHR0aGlzLmdsYk9mZnNldCA9IGdsYk9mZnNldDtcclxuXHRcdHRoaXMucm9vdFVybCA9IHJvb3RVcmw7XHJcblx0XHR0aGlzLnNjZW5lcyA9IGpzb24uc2NlbmVzO1xyXG5cdFx0dGhpcy5jYW1lcmFzID0ganNvbi5jYW1lcmFzIHx8IFtdO1xyXG5cdFx0dGhpcy5nbGJCaW4gPSBnbGJCaW47XHJcblx0XHR0aGlzLm1lc2hlcyA9IFtdO1xyXG5cdH1cclxuXHRhc3luYyBwYXJzZURhdGEoKSB7XHJcblx0XHR0aGlzLmJ1ZmZlcnMgPSBhd2FpdCB0aGlzLmxvYWRCdWZmZXMoKTtcclxuXHRcdHRoaXMuaW1hZ2VzID0gYXdhaXQgdGhpcy5sb2FkSW1hZ2VzKCk7XHJcblx0XHR0aGlzLnBhcnNlU2FtcGxlcnMoKTtcclxuXHRcdHRoaXMucGFyc2VUZXh0dXJlcygpO1xyXG5cdFx0dGhpcy5wYXJzZU1hdGVyaWFscygpO1xyXG5cdFx0dGhpcy5wYXJzZUFjY2Vzc29ycygpO1xyXG5cdFx0dGhpcy5wYXJzZU1lc2hzKCk7XHJcblx0XHR0aGlzLnBhcnNlTm9kZXMoKTtcclxuXHRcdHRoaXMubm9ybWFsaXplRGF0YSgpO1xyXG5cdFx0dGhpcy5wYXJzZVNjZW5lcygpO1xyXG5cdFx0dGhpcy5wYXJzZUFuaW1hdGlvbnMoKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBnZXRBY2Nlc3NvcihpbmRleDogbnVtYmVyKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hY2Nlc3NvcnNbaW5kZXhdO1xyXG5cdH1cclxuXHRwcml2YXRlIHBhcnNlU2FtcGxlcnMoKSB7XHJcblx0XHR0aGlzLnNhbXBsZXJzID0gdGhpcy5qc29uLnNhbXBsZXJzXHJcblx0XHRcdD8gKHRoaXMuanNvbi5zYW1wbGVycyBhcyBBcnJheTxhbnk+KS5tYXAoKHNhbXBsZXIpID0+IHRoaXMuZ2V0U2FtcGxlcihzYW1wbGVyKSlcclxuXHRcdFx0OiBbXTtcclxuXHR9XHJcblx0cHJpdmF0ZSBwYXJzZVNjZW5lcygpIHtcclxuXHRcdHRoaXMuc2NlbmVzID0gdGhpcy5qc29uLnNjZW5lcy5tYXAoKHNjZW5lKSA9PiB7XHJcblx0XHRcdGNvbnN0IG5vZGVzID0gc2NlbmU/Lm5vZGVzPy5tYXAoKG5vZGVJZCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLm5vZGVzW25vZGVJZF07XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRyZXR1cm4gbm9kZXM7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0cHJpdmF0ZSBwYXJzZVRleHR1cmVzKCkge1xyXG5cdFx0dGhpcy50ZXh0dXJlcyA9IHRoaXMuanNvbi50ZXh0dXJlc1xyXG5cdFx0XHQ/ICh0aGlzLmpzb24udGV4dHVyZXMgYXMgQXJyYXk8YW55PikubWFwKCh0ZXh0dXJlKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRzYW1wbGVyOiB0ZXh0dXJlLnNhbXBsZXIgIT09IHVuZGVmaW5lZCA/IHRoaXMuc2FtcGxlcnNbdGV4dHVyZS5zYW1wbGVyXSA6IHRoaXMuZ2V0U2FtcGxlcih7fSksXHJcblx0XHRcdFx0XHRcdHRleHR1cmU6IHRoaXMuY3JlYXRlVGV4dHVyZSh0ZXh0dXJlLnNvdXJjZSlcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdCAgfSlcclxuXHRcdFx0OiBbXTtcclxuXHR9XHJcblx0cHJpdmF0ZSBwYXJzZU1hdGVyaWFscygpIHtcclxuXHRcdHRoaXMubWF0ZXJpYWxzID0gdGhpcy5qc29uLm1hdGVyaWFsc1xyXG5cdFx0XHQ/ICh0aGlzLmpzb24ubWF0ZXJpYWxzIGFzIEFycmF5PGFueT4pLm1hcCgobWF0ZXJpYWwpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IG1hdCA9IG5ldyBQYnJNYXRlcmlhbCgpO1xyXG5cdFx0XHRcdFx0Y29uc3Qge1xyXG5cdFx0XHRcdFx0XHRiYXNlQ29sb3JGYWN0b3IsXHJcblx0XHRcdFx0XHRcdG1ldGFsbGljRmFjdG9yLFxyXG5cdFx0XHRcdFx0XHRtZXRhbGxpY1JvdWdobmVzc1RleHR1cmUsXHJcblx0XHRcdFx0XHRcdGJhc2VDb2xvclRleHR1cmUsXHJcblx0XHRcdFx0XHRcdHJvdWdobmVzc0ZhY3RvclxyXG5cdFx0XHRcdFx0fSA9IG1hdGVyaWFsLnBick1ldGFsbGljUm91Z2huZXNzO1xyXG5cdFx0XHRcdFx0aWYgKG1hdGVyaWFsLm5vcm1hbFRleHR1cmUpIG1hdC5ub3JtYWxUZXh0dXJlID0gdGhpcy50ZXh0dXJlc1ttYXRlcmlhbC5ub3JtYWxUZXh0dXJlLmluZGV4XS50ZXh0dXJlO1xyXG5cdFx0XHRcdFx0aWYgKG1hdGVyaWFsLm9jY2x1c2lvblRleHR1cmUpXHJcblx0XHRcdFx0XHRcdG1hdC5hb1RleHR1cmUgPSB0aGlzLnRleHR1cmVzW21hdGVyaWFsLm9jY2x1c2lvblRleHR1cmUuaW5kZXhdLnRleHR1cmU7XHJcblx0XHRcdFx0XHRpZiAobWF0ZXJpYWwuZW1pc3NpdmVUZXh0dXJlKVxyXG5cdFx0XHRcdFx0XHRtYXQuZW1pc3NpdmVUZXh0dXJlID0gdGhpcy50ZXh0dXJlc1ttYXRlcmlhbC5lbWlzc2l2ZVRleHR1cmUuaW5kZXhdLnRleHR1cmU7XHJcblx0XHRcdFx0XHRpZiAoYmFzZUNvbG9yVGV4dHVyZSkgbWF0LmJhc2VUZXh0dXJlID0gdGhpcy50ZXh0dXJlc1tiYXNlQ29sb3JUZXh0dXJlLmluZGV4XS50ZXh0dXJlO1xyXG5cdFx0XHRcdFx0aWYgKG1ldGFsbGljUm91Z2huZXNzVGV4dHVyZSlcclxuXHRcdFx0XHRcdFx0bWF0Lm1ldGFsbmVzc1JvdWdobmVzc1RleHR1cmUgPSB0aGlzLnRleHR1cmVzW21ldGFsbGljUm91Z2huZXNzVGV4dHVyZS5pbmRleF0udGV4dHVyZTtcclxuXHRcdFx0XHRcdGlmIChiYXNlQ29sb3JGYWN0b3IpXHJcblx0XHRcdFx0XHRcdG1hdC5jb2xvciA9IG5ldyBDb2xvcihiYXNlQ29sb3JGYWN0b3JbMF0sIGJhc2VDb2xvckZhY3RvclsxXSwgYmFzZUNvbG9yRmFjdG9yWzJdKTtcclxuXHRcdFx0XHRcdG1hdC5tZXRhbG5lc3MgPSBtZXRhbGxpY0ZhY3RvciA/PyAxLjA7XHJcblx0XHRcdFx0XHRtYXQucm91Z2huZXNzID0gcm91Z2huZXNzRmFjdG9yID8/IDAuMDtcclxuXHRcdFx0XHRcdG1hdC5iYXNlU2FtcGxlciA9IG5ldyBTYW1wbGVyKHtcclxuXHRcdFx0XHRcdFx0bWFnRmlsdGVyOiBcImxpbmVhclwiLFxyXG5cdFx0XHRcdFx0XHRtaW5GaWx0ZXI6IFwibGluZWFyXCIsXHJcblx0XHRcdFx0XHRcdGFkZHJlc3NNb2RlVTogXCJyZXBlYXRcIixcclxuXHRcdFx0XHRcdFx0YWRkcmVzc01vZGVWOiBcInJlcGVhdFwiXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdHJldHVybiBtYXQ7XHJcblx0XHRcdCAgfSlcclxuXHRcdFx0OiBbXTtcclxuXHR9XHJcblx0cHJpdmF0ZSBwYXJzZUFjY2Vzc29ycygpIHtcclxuXHRcdHRoaXMuYWNjZXNzb3JzID0gKHRoaXMuanNvbi5hY2Nlc3NvcnMgYXMgQXJyYXk8YW55PikubWFwKChhY2Nlc3NvciwgaW5kZXgpID0+IHtcclxuXHRcdFx0Y29uc3QgbiA9IGdsdGZFbnVtW2FjY2Vzc29yLnR5cGVdIGFzIG51bWJlcjtcclxuXHRcdFx0bGV0IGFycmF5O1xyXG5cdFx0XHRpZiAoYWNjZXNzb3IuYnVmZmVyVmlldyA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0YXJyYXkgPSBuZXdUeXBlZEFycmF5KFxyXG5cdFx0XHRcdFx0YWNjZXNzb3IuY29tcG9uZW50VHlwZSxcclxuXHRcdFx0XHRcdG5ldyBBcnJheUJ1ZmZlcihuICogYWNjZXNzb3IuY291bnQgKiAoZ2x0ZkVudW1bYWNjZXNzb3IuY29tcG9uZW50VHlwZV0gYXMgbnVtYmVyKSksXHJcblx0XHRcdFx0XHQwLFxyXG5cdFx0XHRcdFx0YWNjZXNzb3IuY291bnQgKiBuXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcnJheSA9IHRoaXMuZ2V0QnVmZmVyVmlldyhhY2Nlc3Nvciwgbik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChhY2Nlc3Nvci5zcGFyc2UpIHtcclxuXHRcdFx0XHRhY2Nlc3Nvci5zcGFyc2UuaW5kaWNlcy5jb3VudCA9IGFjY2Vzc29yLnNwYXJzZS5jb3VudDtcclxuXHRcdFx0XHRhY2Nlc3Nvci5zcGFyc2UudmFsdWVzLmNvdW50ID0gYWNjZXNzb3Iuc3BhcnNlLmNvdW50O1xyXG5cdFx0XHRcdGFjY2Vzc29yLnNwYXJzZS52YWx1ZXMuY29tcG9uZW50VHlwZSA9IGFjY2Vzc29yLmNvbXBvbmVudFR5cGU7XHJcblx0XHRcdFx0Y29uc3QgaW5kaWNlcyA9IHRoaXMuZ2V0QnVmZmVyVmlldyhhY2Nlc3Nvci5zcGFyc2UuaW5kaWNlcywgMSk7XHJcblx0XHRcdFx0Y29uc3QgdmFsdWVzID0gdGhpcy5nZXRCdWZmZXJWaWV3KGFjY2Vzc29yLnNwYXJzZS52YWx1ZXMsIG4pO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYWNjZXNzb3Iuc3BhcnNlLmNvdW50OyBpICs9IDEpIHtcclxuXHRcdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgbjsgaiArPSAxKSB7XHJcblx0XHRcdFx0XHRcdGFycmF5W2luZGljZXNbaV0gKiBuICsgal0gPSB2YWx1ZXNbaSAqIG4gKyBqXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG5ldyBBY2Nlc3Nvcih7XHJcblx0XHRcdFx0Y29tcG9uZW50VHlwZTogPG51bWJlcj5nbHRmRW51bVthY2Nlc3Nvci5jb21wb25lbnRUeXBlXSxcclxuXHRcdFx0XHRjb3VudDogYWNjZXNzb3IuY291bnQsXHJcblx0XHRcdFx0dHlwZTogbixcclxuXHRcdFx0XHR2YWx1ZXM6IGFycmF5LFxyXG5cdFx0XHRcdGlkOiBpbmRleCxcclxuXHRcdFx0XHRtaW46IGFjY2Vzc29yPy5taW4sXHJcblx0XHRcdFx0bWF4OiBhY2Nlc3Nvcj8ubWF4XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgcGFyc2VBbmltYXRpb25zKCkge1xyXG5cdFx0dGhpcy5hbmltYXRpb25zID0gdGhpcz8uanNvbj8uYW5pbWF0aW9ucz8ubWFwKChnbHRmQW5pbWF0aW9uLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRjb25zdCBzYW1wbGVycyA9IGdsdGZBbmltYXRpb24/LnNhbXBsZXJzPy5tYXAoKGdsdGZTYW1wbGVyKSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2FtcGxlciA9IG5ldyBBbmltYXRpb25TYW1wbGVyKCk7XHJcblx0XHRcdFx0c2FtcGxlci5mb3JtR2x0Zih0aGlzLCBnbHRmU2FtcGxlcik7XHJcblx0XHRcdFx0cmV0dXJuIHNhbXBsZXI7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRjb25zdCBjaGFubmVscyA9IGdsdGZBbmltYXRpb24/LmNoYW5uZWxzPy5tYXAoKGdsdGZDaGFubmVsKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgYW5pbWF0aW9uQ2hhbm5lbCA9IG5ldyBBbmltYXRpb25DaGFubmVsKCk7XHJcblx0XHRcdFx0YW5pbWF0aW9uQ2hhbm5lbC5zYW1wbGVyID0gc2FtcGxlcnNbZ2x0ZkNoYW5uZWwuc2FtcGxlcl07XHJcblx0XHRcdFx0YW5pbWF0aW9uQ2hhbm5lbC50YXJnZXQgPSBuZXcgQW5pbWF0aW9uQ2hhbm5lbFRhcmdldChcclxuXHRcdFx0XHRcdHRoaXMubm9kZXNbZ2x0ZkNoYW5uZWwudGFyZ2V0Lm5vZGVdLFxyXG5cdFx0XHRcdFx0Z2x0ZkNoYW5uZWwudGFyZ2V0LnBhdGhcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdHJldHVybiBhbmltYXRpb25DaGFubmVsO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0Y29uc3QgYW5pbWF0aW9uID0gbmV3IEFuaW1hdGlvbihpbmRleC50b1N0cmluZygpLCBzYW1wbGVycywgY2hhbm5lbHMpO1xyXG5cdFx0XHRyZXR1cm4gYW5pbWF0aW9uO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgcGFyc2VNZXNocygpIHtcclxuXHRcdHRoaXMubWVzaGVzID0gdGhpcz8uanNvbj8ubWVzaGVzPy5tYXA/LigoZ2x0Zm1lc2gpID0+IHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRuYW1lOiBnbHRmbWVzaC5uYW1lLFxyXG5cdFx0XHRcdHByaW1pdGl2ZXM6IGdsdGZtZXNoPy5wcmltaXRpdmVzPy5tYXA/LigocHJpbWl0aXZlKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBtYXRlcmlhbCA9XHJcblx0XHRcdFx0XHRcdHByaW1pdGl2ZS5tYXRlcmlhbCAhPT0gdW5kZWZpbmVkXHJcblx0XHRcdFx0XHRcdFx0PyB0aGlzLm1hdGVyaWFsc1twcmltaXRpdmUubWF0ZXJpYWxdXHJcblx0XHRcdFx0XHRcdFx0OiB7IHBick1ldGFsbGljUm91Z2huZXNzOiB7fSB9O1xyXG5cdFx0XHRcdFx0Y29uc3QgZ2VvID0gdGhpcy5jcmVhdGVHZW9tZXRyeShwcmltaXRpdmUsIG1hdGVyaWFsKTtcclxuXHRcdFx0XHRcdGNvbnN0IG1lc2ggPSBuZXcgTWVzaChnZW8sIG1hdGVyaWFsKTtcclxuXHRcdFx0XHRcdG1lc2gubmFtZSA9IGdsdGZtZXNoLm5hbWU7XHJcblx0XHRcdFx0XHRyZXR1cm4gbWVzaDtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9O1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgZ2V0U2FtcGxlcihzYW1wbGVySnNvbjogYW55KSB7XHJcblx0XHRyZXR1cm4gbmV3IFNhbXBsZXIoe1xyXG5cdFx0XHRtYWdGaWx0ZXI6IGdsdGZFbnVtW3NhbXBsZXJKc29uLm1hZ0ZpbHRlciB8fCA5NzI5XSBhcyBHUFVGaWx0ZXJNb2RlLFxyXG5cdFx0XHRtaW5GaWx0ZXI6IGdsdGZFbnVtW3NhbXBsZXJKc29uLm1pbkZpbHRlciB8fCA5NzI5XSBhcyBHUFVGaWx0ZXJNb2RlLFxyXG5cdFx0XHRhZGRyZXNzTW9kZVU6IGdsdGZFbnVtW3NhbXBsZXJKc29uLndyYXBTIHx8IDEwNDk3XSBhcyBHUFVBZGRyZXNzTW9kZSxcclxuXHRcdFx0YWRkcmVzc01vZGVWOiBnbHRmRW51bVtzYW1wbGVySnNvbi53cmFwVCB8fCAxMDQ5N10gYXMgR1BVQWRkcmVzc01vZGVcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRwcml2YXRlIGdldEJ1ZmZlclZpZXcoYWNjZXNzb3I6IGFueSwgbjogbnVtYmVyKSB7XHJcblx0XHRjb25zdCBidWZmZXJWaWV3ID0gdGhpcy5idWZmZXJWaWV3c1thY2Nlc3Nvci5idWZmZXJWaWV3XTtcclxuXHRcdGNvbnN0IG9mZnNldCA9IChidWZmZXJWaWV3LmJ5dGVPZmZzZXQgfHwgMCkgKyAoYWNjZXNzb3IuYnl0ZU9mZnNldCB8fCAwKTtcclxuXHRcdGNvbnN0IHN0cmlkZSA9IE1hdGgubWF4KGJ1ZmZlclZpZXcuYnl0ZVN0cmlkZSAvIDQgfHwgMCwgbik7XHJcblx0XHRsZXQgYXJyYXkgPSBuZXdUeXBlZEFycmF5KFxyXG5cdFx0XHRhY2Nlc3Nvci5jb21wb25lbnRUeXBlLFxyXG5cdFx0XHR0aGlzLmJ1ZmZlcnNbYnVmZmVyVmlldy5idWZmZXJdLFxyXG5cdFx0XHRidWZmZXJWaWV3LmJ1ZmZlciA9PT0gMCA/IG9mZnNldCArIHRoaXMuZ2xiT2Zmc2V0IDogb2Zmc2V0LFxyXG5cdFx0XHQoYWNjZXNzb3IuY291bnQgLSAxKSAqIHN0cmlkZSArIG5cclxuXHRcdCk7XHJcblx0XHRpZiAoc3RyaWRlID4gbikge1xyXG5cdFx0XHRjb25zdCBUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciBhcyB7XHJcblx0XHRcdFx0bmV3ICguLi5hcmdzOiBhbnkpOiBUeXBlZEFycmF5O1xyXG5cdFx0XHR9O1xyXG5cdFx0XHRjb25zdCBzdHJpZGVkID0gbmV3IFR5cGVkQXJyYXlDb25zdHJ1Y3RvcihhY2Nlc3Nvci5jb3VudCAqIG4pO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaiA9IDA7IGkgPCBzdHJpZGVkLmxlbmd0aDsgaSArPSBuLCBqICs9IHN0cmlkZSkge1xyXG5cdFx0XHRcdGZvciAobGV0IGsgPSAwOyBrIDwgbjsgayArPSAxKSB7XHJcblx0XHRcdFx0XHRzdHJpZGVkW2kgKyBrXSA9IGFycmF5W2ogKyBrXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0YXJyYXkgPSBzdHJpZGVkO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGFycmF5O1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZUdlb21ldHJ5KHByaW1pdGl2ZSwgbWF0ZXJpYWwpIHtcclxuXHRcdGxldCBpbmRpY2VzID0gbnVsbDtcclxuXHRcdGxldCBhY2Nlc3NvciA9IG51bGw7XHJcblx0XHRjb25zdCBkZWZpbmVzOiB7IFtwcm9wOiBzdHJpbmddOiBib29sZWFuIHwgbnVtYmVyIH0gPSB7IEhBU19OT1JNQUw6IHRydWUgfTtcclxuXHRcdGxldCB2ZXJ0ZXhDb3VudDtcclxuXHRcdGFjY2Vzc29yID0gdGhpcy5nZXRBY2Nlc3NvcihwcmltaXRpdmUuYXR0cmlidXRlcy5QT1NJVElPTik7XHJcblx0XHRjb25zdCBwb3NpdGlvbnMgPSBhY2Nlc3Nvci5nZXRBcnJheSgpO1xyXG5cdFx0dmVydGV4Q291bnQgPSBhY2Nlc3Nvci5jb3VudDtcclxuXHRcdC8vIGNvbnN0IHsgbWF4LCBtaW4gfSA9IGFjY2Vzc29yO1xyXG5cdFx0Ly8gY29uc3QgYm91bmRpbmdCb3ggPSB7IG1heCwgbWluIH07XHJcblx0XHRpZiAocHJpbWl0aXZlLmluZGljZXMgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRhY2Nlc3NvciA9IHRoaXMuZ2V0QWNjZXNzb3IocHJpbWl0aXZlLmluZGljZXMpO1xyXG5cdFx0XHRpbmRpY2VzID0gdG9JbmRpY2VzKGFjY2Vzc29yLmdldEFycmF5KCkpO1xyXG5cdFx0XHR2ZXJ0ZXhDb3VudCA9IGFjY2Vzc29yLmNvdW50O1xyXG5cdFx0fVxyXG5cdFx0bGV0IG5vcm1hbHM7XHJcblxyXG5cdFx0aWYgKHByaW1pdGl2ZS5hdHRyaWJ1dGVzLk5PUk1BTCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGFjY2Vzc29yID0gdGhpcy5nZXRBY2Nlc3NvcihwcmltaXRpdmUuYXR0cmlidXRlcy5OT1JNQUwpO1xyXG5cdFx0XHRub3JtYWxzID0gYWNjZXNzb3IuZ2V0QXJyYXkoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG5vcm1hbHMgPSBnZW5lcmF0ZU5vcm1hbHMoaW5kaWNlcywgcG9zaXRpb25zKTtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgdXZzID0gbnVsbDtcclxuXHRcdGlmIChwcmltaXRpdmUuYXR0cmlidXRlcy5URVhDT09SRF8wICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0YWNjZXNzb3IgPSB0aGlzLmdldEFjY2Vzc29yKHByaW1pdGl2ZS5hdHRyaWJ1dGVzLlRFWENPT1JEXzApO1xyXG5cdFx0XHR1dnMgPSBhY2Nlc3Nvci5nZXRBcnJheSgpO1xyXG5cdFx0XHRkZWZpbmVzLkhBU19VViA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRsZXQgdXYxcyA9IG51bGw7XHJcblx0XHRpZiAocHJpbWl0aXZlLmF0dHJpYnV0ZXMuVEVYQ09PUkRfMSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGFjY2Vzc29yID0gdGhpcy5nZXRBY2Nlc3NvcihwcmltaXRpdmUuYXR0cmlidXRlcy5URVhDT09SRF8xKTtcclxuXHRcdFx0dXYxcyA9IGFjY2Vzc29yLmdldEFycmF5KCk7XHJcblx0XHRcdGRlZmluZXMuSEFTX1VWMSA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IHRhbmdlbnRzID0gbnVsbDtcclxuXHRcdGlmIChwcmltaXRpdmUuYXR0cmlidXRlcy5UQU5HRU5UICE9PSB1bmRlZmluZWQgJiYgcHJpbWl0aXZlLmF0dHJpYnV0ZXMuTk9STUFMICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0YWNjZXNzb3IgPSB0aGlzLmdldEFjY2Vzc29yKHByaW1pdGl2ZS5hdHRyaWJ1dGVzLlRBTkdFTlQpO1xyXG5cdFx0XHR0YW5nZW50cyA9IGFjY2Vzc29yLmdldEFycmF5KCk7XHJcblx0XHRcdC8vIGRlZmluZXMuSEFTX1RBTkdFTlQgPSB0cnVlO1xyXG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5ub3JtYWxUZXh0dXJlKSB7XHJcblx0XHRcdC8vIHRhbmdlbnRzID0gZ2VuZXJhdGVUYW5nZW50cyhpbmRpY2VzLCBwb3NpdGlvbnMsIG5vcm1hbHMsIHV2cyEpO1xyXG5cdFx0fVxyXG5cdFx0bGV0IGNvbG9ycyA9IG51bGw7XHJcblx0XHRpZiAocHJpbWl0aXZlLmF0dHJpYnV0ZXMuQ09MT1JfMCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbG9ycyA9IHRoaXMuYWNjZXNzb3JzW3ByaW1pdGl2ZS5hdHRyaWJ1dGVzLkNPTE9SXzBdO1xyXG5cdFx0XHRkZWZpbmVzLkhBU19DT0xPUiA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRsZXQgam9pbnRzID0gbnVsbDtcclxuXHRcdGlmIChwcmltaXRpdmUuYXR0cmlidXRlcy5KT0lOVFNfMCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGFjY2Vzc29yID0gdGhpcy5nZXRBY2Nlc3NvcihwcmltaXRpdmUuYXR0cmlidXRlcy5KT0lOVFNfMCk7XHJcblx0XHRcdGpvaW50cyA9IGFjY2Vzc29yLmdldEFycmF5KCk7XHJcblx0XHRcdGRlZmluZXMuSEFTX1NLSU4gPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHdlaWdodHMgPSBudWxsO1xyXG5cdFx0aWYgKHByaW1pdGl2ZS5hdHRyaWJ1dGVzLldFSUdIVFNfMCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGFjY2Vzc29yID0gdGhpcy5nZXRBY2Nlc3NvcihwcmltaXRpdmUuYXR0cmlidXRlcy5XRUlHSFRTXzApO1xyXG5cdFx0XHR3ZWlnaHRzID0gYWNjZXNzb3IuZ2V0QXJyYXkoKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGdlbyA9IG5ldyBHZW9tZXRyeSh7IHR5cGU6IFwicGJyR2VvbXRyeVwiIH0pO1xyXG5cdFx0aWYgKGluZGljZXMpIGdlby5zZXRJbmRpY2UoQXJyYXkuZnJvbShpbmRpY2VzKSk7XHJcblx0XHRpZiAocG9zaXRpb25zKSBnZW8uc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwicG9zaXRpb25cIiwgQXJyYXkuZnJvbShwb3NpdGlvbnMpLCAzKSk7XHJcblx0XHRpZiAobm9ybWFscykgZ2VvLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcIm5vcm1hbFwiLCBBcnJheS5mcm9tKG5vcm1hbHMpLCAzKSk7XHJcblx0XHRpZiAoY29sb3JzKSBnZW8uc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwiY29sb3JcIiwgQXJyYXkuZnJvbShjb2xvcnMpLCAzKSk7XHJcblx0XHRpZiAodXZzKSBnZW8uc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwidXZcIiwgQXJyYXkuZnJvbSh1dnMpLCAyKSk7XHJcblx0XHRpZiAoam9pbnRzKSBnZW8uc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwiam9pbnQwXCIsIEFycmF5LmZyb20oam9pbnRzKSwgNCkpO1xyXG5cdFx0aWYgKHdlaWdodHMpIGdlby5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJ3ZWlnaHQwXCIsIEFycmF5LmZyb20od2VpZ2h0cyksIDQpKTtcclxuXHRcdGdlby5kZWZpbmVzID0gZGVmaW5lcztcclxuXHRcdGdlby5jb21wdXRlQm91bmRpbmdTcGhlcmUoQXJyYXkuZnJvbShwb3NpdGlvbnMpKTtcclxuXHRcdGdlby5jb3VudCA9IHZlcnRleENvdW50O1xyXG5cdFx0cmV0dXJuIGdlbztcclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVhdGVUZXh0dXJlKHNvdXJjZTogbnVtYmVyKSB7XHJcblx0XHRyZXR1cm4gbmV3IFRleHR1cmUoe1xyXG5cdFx0XHRzaXplOiB7XHJcblx0XHRcdFx0d2lkdGg6IHRoaXMuaW1hZ2VzW3NvdXJjZV0ud2lkdGgsXHJcblx0XHRcdFx0aGVpZ2h0OiB0aGlzLmltYWdlc1tzb3VyY2VdLmhlaWdodCxcclxuXHRcdFx0XHRkZXB0aDogMVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0c291cmNlOiB0aGlzLmltYWdlc1tzb3VyY2VdXHJcblx0XHRcdH0sXHJcblx0XHRcdGZvcm1hdDogXCJyZ2JhOHVub3JtXCIsXHJcblx0XHRcdHVzYWdlOiBHUFVUZXh0dXJlVXNhZ2UuVEVYVFVSRV9CSU5ESU5HIHwgR1BVVGV4dHVyZVVzYWdlLkNPUFlfRFNUIHwgR1BVVGV4dHVyZVVzYWdlLlJFTkRFUl9BVFRBQ0hNRU5UXHJcblx0XHR9KTtcclxuXHR9XHJcblx0cHJpdmF0ZSBhc3luYyBsb2FkSW1hZ2VzKCkge1xyXG5cdFx0Y29uc3QgaW1hZ2VzOiBBcnJheTxJbWFnZUJpdG1hcD4gPSBbXTtcclxuXHRcdGxldCBsb2FkRXh0ZXJuYWxJbWFnZXM6IFByb21pc2U8YW55PiA9IFByb21pc2UucmVzb2x2ZSgpO1xyXG5cdFx0aWYgKHRoaXMuanNvbi5pbWFnZXMpIHtcclxuXHRcdFx0bG9hZEV4dGVybmFsSW1hZ2VzID0gUHJvbWlzZS5hbGwoXHJcblx0XHRcdFx0dGhpcy5qc29uLmltYWdlcy5tYXAoYXN5bmMgKGltYWdlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuXHRcdFx0XHRcdGlmIChpbWFnZS51cmkpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgaW1hZ2VVcmwgPSBpbWFnZS51cmkuc2xpY2UoMCwgNSkgPT09IFwiZGF0YTpcIiA/IGltYWdlLnVyaSA6IGAke3RoaXMucm9vdFVybH0vJHtpbWFnZS51cml9YDtcclxuXHRcdFx0XHRcdFx0aW1hZ2VzW2luZGV4XSA9IGF3YWl0IGZldGNoKGltYWdlVXJsKVxyXG5cdFx0XHRcdFx0XHRcdC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYmxvYigpKVxyXG5cdFx0XHRcdFx0XHRcdC50aGVuKChibG9iKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRlSW1hZ2VCaXRtYXAoYmxvYiwge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xvclNwYWNlQ29udmVyc2lvbjogXCJub25lXCJcclxuXHRcdFx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdFx0bGV0IGxvYWRJbnRlcm5hbEltYWdlczogUHJvbWlzZTxhbnk+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XHJcblx0XHRpZiAodGhpcy5qc29uLmltYWdlcykge1xyXG5cdFx0XHRsb2FkSW50ZXJuYWxJbWFnZXMgPSBQcm9taXNlLmFsbChcclxuXHRcdFx0XHR0aGlzLmpzb24uaW1hZ2VzLm1hcChhc3luYyAoaW1hZ2U6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGltYWdlLmJ1ZmZlclZpZXcgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCB7IGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCB9ID0gdGhpcy5qc29uLmJ1ZmZlclZpZXdzW2ltYWdlLmJ1ZmZlclZpZXddO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBhcnJheSA9IG5ldyBVaW50OEFycmF5KFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuYnVmZmVyc1tidWZmZXJdLFxyXG5cdFx0XHRcdFx0XHRcdGJ1ZmZlciA9PT0gMCA/IGJ5dGVPZmZzZXQgKyB0aGlzLmdsYk9mZnNldCA6IGJ5dGVPZmZzZXQsXHJcblx0XHRcdFx0XHRcdFx0Ynl0ZUxlbmd0aFxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRsZXQgdHlwZTtcclxuXHRcdFx0XHRcdFx0aWYgKGltYWdlLm1pbWVUeXBlKSB7XHJcblx0XHRcdFx0XHRcdFx0dHlwZSA9IGltYWdlLm1pbWVUeXBlO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHR5cGUgPSBhcnJheVswXSA9PT0gMHhmZiA/IFwiaW1hZ2UvanBlZ1wiIDogXCJpbWFnZS9wbmdcIjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjb25zdCBibG9iID0gbmV3IEJsb2IoW2FycmF5XSwgeyB0eXBlIH0pO1xyXG5cdFx0XHRcdFx0XHRpbWFnZXNbaW5kZXhdID0gYXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAoYmxvYiwge1xyXG5cdFx0XHRcdFx0XHRcdGNvbG9yU3BhY2VDb252ZXJzaW9uOiBcIm5vbmVcIlxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGF3YWl0IFByb21pc2UuYWxsKFtsb2FkRXh0ZXJuYWxJbWFnZXMsIGxvYWRJbnRlcm5hbEltYWdlc10pO1xyXG5cdFx0cmV0dXJuIGltYWdlcztcclxuXHR9XHJcblx0cHJpdmF0ZSBhc3luYyBsb2FkQnVmZmVzKCkge1xyXG5cdFx0Y29uc3QgYnVmZmVyczogQXJyYXk8QXJyYXlCdWZmZXI+ID0gW107XHJcblx0XHRhd2FpdCBQcm9taXNlLmFsbChcclxuXHRcdFx0dGhpcy5qc29uLmJ1ZmZlcnMubWFwKChidWZmZXI6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG5cdFx0XHRcdGlmICghYnVmZmVyLnVyaSkge1xyXG5cdFx0XHRcdFx0aWYgKGluZGV4ICE9PSAwKSB7XHJcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImJ1ZmZlciB1cmkgdW5kZWZpbmVkXCIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnVmZmVyc1tpbmRleF0gPSB0aGlzLmdsYkJpbiE7XHJcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGJ1ZmZlclVybCA9IGJ1ZmZlci51cmkuc2xpY2UoMCwgNSkgPT09IFwiZGF0YTpcIiA/IGJ1ZmZlci51cmkgOiBgJHt0aGlzLnJvb3RVcmx9LyR7YnVmZmVyLnVyaX1gO1xyXG5cdFx0XHRcdHJldHVybiBmZXRjaChidWZmZXJVcmwpXHJcblx0XHRcdFx0XHQudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpXHJcblx0XHRcdFx0XHQudGhlbigoYXJyYXlCdWZmZXI6IEFycmF5QnVmZmVyKSA9PiB7XHJcblx0XHRcdFx0XHRcdGJ1ZmZlcnNbaW5kZXhdID0gYXJyYXlCdWZmZXI7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblx0XHRyZXR1cm4gYnVmZmVycztcclxuXHR9XHJcblx0cHJpdmF0ZSBwYXJzZU5vZGVzKCkge1xyXG5cdFx0dGhpcy5ub2RlcyA9IHRoaXM/Lmpzb24/Lm5vZGVzPy5tYXAoKGdsdGZOb2RlKSA9PiB7XHJcblx0XHRcdGNvbnN0IG5vZGUgPSBuZXcgTm9kZSgpO1xyXG5cdFx0XHR0aGlzLnBhcnNlTm9kZVRSUyhub2RlLCBnbHRmTm9kZSk7XHJcblx0XHRcdGlmIChnbHRmTm9kZS5uYW1lKSBub2RlLm5hbWUgPSBnbHRmTm9kZS5uYW1lO1xyXG5cdFx0XHRpZiAoZ2x0Zk5vZGUubWVzaCAhPSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRsZXQgZ2x0ZlNraW4gPSB1bmRlZmluZWQsXHJcblx0XHRcdFx0XHRpc1NraW5NZXNoID0gZmFsc2U7XHJcblx0XHRcdFx0aWYgKGdsdGZOb2RlLnNraW4gIT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRnbHRmU2tpbiA9IHRoaXMuanNvbi5za2luc1tnbHRmTm9kZS5za2luXTtcclxuXHRcdFx0XHRcdGlzU2tpbk1lc2ggPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLm1lc2hlc1tnbHRmTm9kZS5tZXNoXS5wcmltaXRpdmVzLmZvckVhY2goKHByaW1pdGl2ZTogTWVzaCwgaW5kZXg6IG51bWJlciwgc291cmNlOiBBcnJheTxNZXNoPikgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgdGVtcFByaW1pdGl2ZSA9XHJcblx0XHRcdFx0XHRcdGlzU2tpbk1lc2ggJiYgcHJpbWl0aXZlLnR5cGUgPT0gUmVuZGVyT2JqZWN0VHlwZS5NZXNoXHJcblx0XHRcdFx0XHRcdFx0PyBuZXcgU0tpbk1lc2gocHJpbWl0aXZlLmdlb21ldHJ5LCBwcmltaXRpdmUubWF0ZXJpYWwpXHJcblx0XHRcdFx0XHRcdFx0OiBwcmltaXRpdmU7XHJcblx0XHRcdFx0XHRpZiAoaXNTa2luTWVzaCAmJiBwcmltaXRpdmUudHlwZSA9PSBSZW5kZXJPYmplY3RUeXBlLk1lc2gpIHtcclxuXHRcdFx0XHRcdFx0c291cmNlW2luZGV4XSA9IHRlbXBQcmltaXRpdmU7XHJcblx0XHRcdFx0XHRcdHRlbXBQcmltaXRpdmUuc2V0U2tpbkRhdGEoe1xyXG5cdFx0XHRcdFx0XHRcdGludmVyc2VCaW5kTWF0cmljZXM6IHRoaXMuZ2V0QWNjZXNzb3IoZ2x0ZlNraW4uaW52ZXJzZUJpbmRNYXRyaWNlcykuZ2V0TWF0NEFycmF5KCksXHJcblx0XHRcdFx0XHRcdFx0am9pbnRzOiBnbHRmU2tpbi5qb2ludHNcclxuXHRcdFx0XHRcdFx0XHQvLyBuYW1lOiBnbHRmU2tpbi5uYW1lLFxyXG5cdFx0XHRcdFx0XHRcdC8vIHNrZWxldG9uOiBnbHRmU2tpbi5za2VsZXRvblxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdG5vZGUuYWRkKHRlbXBQcmltaXRpdmUpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBub2RlO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgcGFyc2VOb2RlVFJTKG5vZGU6IE5vZGUsIGdsdGZOb2RlOiBHTFRGTm9kZVBhcm1zKTogTm9kZSB7XHJcblx0XHRsZXQgeyBtYXRyaXgsIHJvdGF0aW9uLCB0cmFuc2xhdGlvbiwgc2NhbGUgfSA9IGdsdGZOb2RlO1xyXG5cdFx0aWYgKG1hdHJpeCkge1xyXG5cdFx0XHRjb25zdCB0ZW1wTWF0cml4NCA9IG5ldyBNYXRyaXg0KCksXHJcblx0XHRcdFx0dGVtcFNjYWxlID0gbmV3IFZlY3RvcjMoKSxcclxuXHRcdFx0XHR0ZW1wVHJhbnNsYXRpb24gPSBuZXcgVmVjdG9yMygpLFxyXG5cdFx0XHRcdHRlbXBSb3RhdGlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7XHJcblx0XHRcdE1hdHJpeDQuZnJvbUNvbHVtbk1ham9yQXJyYXkobWF0cml4LCB0ZW1wTWF0cml4NCk7XHJcblx0XHRcdE1hdHJpeDQuZ2V0U2NhbGUodGVtcE1hdHJpeDQsIHRlbXBTY2FsZSk7XHJcblx0XHRcdE1hdHJpeDQuZ2V0VHJhbnNsYXRpb24odGVtcE1hdHJpeDQsIHRlbXBUcmFuc2xhdGlvbik7XHJcblx0XHRcdE1hdHJpeDQuZ2V0Um90YXRpb24odGVtcE1hdHJpeDQsIHRlbXBSb3RhdGlvbik7XHJcblx0XHRcdHJvdGF0aW9uID0gdGVtcFJvdGF0aW9uLnRvQXJyYXkoKTtcclxuXHRcdFx0dHJhbnNsYXRpb24gPSB0ZW1wVHJhbnNsYXRpb24udG9BcnJheSgpO1xyXG5cdFx0XHRzY2FsZSA9IHRlbXBTY2FsZS50b0FycmF5KCk7XHJcblx0XHR9XHJcblx0XHRpZiAocm90YXRpb24pIG5vZGUucXVhdGVybmlvbi5zZXQocm90YXRpb25bMF0sIHJvdGF0aW9uWzFdLCByb3RhdGlvblsyXSwgcm90YXRpb25bM10pO1xyXG5cdFx0aWYgKHRyYW5zbGF0aW9uKSBub2RlLnBvc2l0aW9uLnNldCh0cmFuc2xhdGlvblswXSwgdHJhbnNsYXRpb25bMV0sIHRyYW5zbGF0aW9uWzJdKTtcclxuXHRcdGlmIChzY2FsZSkgbm9kZS5zY2FsZS5zZXQoc2NhbGVbMF0sIHNjYWxlWzFdLCBzY2FsZVsyXSk7XHJcblx0XHRyZXR1cm4gbm9kZTtcclxuXHR9XHJcblx0cHJpdmF0ZSBub3JtYWxpemVEYXRhKCkge1xyXG5cdFx0dGhpcz8ubm9kZXM/Lm1hcD8uKChub2RlOiBOb2RlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHR0aGlzLmpzb24/Lm5vZGVzW2luZGV4XT8uY2hpbGRyZW4/Lm1hcCgobm9kZUlkOiBudW1iZXIpID0+IHtcclxuXHRcdFx0XHRjb25zdCBjaGlsZE5vZGUgPSB0aGlzLm5vZGVzW25vZGVJZF07XHJcblx0XHRcdFx0bm9kZS5hZGQoY2hpbGROb2RlKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHRcdHRoaXMubWVzaGVzLm1hcCgobWVzaCkgPT4ge1xyXG5cdFx0XHRtZXNoLnByaW1pdGl2ZXMubWFwKChwcmltaXRpdmUpID0+IHtcclxuXHRcdFx0XHRpZiAocHJpbWl0aXZlLnR5cGUgPT0gUmVuZGVyT2JqZWN0VHlwZS5Ta2luTWVzaClcclxuXHRcdFx0XHRcdHByaW1pdGl2ZS5qb2ludHMgPSBwcmltaXRpdmUuam9pbnRzLm1hcCgoam9pbnQpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMubm9kZXNbPG51bWJlcj5qb2ludF07XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRHTFRGKHVybDogc3RyaW5nKSB7XHJcblx0bGV0IGdsdGY7XHJcblx0Y29uc3QgZXh0ID0gdXJsLnNwbGl0KFwiLlwiKS5wb3AoKTtcclxuXHRjb25zdCByb290VXJsID0gdXJsLnN1YnN0cmluZygwLCB1cmwubGFzdEluZGV4T2YoXCIvXCIpKTtcclxuXHRpZiAoZXh0ID09PSBcImdsdGZcIikge1xyXG5cdFx0Y29uc3QganNvbiA9IGF3YWl0IGZldGNoKHVybCkudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSk7XHJcblx0XHRnbHRmID0gbmV3IEdMVEYoanNvbiwgcm9vdFVybCwgMCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGNvbnN0IGdsYiA9IGF3YWl0IGZldGNoKHVybCkudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpO1xyXG5cdFx0Y29uc3QganNvbkxlbmd0aCA9IG5ldyBVaW50MzJBcnJheShnbGIsIDEyLCAxKVswXTtcclxuXHRcdGNvbnN0IGpzb25DaHVuayA9IG5ldyBVaW50OEFycmF5KGdsYiwgMjAsIGpzb25MZW5ndGgpO1xyXG5cdFx0Y29uc3QganNvbiA9IEpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKFwidXRmLThcIikuZGVjb2RlKGpzb25DaHVuaykpO1xyXG5cdFx0Z2x0ZiA9IG5ldyBHTFRGKGpzb24sIHJvb3RVcmwsIDI4ICsganNvbkxlbmd0aCwgZ2xiKTtcclxuXHR9XHJcblx0YXdhaXQgZ2x0Zi5wYXJzZURhdGEoKTtcclxuXHRyZXR1cm4gZ2x0ZjtcclxufVxyXG50eXBlIEdMVEZOb2RlUGFybXMgPSB7XHJcblx0Y2hpbGRyZW4/OiBudW1iZXJbXTtcclxuXHRtYXRyaXg/OiBudW1iZXJbXTtcclxuXHRzY2FsZT86IG51bWJlcltdO1xyXG5cdHJvdGF0aW9uPzogbnVtYmVyW107XHJcblx0dHJhbnNsYXRpb24/OiBudW1iZXJbXTtcclxufTtcclxuIiwiaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkUGJyVGV4dHVyZShicmRmLCBkaWZmdXNlLCBzcGVjdWxhcikge1xyXG5cdGlmICghYnJkZikgcmV0dXJuO1xyXG5cdGNvbnN0IGJyZGZUZXh0dXJlID0gYXdhaXQgbG9hZFRleHR1cmUoYnJkZik7XHJcblx0Y29uc3QgZGlmZnVzZVRleHR1cmUgPSBhd2FpdCBsb2FkQ3ViZVRleHR1cmUoZGlmZnVzZSk7XHJcblx0Y29uc3Qgc3BlY3VsYXJUZXh0dXJlID0gYXdhaXQgbG9hZEN1YmVUZXh0dXJlKHNwZWN1bGFyKTtcclxuXHRyZXR1cm4ge1xyXG5cdFx0YnJkZlRleHR1cmUsXHJcblx0XHRkaWZmdXNlVGV4dHVyZSxcclxuXHRcdHNwZWN1bGFyVGV4dHVyZVxyXG5cdH07XHJcbn1cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRDdWJlVGV4dHVyZSh1cmxzKSB7XHJcblx0Y29uc3QgcHJvbWlzZXMgPSB1cmxzLm1hcCgoc3JjKSA9PiB7XHJcblx0XHRjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xyXG5cdFx0aW1nLnNyYyA9IHNyYztcclxuXHRcdHJldHVybiBpbWcuZGVjb2RlKCkudGhlbigoKSA9PiBjcmVhdGVJbWFnZUJpdG1hcChpbWcpKTtcclxuXHR9KTtcclxuXHRjb25zdCBpbWFnZXMgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XHJcblx0YXdhaXQgUHJvbWlzZS5hbGwoaW1hZ2VzKTtcclxuXHRjb25zdCBkYXRhID0gaW1hZ2VzLm1hcCgoaW1hZ2UsIGkpID0+IHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHNvdXJjZTogaW1hZ2UsXHJcblx0XHRcdHdpZHRoOiBpbWFnZS53aWR0aCxcclxuXHRcdFx0aGVpZ2h0OiBpbWFnZS5oZWlnaHQsXHJcblx0XHRcdGRlcHRoOiAxLFxyXG5cdFx0XHR4OiAwLFxyXG5cdFx0XHR5OiAwLFxyXG5cdFx0XHR6OiBpXHJcblx0XHR9O1xyXG5cdH0pO1xyXG5cdHJldHVybiBuZXcgVGV4dHVyZSh7XHJcblx0XHRzaXplOiB7XHJcblx0XHRcdHdpZHRoOiBpbWFnZXNbMF0ud2lkdGgsXHJcblx0XHRcdGhlaWdodDogaW1hZ2VzWzBdLmhlaWdodCxcclxuXHRcdFx0ZGVwdGg6IDZcclxuXHRcdH0sXHJcblx0XHRmb3JtYXQ6IFwicmdiYTh1bm9ybVwiLFxyXG5cdFx0dXNhZ2U6IEdQVVRleHR1cmVVc2FnZS5URVhUVVJFX0JJTkRJTkcgfCBHUFVUZXh0dXJlVXNhZ2UuQ09QWV9EU1QgfCBHUFVUZXh0dXJlVXNhZ2UuUkVOREVSX0FUVEFDSE1FTlQsXHJcblx0XHRkYXRhLFxyXG5cdFx0dmlld0Zvcm1hdHM6IFwiY3ViZVwiLFxyXG5cdFx0bWlwTGV2ZWxDb3VudDogNixcclxuXHRcdG5lZWRNaXBNYXA6IHRydWVcclxuXHR9KTtcclxufVxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFRleHR1cmUodXJsKSB7XHJcblx0Y29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcclxuXHRpbWcuc3JjID0gdXJsO1xyXG5cdGF3YWl0IGltZy5kZWNvZGUoKTtcclxuXHRjb25zdCBpbWFnZUJpdG1hcCA9IGF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKGltZyk7XHJcblx0Y29uc3QgYmFzZVRleHR1cmUgPSBuZXcgVGV4dHVyZSh7XHJcblx0XHRzaXplOiB7IHdpZHRoOiBpbWFnZUJpdG1hcC53aWR0aCwgaGVpZ2h0OiBpbWFnZUJpdG1hcC5oZWlnaHQsIGRlcHRoOiAxIH0sXHJcblx0XHRkYXRhOiB7XHJcblx0XHRcdHNvdXJjZTogaW1hZ2VCaXRtYXBcclxuXHRcdH0sXHJcblx0XHRmb3JtYXQ6IFwicmdiYTh1bm9ybVwiXHJcblx0fSk7XHJcblx0cmV0dXJuIGJhc2VUZXh0dXJlO1xyXG59XHJcbiIsImltcG9ydCBHTWF0aCBmcm9tIFwiLi9NYXRoLmpzXCI7XG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi9WZWN0b3IzLmpzXCI7XG4vLyBmcm9tIHRocmVlLmpzXG5jbGFzcyBTcGhlcmljYWwge1xuXHRyYWRpdXM6IG51bWJlcjtcblx0cGhpOiBudW1iZXI7XG5cdHRoZXRhOiBudW1iZXI7XG5cblx0Y29uc3RydWN0b3IocmFkaXVzID0gMSwgcGhpID0gMCwgdGhldGEgPSAwKSB7XG5cdFx0dGhpcy5yYWRpdXMgPSByYWRpdXM7XG5cdFx0dGhpcy5waGkgPSBwaGk7IC8vIHBvbGFyIGFuZ2xlXG5cdFx0dGhpcy50aGV0YSA9IHRoZXRhOyAvLyBhemltdXRoYWwgYW5nbGVcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdHNldChyYWRpdXM6IG51bWJlciwgcGhpOiBudW1iZXIsIHRoZXRhOiBudW1iZXIpOiBTcGhlcmljYWwge1xuXHRcdHRoaXMucmFkaXVzID0gcmFkaXVzO1xuXHRcdHRoaXMucGhpID0gcGhpO1xuXHRcdHRoaXMudGhldGEgPSB0aGV0YTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGNvcHkob3RoZXI6IFNwaGVyaWNhbCk6IFNwaGVyaWNhbCB7XG5cdFx0dGhpcy5yYWRpdXMgPSBvdGhlci5yYWRpdXM7XG5cdFx0dGhpcy5waGkgPSBvdGhlci5waGk7XG5cdFx0dGhpcy50aGV0YSA9IG90aGVyLnRoZXRhO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0Ly8gcmVzdHJpY3QgcGhpIHRvIGJlIGJldHdlZW4gRVBTIGFuZCBQSS1FUFNcblx0bWFrZVNhZmUoKTogU3BoZXJpY2FsIHtcblx0XHRjb25zdCBFUFMgPSAwLjAwMDAwMTtcblx0XHR0aGlzLnBoaSA9IE1hdGgubWF4KEVQUywgTWF0aC5taW4oTWF0aC5QSSAtIEVQUywgdGhpcy5waGkpKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0RnJvbVZlY3RvcjModjogVmVjdG9yMyk6IFNwaGVyaWNhbCB7XG5cdFx0cmV0dXJuIHRoaXMuc2V0RnJvbUNhcnRlc2lhbkNvb3Jkcyh2LngsIHYueSwgdi56KTtcblx0fVxuXHRzZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIpOiBTcGhlcmljYWwge1xuXHRcdHRoaXMucmFkaXVzID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeik7XG5cblx0XHRpZiAodGhpcy5yYWRpdXMgPT09IDApIHtcblx0XHRcdHRoaXMudGhldGEgPSAwO1xuXHRcdFx0dGhpcy5waGkgPSAwO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnRoZXRhID0gTWF0aC5hdGFuMih4LCB6KTtcblx0XHRcdHRoaXMucGhpID0gTWF0aC5hY29zKEdNYXRoLmNsYW1wKHkgLyB0aGlzLnJhZGl1cywgLTEsIDEpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsb25lKCk6IFNwaGVyaWNhbCB7XG5cdFx0cmV0dXJuIG5ldyBTcGhlcmljYWwodGhpcy5yYWRpdXMsIHRoaXMucGhpLCB0aGlzLnRoZXRhKTtcblx0fVxufVxuXG5leHBvcnQgeyBTcGhlcmljYWwgfTtcbiIsImltcG9ydCB7IEV2ZW50RGlzcGF0Y2hlciB9IGZyb20gXCIuLi9jb3JlL0V2ZW50RGlzcGF0Y2hlclwiO1xyXG5pbXBvcnQgeyBRdWF0ZXJuaW9uIH0gZnJvbSBcIi4uL21hdGgvUXVhdGVybmlvblwiO1xyXG5pbXBvcnQgeyBTcGhlcmljYWwgfSBmcm9tIFwiLi4vbWF0aC9TcGhlcmljYWxcIjtcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4uL21hdGgvVmVjdG9yMlwiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XHJcbi8vZnJvbSB0aHJlZS5qc1xyXG5cclxuY29uc3QgX2NoYW5nZUV2ZW50ID0geyB0eXBlOiBcImNoYW5nZVwiIH07XHJcbmNvbnN0IF9zdGFydEV2ZW50ID0geyB0eXBlOiBcInN0YXJ0XCIgfTtcclxuY29uc3QgX2VuZEV2ZW50ID0geyB0eXBlOiBcImVuZFwiIH07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcmJpdENvbnRyb2wgZXh0ZW5kcyBFdmVudERpc3BhdGNoZXIge1xyXG4gIGRvbUVsZW1lbnQ6IGFueTtcclxuICBvYmplY3Q6IGFueTtcclxuICBlbmFibGVkOiBib29sZWFuO1xyXG4gIHRhcmdldDogYW55O1xyXG4gIG1pbkRpc3RhbmNlOiBudW1iZXI7XHJcbiAgbWF4RGlzdGFuY2U6IG51bWJlcjtcclxuICBtaW5ab29tOiBudW1iZXI7XHJcbiAgbWF4Wm9vbTogbnVtYmVyO1xyXG4gIG1pblBvbGFyQW5nbGU6IG51bWJlcjtcclxuICBtYXhQb2xhckFuZ2xlOiBudW1iZXI7XHJcbiAgbWluQXppbXV0aEFuZ2xlOiBudW1iZXI7XHJcbiAgbWF4QXppbXV0aEFuZ2xlOiBudW1iZXI7XHJcbiAgZW5hYmxlRGFtcGluZzogYm9vbGVhbjtcclxuICBkYW1waW5nRmFjdG9yOiBudW1iZXI7XHJcbiAgZW5hYmxlWm9vbTogYm9vbGVhbjtcclxuICB6b29tU3BlZWQ6IG51bWJlcjtcclxuICBlbmFibGVSb3RhdGU6IGJvb2xlYW47XHJcbiAgcm90YXRlU3BlZWQ6IG51bWJlcjtcclxuICBlbmFibGVQYW46IGJvb2xlYW47XHJcbiAgcGFuU3BlZWQ6IG51bWJlcjtcclxuICBzY3JlZW5TcGFjZVBhbm5pbmc6IGJvb2xlYW47XHJcbiAga2V5UGFuU3BlZWQ6IG51bWJlcjtcclxuICBhdXRvUm90YXRlOiBib29sZWFuO1xyXG4gIGF1dG9Sb3RhdGVTcGVlZDogbnVtYmVyO1xyXG4gIGtleXM6IHsgTEVGVDogc3RyaW5nOyBVUDogc3RyaW5nOyBSSUdIVDogc3RyaW5nOyBCT1RUT006IHN0cmluZyB9O1xyXG4gIG1vdXNlQnV0dG9uczogeyBMRUZUOiBhbnk7IE1JRERMRTogYW55OyBSSUdIVDogYW55IH07XHJcbiAgdG91Y2hlczogeyBPTkU6IGFueTsgVFdPOiBhbnkgfTtcclxuICB0YXJnZXQwOiBhbnk7XHJcbiAgcG9zaXRpb24wOiBhbnk7XHJcbiAgem9vbTA6IGFueTtcclxuICBwcml2YXRlIF9kb21FbGVtZW50S2V5RXZlbnRzOiBhbnk7XHJcbiAgc3BoZXJpY2FsOiBhbnk7XHJcbiAgb25Qb2ludGVyTW92ZTogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XHJcbiAgb25Qb2ludGVyVXA6IChldmVudDogYW55KSA9PiB2b2lkO1xyXG4gIG9uQ29udGV4dE1lbnU6IChldmVudDogYW55KSA9PiB2b2lkO1xyXG4gIG9uUG9pbnRlckRvd246IChldmVudDogYW55KSA9PiB2b2lkO1xyXG4gIG9uTW91c2VXaGVlbDogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XHJcbiAgb25LZXlEb3duOiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcclxuICBnZXRBdXRvUm90YXRpb25BbmdsZTogKCkgPT4gbnVtYmVyO1xyXG4gIHVwZGF0ZTogKCkgPT4gYm9vbGVhbjtcclxuICBjb25zdHJ1Y3RvcihvYmplY3QsIGRvbUVsZW1lbnQpIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gICAgaWYgKGRvbUVsZW1lbnQgPT09IHVuZGVmaW5lZClcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICdPcmJpdENvbnRyb2xzOiBUaGUgc2Vjb25kIHBhcmFtZXRlciBcImRvbUVsZW1lbnRcIiBpcyBub3cgbWFuZGF0b3J5LidcclxuICAgICAgKTtcclxuICAgIGlmIChkb21FbGVtZW50ID09PSBkb2N1bWVudClcclxuICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAnT3JiaXRDb250cm9sczogXCJkb2N1bWVudFwiIHNob3VsZCBub3QgYmUgdXNlZCBhcyB0aGUgdGFyZ2V0IFwiZG9tRWxlbWVudFwiLiBQbGVhc2UgdXNlIFwicmVuZGVyZXIuZG9tRWxlbWVudFwiIGluc3RlYWQuJ1xyXG4gICAgICApO1xyXG5cclxuICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0O1xyXG4gICAgdGhpcy5kb21FbGVtZW50ID0gZG9tRWxlbWVudDtcclxuICAgIHRoaXMuZG9tRWxlbWVudC5zdHlsZS50b3VjaEFjdGlvbiA9IFwibm9uZVwiOyAvLyBkaXNhYmxlIHRvdWNoIHNjcm9sbFxyXG5cclxuICAgIC8vIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHRoaXMgY29udHJvbFxyXG4gICAgdGhpcy5lbmFibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBcInRhcmdldFwiIHNldHMgdGhlIGxvY2F0aW9uIG9mIGZvY3VzLCB3aGVyZSB0aGUgb2JqZWN0IG9yYml0cyBhcm91bmRcclxuICAgIHRoaXMudGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICAvLyBIb3cgZmFyIHlvdSBjYW4gZG9sbHkgaW4gYW5kIG91dCAoIFBlcnNwZWN0aXZlQ2FtZXJhIG9ubHkgKVxyXG4gICAgdGhpcy5taW5EaXN0YW5jZSA9IDA7XHJcbiAgICB0aGlzLm1heERpc3RhbmNlID0gSW5maW5pdHk7XHJcblxyXG4gICAgLy8gSG93IGZhciB5b3UgY2FuIHpvb20gaW4gYW5kIG91dCAoIE9ydGhvZ3JhcGhpY0NhbWVyYSBvbmx5IClcclxuICAgIHRoaXMubWluWm9vbSA9IDA7XHJcbiAgICB0aGlzLm1heFpvb20gPSBJbmZpbml0eTtcclxuXHJcbiAgICAvLyBIb3cgZmFyIHlvdSBjYW4gb3JiaXQgdmVydGljYWxseSwgdXBwZXIgYW5kIGxvd2VyIGxpbWl0cy5cclxuICAgIC8vIFJhbmdlIGlzIDAgdG8gTWF0aC5QSSByYWRpYW5zLlxyXG4gICAgdGhpcy5taW5Qb2xhckFuZ2xlID0gMDsgLy8gcmFkaWFuc1xyXG4gICAgdGhpcy5tYXhQb2xhckFuZ2xlID0gTWF0aC5QSTsgLy8gcmFkaWFuc1xyXG5cclxuICAgIC8vIEhvdyBmYXIgeW91IGNhbiBvcmJpdCBob3Jpem9udGFsbHksIHVwcGVyIGFuZCBsb3dlciBsaW1pdHMuXHJcbiAgICAvLyBJZiBzZXQsIHRoZSBpbnRlcnZhbCBbIG1pbiwgbWF4IF0gbXVzdCBiZSBhIHN1Yi1pbnRlcnZhbCBvZiBbIC0gMiBQSSwgMiBQSSBdLCB3aXRoICggbWF4IC0gbWluIDwgMiBQSSApXHJcbiAgICB0aGlzLm1pbkF6aW11dGhBbmdsZSA9IC1JbmZpbml0eTsgLy8gcmFkaWFuc1xyXG4gICAgdGhpcy5tYXhBemltdXRoQW5nbGUgPSBJbmZpbml0eTsgLy8gcmFkaWFuc1xyXG5cclxuICAgIC8vIFNldCB0byB0cnVlIHRvIGVuYWJsZSBkYW1waW5nIChpbmVydGlhKVxyXG4gICAgLy8gSWYgZGFtcGluZyBpcyBlbmFibGVkLCB5b3UgbXVzdCBjYWxsIGNvbnRyb2xzLnVwZGF0ZSgpIGluIHlvdXIgYW5pbWF0aW9uIGxvb3BcclxuICAgIHRoaXMuZW5hYmxlRGFtcGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5kYW1waW5nRmFjdG9yID0gMC4wNTtcclxuXHJcbiAgICAvLyBUaGlzIG9wdGlvbiBhY3R1YWxseSBlbmFibGVzIGRvbGx5aW5nIGluIGFuZCBvdXQ7IGxlZnQgYXMgXCJ6b29tXCIgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxyXG4gICAgLy8gU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgem9vbWluZ1xyXG4gICAgdGhpcy5lbmFibGVab29tID0gdHJ1ZTtcclxuICAgIHRoaXMuem9vbVNwZWVkID0gMS4wO1xyXG5cclxuICAgIC8vIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHJvdGF0aW5nXHJcbiAgICB0aGlzLmVuYWJsZVJvdGF0ZSA9IHRydWU7XHJcbiAgICB0aGlzLnJvdGF0ZVNwZWVkID0gMS4wO1xyXG5cclxuICAgIC8vIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHBhbm5pbmdcclxuICAgIHRoaXMuZW5hYmxlUGFuID0gdHJ1ZTtcclxuICAgIHRoaXMucGFuU3BlZWQgPSAxLjA7XHJcbiAgICB0aGlzLnNjcmVlblNwYWNlUGFubmluZyA9IGZhbHNlOyAvLyBpZiBmYWxzZSwgcGFuIG9ydGhvZ29uYWwgdG8gd29ybGQtc3BhY2UgZGlyZWN0aW9uIGNhbWVyYS51cFxyXG4gICAgdGhpcy5rZXlQYW5TcGVlZCA9IDcuMDsgLy8gcGl4ZWxzIG1vdmVkIHBlciBhcnJvdyBrZXkgcHVzaFxyXG5cclxuICAgIC8vIFNldCB0byB0cnVlIHRvIGF1dG9tYXRpY2FsbHkgcm90YXRlIGFyb3VuZCB0aGUgdGFyZ2V0XHJcbiAgICAvLyBJZiBhdXRvLXJvdGF0ZSBpcyBlbmFibGVkLCB5b3UgbXVzdCBjYWxsIGNvbnRyb2xzLnVwZGF0ZSgpIGluIHlvdXIgYW5pbWF0aW9uIGxvb3BcclxuICAgIHRoaXMuYXV0b1JvdGF0ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5hdXRvUm90YXRlU3BlZWQgPSAyLjA7IC8vIDMwIHNlY29uZHMgcGVyIG9yYml0IHdoZW4gZnBzIGlzIDYwXHJcblxyXG4gICAgLy8gVGhlIGZvdXIgYXJyb3cga2V5c1xyXG4gICAgdGhpcy5rZXlzID0ge1xyXG4gICAgICBMRUZUOiBcIkFycm93TGVmdFwiLFxyXG4gICAgICBVUDogXCJBcnJvd1VwXCIsXHJcbiAgICAgIFJJR0hUOiBcIkFycm93UmlnaHRcIixcclxuICAgICAgQk9UVE9NOiBcIkFycm93RG93blwiLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBNb3VzZSBidXR0b25zXHJcbiAgICB0aGlzLm1vdXNlQnV0dG9ucyA9IHtcclxuICAgICAgTEVGVDogTU9VU0UuUk9UQVRFLFxyXG4gICAgICBNSURETEU6IE1PVVNFLkRPTExZLFxyXG4gICAgICBSSUdIVDogTU9VU0UuUEFOLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBUb3VjaCBmaW5nZXJzXHJcbiAgICB0aGlzLnRvdWNoZXMgPSB7IE9ORTogVE9VQ0guUk9UQVRFLCBUV086IFRPVUNILkRPTExZX1BBTiB9O1xyXG5cclxuICAgIC8vIGZvciByZXNldFxyXG4gICAgdGhpcy50YXJnZXQwID0gdGhpcy50YXJnZXQuY2xvbmUoKTtcclxuICAgIHRoaXMucG9zaXRpb24wID0gdGhpcy5vYmplY3QucG9zaXRpb24uY2xvbmUoKTtcclxuICAgIHRoaXMuem9vbTAgPSB0aGlzLm9iamVjdC56b29tO1xyXG5cclxuICAgIC8vIHRoZSB0YXJnZXQgRE9NIGVsZW1lbnQgZm9yIGtleSBldmVudHNcclxuICAgIHRoaXMuX2RvbUVsZW1lbnRLZXlFdmVudHMgPSBudWxsO1xyXG5cclxuICAgIC8vXHJcbiAgICAvLyBwdWJsaWMgbWV0aG9kc1xyXG4gICAgLy9cclxuICAgIC8vIHRoaXMgbWV0aG9kIGlzIGV4cG9zZWQsIGJ1dCBwZXJoYXBzIGl0IHdvdWxkIGJlIGJldHRlciBpZiB3ZSBjYW4gbWFrZSBpdCBwcml2YXRlLi4uXHJcbiAgICBjb25zdCB0aGF0ID0gdGhpcztcclxuICAgIHRoaXMudXBkYXRlID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgY29uc3Qgb2Zmc2V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgLy8gc28gY2FtZXJhLnVwIGlzIHRoZSBvcmJpdCBheGlzXHJcbiAgICAgIGNvbnN0IHF1YXQgPSBuZXcgUXVhdGVybmlvbigpLnNldEZyb21Vbml0VmVjdG9ycyhcclxuICAgICAgICB0aGF0Lm9iamVjdC51cCxcclxuICAgICAgICBuZXcgVmVjdG9yMygwLCAxLCAwKVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBxdWF0SW52ZXJzZSA9IHF1YXQuY2xvbmUoKS5pbnZlcnQoKTtcclxuXHJcbiAgICAgIGNvbnN0IGxhc3RQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgIGNvbnN0IGxhc3RRdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTtcclxuXHJcbiAgICAgIGNvbnN0IHR3b1BJID0gMiAqIE1hdGguUEk7XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiB1cGRhdGUoKSB7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGF0Lm9iamVjdC5wb3NpdGlvbjtcclxuXHJcbiAgICAgICAgb2Zmc2V0LmNvcHkocG9zaXRpb24pLnN1YnRyYWN0KHRoYXQudGFyZ2V0KTtcclxuXHJcbiAgICAgICAgLy8gcm90YXRlIG9mZnNldCB0byBcInktYXhpcy1pcy11cFwiIHNwYWNlXHJcbiAgICAgICAgb2Zmc2V0LmFwcGx5UXVhdGVybmlvbihxdWF0KTtcclxuXHJcbiAgICAgICAgLy8gYW5nbGUgZnJvbSB6LWF4aXMgYXJvdW5kIHktYXhpc1xyXG4gICAgICAgIHNwaGVyaWNhbC5zZXRGcm9tVmVjdG9yMyhvZmZzZXQpO1xyXG5cclxuICAgICAgICBpZiAodGhhdC5hdXRvUm90YXRlICYmIHN0YXRlID09PSBTVEFURS5OT05FKSB7XHJcbiAgICAgICAgICByb3RhdGVMZWZ0KHRoYXQuZ2V0QXV0b1JvdGF0aW9uQW5nbGUoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhhdC5lbmFibGVEYW1waW5nKSB7XHJcbiAgICAgICAgICBzcGhlcmljYWwudGhldGEgKz0gc3BoZXJpY2FsRGVsdGEudGhldGEgKiB0aGF0LmRhbXBpbmdGYWN0b3I7XHJcbiAgICAgICAgICBzcGhlcmljYWwucGhpICs9IHNwaGVyaWNhbERlbHRhLnBoaSAqIHRoYXQuZGFtcGluZ0ZhY3RvcjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc3BoZXJpY2FsLnRoZXRhICs9IHNwaGVyaWNhbERlbHRhLnRoZXRhO1xyXG4gICAgICAgICAgc3BoZXJpY2FsLnBoaSArPSBzcGhlcmljYWxEZWx0YS5waGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZXN0cmljdCB0aGV0YSB0byBiZSBiZXR3ZWVuIGRlc2lyZWQgbGltaXRzXHJcblxyXG4gICAgICAgIGxldCBtaW4gPSB0aGF0Lm1pbkF6aW11dGhBbmdsZTtcclxuICAgICAgICBsZXQgbWF4ID0gdGhhdC5tYXhBemltdXRoQW5nbGU7XHJcblxyXG4gICAgICAgIGlmIChpc0Zpbml0ZShtaW4pICYmIGlzRmluaXRlKG1heCkpIHtcclxuICAgICAgICAgIGlmIChtaW4gPCAtTWF0aC5QSSkgbWluICs9IHR3b1BJO1xyXG4gICAgICAgICAgZWxzZSBpZiAobWluID4gTWF0aC5QSSkgbWluIC09IHR3b1BJO1xyXG5cclxuICAgICAgICAgIGlmIChtYXggPCAtTWF0aC5QSSkgbWF4ICs9IHR3b1BJO1xyXG4gICAgICAgICAgZWxzZSBpZiAobWF4ID4gTWF0aC5QSSkgbWF4IC09IHR3b1BJO1xyXG5cclxuICAgICAgICAgIGlmIChtaW4gPD0gbWF4KSB7XHJcbiAgICAgICAgICAgIHNwaGVyaWNhbC50aGV0YSA9IE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCBzcGhlcmljYWwudGhldGEpKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNwaGVyaWNhbC50aGV0YSA9XHJcbiAgICAgICAgICAgICAgc3BoZXJpY2FsLnRoZXRhID4gKG1pbiArIG1heCkgLyAyXHJcbiAgICAgICAgICAgICAgICA/IE1hdGgubWF4KG1pbiwgc3BoZXJpY2FsLnRoZXRhKVxyXG4gICAgICAgICAgICAgICAgOiBNYXRoLm1pbihtYXgsIHNwaGVyaWNhbC50aGV0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZXN0cmljdCBwaGkgdG8gYmUgYmV0d2VlbiBkZXNpcmVkIGxpbWl0c1xyXG4gICAgICAgIHNwaGVyaWNhbC5waGkgPSBNYXRoLm1heChcclxuICAgICAgICAgIHRoYXQubWluUG9sYXJBbmdsZSxcclxuICAgICAgICAgIE1hdGgubWluKHRoYXQubWF4UG9sYXJBbmdsZSwgc3BoZXJpY2FsLnBoaSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBzcGhlcmljYWwubWFrZVNhZmUoKTtcclxuXHJcbiAgICAgICAgc3BoZXJpY2FsLnJhZGl1cyAqPSBzY2FsZTtcclxuXHJcbiAgICAgICAgLy8gcmVzdHJpY3QgcmFkaXVzIHRvIGJlIGJldHdlZW4gZGVzaXJlZCBsaW1pdHNcclxuICAgICAgICBzcGhlcmljYWwucmFkaXVzID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICB0aGF0Lm1pbkRpc3RhbmNlLFxyXG4gICAgICAgICAgTWF0aC5taW4odGhhdC5tYXhEaXN0YW5jZSwgc3BoZXJpY2FsLnJhZGl1cylcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBtb3ZlIHRhcmdldCB0byBwYW5uZWQgbG9jYXRpb25cclxuXHJcbiAgICAgICAgaWYgKHRoYXQuZW5hYmxlRGFtcGluZyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhhdC50YXJnZXQuYWRkU2NhbGVkVmVjdG9yKHBhbk9mZnNldCwgdGhhdC5kYW1waW5nRmFjdG9yKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhhdC50YXJnZXQuYWRkKHBhbk9mZnNldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFZlY3RvcjMuZnJvbVNwaGVyaWNhbChzcGhlcmljYWwsIG9mZnNldCk7XHJcbiAgICAgICAgLy8gcm90YXRlIG9mZnNldCBiYWNrIHRvIFwiY2FtZXJhLXVwLXZlY3Rvci1pcy11cFwiIHNwYWNlXHJcbiAgICAgICAgb2Zmc2V0LmFwcGx5UXVhdGVybmlvbihxdWF0SW52ZXJzZSk7XHJcblxyXG4gICAgICAgIHBvc2l0aW9uLmNvcHkodGhhdC50YXJnZXQpLmFkZChvZmZzZXQpO1xyXG5cclxuICAgICAgICB0aGF0Lm9iamVjdC5sb29rQXQodGhhdC50YXJnZXQueCwgdGhhdC50YXJnZXQueSwgdGhhdC50YXJnZXQueik7XHJcblxyXG4gICAgICAgIGlmICh0aGF0LmVuYWJsZURhbXBpbmcgPT09IHRydWUpIHtcclxuICAgICAgICAgIHNwaGVyaWNhbERlbHRhLnRoZXRhICo9IDEgLSB0aGF0LmRhbXBpbmdGYWN0b3I7XHJcbiAgICAgICAgICBzcGhlcmljYWxEZWx0YS5waGkgKj0gMSAtIHRoYXQuZGFtcGluZ0ZhY3RvcjtcclxuXHJcbiAgICAgICAgICBWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIoXHJcbiAgICAgICAgICAgIHBhbk9mZnNldCxcclxuICAgICAgICAgICAgMSAtIHRoYXQuZGFtcGluZ0ZhY3RvcixcclxuICAgICAgICAgICAgcGFuT2Zmc2V0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgLy8gcGFuT2Zmc2V0Lm11bHRpcGx5U2NhbGFyKCAxIC0gdGhpcy5kYW1waW5nRmFjdG9yICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNwaGVyaWNhbERlbHRhLnNldCgwLCAwLCAwKTtcclxuXHJcbiAgICAgICAgICBwYW5PZmZzZXQuc2V0KDAsIDAsIDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2NhbGUgPSAxO1xyXG5cclxuICAgICAgICAvLyB1cGRhdGUgY29uZGl0aW9uIGlzOlxyXG4gICAgICAgIC8vIG1pbihjYW1lcmEgZGlzcGxhY2VtZW50LCBjYW1lcmEgcm90YXRpb24gaW4gcmFkaWFucyleMiA+IEVQU1xyXG4gICAgICAgIC8vIHVzaW5nIHNtYWxsLWFuZ2xlIGFwcHJveGltYXRpb24gY29zKHgvMikgPSAxIC0geF4yIC8gOFxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB6b29tQ2hhbmdlZCB8fFxyXG4gICAgICAgICAgVmVjdG9yMy5kaXN0YW5jZVNxdWFyZWQobGFzdFBvc2l0aW9uLCB0aGF0Lm9iamVjdC5wb3NpdGlvbikgPiBFUFMgfHxcclxuICAgICAgICAgIDggKiAoMSAtIGxhc3RRdWF0ZXJuaW9uLmRvdCh0aGF0Lm9iamVjdC5xdWF0ZXJuaW9uKSkgPiBFUFNcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoYXQuZGlzcGF0Y2hFdmVudChfY2hhbmdlRXZlbnQpO1xyXG5cclxuICAgICAgICAgIC8vbGFzdFBvc2l0aW9uLmNvcHkoIHRoaXMub2JqZWN0LnBvc2l0aW9uICk7XHJcbiAgICAgICAgICBWZWN0b3IzLmNsb25lKHRoYXQub2JqZWN0LnBvc2l0aW9uLCBsYXN0UG9zaXRpb24pO1xyXG4gICAgICAgICAgUXVhdGVybmlvbi5jbG9uZSh0aGF0Lm9iamVjdC5xdWF0ZXJuaW9uLCBsYXN0UXVhdGVybmlvbik7XHJcbiAgICAgICAgICAvL2xhc3RRdWF0ZXJuaW9uLmNvcHkoIHRoaXMub2JqZWN0LnF1YXRlcm5pb24gKTtcclxuICAgICAgICAgIHpvb21DaGFuZ2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG4gICAgdGhpcy5pbml0KCk7XHJcbiAgfVxyXG4gIGdldFBvbGFyQW5nbGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zcGhlcmljYWwucGhpO1xyXG4gIH1cclxuICBnZXRBemltdXRoYWxBbmdsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNwaGVyaWNhbC50aGV0YTtcclxuICB9XHJcblxyXG4gIGdldERpc3RhbmNlKCkge1xyXG4gICAgcmV0dXJuIFZlY3RvcjMuZGlzdGFuY2UodGhpcy5vYmplY3QucG9zaXRpb24sIHRoaXMudGFyZ2V0KTtcclxuICB9XHJcblxyXG4gIGxpc3RlblRvS2V5RXZlbnRzKGRvbUVsZW1lbnQpIHtcclxuICAgIGRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5vbktleURvd24pO1xyXG4gICAgdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cyA9IGRvbUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBzYXZlU3RhdGUoKSB7XHJcbiAgICBWZWN0b3IzLmNsb25lKHRoaXMudGFyZ2V0LCB0aGlzLnRhcmdldDApO1xyXG4gICAgLy90aGlzLnRhcmdldDAuY29weSggdGhpcy50YXJnZXQgKTtcclxuICAgIFZlY3RvcjMuY2xvbmUodGhpcy5vYmplY3QucG9zaXRpb24sIHRoaXMucG9zaXRpb24wKTtcclxuICAgIC8vdGhpcy5wb3NpdGlvbjAuY29weSggdGhpcy5vYmplY3QucG9zaXRpb24gKTtcclxuICAgIHRoaXMuem9vbTAgPSB0aGlzLm9iamVjdC56b29tO1xyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICBWZWN0b3IzLmNsb25lKHRoaXMudGFyZ2V0MCwgdGhpcy50YXJnZXQpO1xyXG4gICAgLy90aGlzLnRhcmdldC5jb3B5KCB0aGlzLnRhcmdldDAgKTtcclxuICAgIFZlY3RvcjMuY2xvbmUodGhpcy5wb3NpdGlvbjAsIHRoaXMub2JqZWN0LnBvc2l0aW9uKTtcclxuICAgIC8vdGhpcy5vYmplY3QucG9zaXRpb24uY29weSggdGhpcy5wb3NpdGlvbjAgKTtcclxuICAgIHRoaXMub2JqZWN0Lnpvb20gPSB0aGlzLnpvb20wO1xyXG5cclxuICAgIHRoaXMub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChfY2hhbmdlRXZlbnQpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgc3RhdGUgPSBTVEFURS5OT05FO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0KCkge1xyXG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XHJcbiAgICBjb25zdCBwYW5MZWZ0ID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgY29uc3QgdiA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiBwYW5MZWZ0KGRpc3RhbmNlLCBvYmplY3RNYXRyaXgpIHtcclxuICAgICAgICB2LnNldEZyb21NYXRyaXhDb2x1bW4ob2JqZWN0TWF0cml4LCAwKTsgLy8gZ2V0IFggY29sdW1uIG9mIG9iamVjdE1hdHJpeFxyXG4gICAgICAgIHYubXVsdGlwbHlCeVNjYWxhcigtZGlzdGFuY2UpO1xyXG4gICAgICAgIHBhbk9mZnNldC5hZGQodik7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG4gICAgY29uc3QgcGFuVXAgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICBjb25zdCBwYW5VcFYgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gcGFuVXAoZGlzdGFuY2UsIG9iamVjdE1hdHJpeCkge1xyXG4gICAgICAgIGlmICh0aGF0LnNjcmVlblNwYWNlUGFubmluZyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgcGFuVXBWLnNldEZyb21NYXRyaXhDb2x1bW4ob2JqZWN0TWF0cml4LCAxKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcGFuVXBWLnNldEZyb21NYXRyaXhDb2x1bW4ob2JqZWN0TWF0cml4LCAwKTtcclxuICAgICAgICAgIC8vcGFuVXBWLmNyb3NzVmVjdG9ycyggdGhpcy5vYmplY3QudXAsIHBhblVwViApO1xyXG4gICAgICAgICAgVmVjdG9yMy5jcm9zcyh0aGF0Lm9iamVjdC51cCwgcGFuVXBWLCBwYW5VcFYpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcGFuVXBWLm11bHRpcGx5QnlTY2FsYXIoZGlzdGFuY2UpO1xyXG5cclxuICAgICAgICBwYW5PZmZzZXQuYWRkKHBhblVwVik7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG4gICAgLy8gZGVsdGFYIGFuZCBkZWx0YVkgYXJlIGluIHBpeGVsczsgcmlnaHQgYW5kIGRvd24gYXJlIHBvc2l0aXZlXHJcbiAgICBjb25zdCBwYW4gPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICBjb25zdCBvZmZzZXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gcGFuKGRlbHRhWCwgZGVsdGFZKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoYXQuZG9tRWxlbWVudDtcclxuICAgICAgICBpZiAodGhhdC5vYmplY3QuaXNQZXJzcGVjdGl2ZUNhbWVyYSkge1xyXG4gICAgICAgICAgLy8gcGVyc3BlY3RpdmVcclxuICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhhdC5vYmplY3QucG9zaXRpb247XHJcbiAgICAgICAgICBvZmZzZXQuY29weShwb3NpdGlvbikuc3VidHJhY3QodGhhdC50YXJnZXQpO1xyXG4gICAgICAgICAgbGV0IHRhcmdldERpc3RhbmNlID0gb2Zmc2V0Lmxlbmd0aCgpO1xyXG5cclxuICAgICAgICAgIC8vIGhhbGYgb2YgdGhlIGZvdiBpcyBjZW50ZXIgdG8gdG9wIG9mIHNjcmVlblxyXG4gICAgICAgICAgdGFyZ2V0RGlzdGFuY2UgKj0gTWF0aC50YW4oKCh0aGF0Lm9iamVjdC5mb3YgLyAyKSAqIE1hdGguUEkpIC8gMTgwLjApO1xyXG5cclxuICAgICAgICAgIC8vIHdlIHVzZSBvbmx5IGNsaWVudEhlaWdodCBoZXJlIHNvIGFzcGVjdCByYXRpbyBkb2VzIG5vdCBkaXN0b3J0IHNwZWVkXHJcbiAgICAgICAgICBwYW5MZWZ0KFxyXG4gICAgICAgICAgICAoMiAqIGRlbHRhWCAqIHRhcmdldERpc3RhbmNlKSAvIGVsZW1lbnQuY2xpZW50SGVpZ2h0LFxyXG4gICAgICAgICAgICB0aGF0Lm9iamVjdC5tb2RlbE1hdHJpeFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHBhblVwKFxyXG4gICAgICAgICAgICAoMiAqIGRlbHRhWSAqIHRhcmdldERpc3RhbmNlKSAvIGVsZW1lbnQuY2xpZW50SGVpZ2h0LFxyXG4gICAgICAgICAgICB0aGF0Lm9iamVjdC5tb2RlbE1hdHJpeFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoYXQub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhKSB7XHJcbiAgICAgICAgICAvLyBvcnRob2dyYXBoaWNcclxuICAgICAgICAgIHBhbkxlZnQoXHJcbiAgICAgICAgICAgIChkZWx0YVggKiAodGhhdC5vYmplY3QucmlnaHQgLSB0aGF0Lm9iamVjdC5sZWZ0KSkgL1xyXG4gICAgICAgICAgICAgIHRoYXQub2JqZWN0Lnpvb20gL1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgIHRoYXQub2JqZWN0Lm1vZGVsTWF0cml4XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcGFuVXAoXHJcbiAgICAgICAgICAgIChkZWx0YVkgKiAodGhhdC5vYmplY3QudG9wIC0gdGhhdC5vYmplY3QuYm90dG9tKSkgL1xyXG4gICAgICAgICAgICAgIHRoYXQub2JqZWN0Lnpvb20gL1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQuY2xpZW50SGVpZ2h0LFxyXG4gICAgICAgICAgICB0aGF0Lm9iamVjdC5tb2RlbE1hdHJpeFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gY2FtZXJhIG5laXRoZXIgb3J0aG9ncmFwaGljIG5vciBwZXJzcGVjdGl2ZVxyXG4gICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBcIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIHBhbiBkaXNhYmxlZC5cIlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoYXQuZW5hYmxlUGFuID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuICAgIGNvbnN0IGRvbGx5T3V0ID0gKGRvbGx5U2NhbGUpID0+IHtcclxuICAgICAgaWYgKHRoaXMub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmEpIHtcclxuICAgICAgICBzY2FsZSAvPSBkb2xseVNjYWxlO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhKSB7XHJcbiAgICAgICAgdGhpcy5vYmplY3Quem9vbSA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgdGhpcy5taW5ab29tLFxyXG4gICAgICAgICAgTWF0aC5taW4odGhpcy5tYXhab29tLCB0aGlzLm9iamVjdC56b29tICogZG9sbHlTY2FsZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICAgICAgICB6b29tQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgXCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBkb2xseS96b29tIGRpc2FibGVkLlwiXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmVuYWJsZVpvb20gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBkb2xseUluID0gKGRvbGx5U2NhbGUpID0+IHtcclxuICAgICAgaWYgKHRoaXMub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmEpIHtcclxuICAgICAgICBzY2FsZSAqPSBkb2xseVNjYWxlO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhKSB7XHJcbiAgICAgICAgdGhpcy5vYmplY3Quem9vbSA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgdGhpcy5taW5ab29tLFxyXG4gICAgICAgICAgTWF0aC5taW4odGhpcy5tYXhab29tLCB0aGlzLm9iamVjdC56b29tIC8gZG9sbHlTY2FsZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICAgICAgICB6b29tQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgXCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBkb2xseS96b29tIGRpc2FibGVkLlwiXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmVuYWJsZVpvb20gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNvbnN0IGhhbmRsZU1vdXNlTW92ZVJvdGF0ZSA9IChldmVudCkgPT4ge1xyXG4gICAgICByb3RhdGVFbmQuc2V0KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xyXG5cclxuICAgICAgVmVjdG9yMi5zdWJ0cmFjdChyb3RhdGVFbmQsIHJvdGF0ZVN0YXJ0LCByb3RhdGVEZWx0YSk7XHJcbiAgICAgIFZlY3RvcjIubXVsdGlwbHlCeVNjYWxhcihyb3RhdGVEZWx0YSwgdGhpcy5yb3RhdGVTcGVlZCwgcm90YXRlRGVsdGEpO1xyXG4gICAgICAvL3JvdGF0ZURlbHRhLnN1YlZlY3RvcnMoIHJvdGF0ZUVuZCwgcm90YXRlU3RhcnQgKS5tdWx0aXBseVNjYWxhciggdGhpcy5yb3RhdGVTcGVlZCApO1xyXG5cclxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudDtcclxuXHJcbiAgICAgIHJvdGF0ZUxlZnQoKDIgKiBNYXRoLlBJICogcm90YXRlRGVsdGEueCkgLyBlbGVtZW50LmNsaWVudEhlaWdodCk7IC8vIHllcywgaGVpZ2h0XHJcblxyXG4gICAgICByb3RhdGVVcCgoMiAqIE1hdGguUEkgKiByb3RhdGVEZWx0YS55KSAvIGVsZW1lbnQuY2xpZW50SGVpZ2h0KTtcclxuXHJcbiAgICAgIFZlY3RvcjIuY2xvbmUocm90YXRlRW5kLCByb3RhdGVTdGFydCk7XHJcbiAgICAgIC8vcm90YXRlU3RhcnQuY29weSggcm90YXRlRW5kICk7XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVNb3VzZU1vdmVEb2xseSA9IChldmVudCkgPT4ge1xyXG4gICAgICBkb2xseUVuZC5zZXQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XHJcblxyXG4gICAgICBWZWN0b3IyLnN1YnRyYWN0KGRvbGx5RW5kLCBkb2xseVN0YXJ0LCBkb2xseURlbHRhKTtcclxuICAgICAgLy8gZG9sbHlEZWx0YS5zdWJWZWN0b3JzKCBkb2xseUVuZCwgZG9sbHlTdGFydCApO1xyXG5cclxuICAgICAgaWYgKGRvbGx5RGVsdGEueSA+IDApIHtcclxuICAgICAgICBkb2xseU91dChnZXRab29tU2NhbGUoKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZG9sbHlEZWx0YS55IDwgMCkge1xyXG4gICAgICAgIGRvbGx5SW4oZ2V0Wm9vbVNjYWxlKCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBWZWN0b3IyLmNsb25lKGRvbGx5RW5kLCBkb2xseVN0YXJ0KTtcclxuICAgICAgLy8gZG9sbHlTdGFydC5jb3B5KCBkb2xseUVuZCApO1xyXG5cclxuICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlTW91c2VNb3ZlUGFuID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIHBhbkVuZC5zZXQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XHJcblxyXG4gICAgICBWZWN0b3IyLnN1YnRyYWN0KHBhbkVuZCwgcGFuU3RhcnQsIHBhbkRlbHRhKTtcclxuICAgICAgVmVjdG9yMi5tdWx0aXBseUJ5U2NhbGFyKHBhbkRlbHRhLCB0aGlzLnBhblNwZWVkLCBwYW5EZWx0YSk7XHJcbiAgICAgIC8vcGFuRGVsdGEuc3ViVmVjdG9ycyggcGFuRW5kLCBwYW5TdGFydCApLm11bHRpcGx5U2NhbGFyKCB0aGlzLnBhblNwZWVkICk7XHJcblxyXG4gICAgICBwYW4ocGFuRGVsdGEueCwgcGFuRGVsdGEueSk7XHJcblxyXG4gICAgICBWZWN0b3IyLmNsb25lKHBhbkVuZCwgcGFuU3RhcnQpO1xyXG4gICAgICAvL3BhblN0YXJ0LmNvcHkoIHBhbkVuZCApO1xyXG5cclxuICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlTW91c2VXaGVlbCA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQuZGVsdGFZIDwgMCkge1xyXG4gICAgICAgIGRvbGx5SW4oZ2V0Wm9vbVNjYWxlKCkpO1xyXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmRlbHRhWSA+IDApIHtcclxuICAgICAgICBkb2xseU91dChnZXRab29tU2NhbGUoKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZXZlbnQpID0+IHtcclxuICAgICAgbGV0IG5lZWRzVXBkYXRlID0gZmFsc2U7XHJcblxyXG4gICAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcclxuICAgICAgICBjYXNlIHRoaXMua2V5cy5VUDpcclxuICAgICAgICAgIHBhbigwLCB0aGlzLmtleVBhblNwZWVkKTtcclxuICAgICAgICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIHRoaXMua2V5cy5CT1RUT006XHJcbiAgICAgICAgICBwYW4oMCwgLXRoaXMua2V5UGFuU3BlZWQpO1xyXG4gICAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgdGhpcy5rZXlzLkxFRlQ6XHJcbiAgICAgICAgICBwYW4odGhpcy5rZXlQYW5TcGVlZCwgMCk7XHJcbiAgICAgICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSB0aGlzLmtleXMuUklHSFQ6XHJcbiAgICAgICAgICBwYW4oLXRoaXMua2V5UGFuU3BlZWQsIDApO1xyXG4gICAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChuZWVkc1VwZGF0ZSkge1xyXG4gICAgICAgIC8vIHByZXZlbnQgdGhlIGJyb3dzZXIgZnJvbSBzY3JvbGxpbmcgb24gY3Vyc29yIGtleXNcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZVRvdWNoU3RhcnREb2xseVBhbiA9ICgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW5hYmxlWm9vbSkgaGFuZGxlVG91Y2hTdGFydERvbGx5KCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5lbmFibGVQYW4pIGhhbmRsZVRvdWNoU3RhcnRQYW4oKTtcclxuICAgIH07XHJcbiAgICBjb25zdCBoYW5kbGVUb3VjaFN0YXJ0RG9sbHlSb3RhdGUgPSAoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVpvb20pIGhhbmRsZVRvdWNoU3RhcnREb2xseSgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZW5hYmxlUm90YXRlKSBoYW5kbGVUb3VjaFN0YXJ0Um90YXRlKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZVRvdWNoTW92ZVJvdGF0ZSA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAocG9pbnRlcnMubGVuZ3RoID09IDEpIHtcclxuICAgICAgICByb3RhdGVFbmQuc2V0KGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRTZWNvbmRQb2ludGVyUG9zaXRpb24oZXZlbnQpO1xyXG5cclxuICAgICAgICBjb25zdCB4ID0gMC41ICogKGV2ZW50LnBhZ2VYICsgcG9zaXRpb24ueCk7XHJcbiAgICAgICAgY29uc3QgeSA9IDAuNSAqIChldmVudC5wYWdlWSArIHBvc2l0aW9uLnkpO1xyXG5cclxuICAgICAgICByb3RhdGVFbmQuc2V0KHgsIHkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBWZWN0b3IyLnN1YnRyYWN0KHJvdGF0ZUVuZCwgcm90YXRlU3RhcnQsIHJvdGF0ZURlbHRhKTtcclxuICAgICAgVmVjdG9yMi5tdWx0aXBseUJ5U2NhbGFyKHJvdGF0ZURlbHRhLCB0aGlzLnJvdGF0ZVNwZWVkLCByb3RhdGVEZWx0YSk7XHJcbiAgICAgIC8vcm90YXRlRGVsdGEuc3ViVmVjdG9ycyggcm90YXRlRW5kLCByb3RhdGVTdGFydCApLm11bHRpcGx5U2NhbGFyKCB0aGlzLnJvdGF0ZVNwZWVkICk7XHJcblxyXG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5kb21FbGVtZW50O1xyXG5cclxuICAgICAgcm90YXRlTGVmdCgoMiAqIE1hdGguUEkgKiByb3RhdGVEZWx0YS54KSAvIGVsZW1lbnQuY2xpZW50SGVpZ2h0KTsgLy8geWVzLCBoZWlnaHRcclxuXHJcbiAgICAgIHJvdGF0ZVVwKCgyICogTWF0aC5QSSAqIHJvdGF0ZURlbHRhLnkpIC8gZWxlbWVudC5jbGllbnRIZWlnaHQpO1xyXG4gICAgICBWZWN0b3IyLmNsb25lKHJvdGF0ZUVuZCwgcm90YXRlU3RhcnQpO1xyXG4gICAgICAvL3JvdGF0ZVN0YXJ0LmNvcHkoIHJvdGF0ZUVuZCApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVUb3VjaE1vdmVQYW4gPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKHBvaW50ZXJzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIHBhbkVuZC5zZXQoZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGdldFNlY29uZFBvaW50ZXJQb3NpdGlvbihldmVudCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHggPSAwLjUgKiAoZXZlbnQucGFnZVggKyBwb3NpdGlvbi54KTtcclxuICAgICAgICBjb25zdCB5ID0gMC41ICogKGV2ZW50LnBhZ2VZICsgcG9zaXRpb24ueSk7XHJcblxyXG4gICAgICAgIHBhbkVuZC5zZXQoeCwgeSk7XHJcbiAgICAgIH1cclxuICAgICAgVmVjdG9yMi5zdWJ0cmFjdChwYW5FbmQsIHBhblN0YXJ0LCBwYW5EZWx0YSk7XHJcbiAgICAgIFZlY3RvcjIubXVsdGlwbHlCeVNjYWxhcihwYW5EZWx0YSwgdGhpcy5wYW5TcGVlZCwgcGFuRGVsdGEpO1xyXG5cclxuICAgICAgLy9wYW5EZWx0YS5zdWJWZWN0b3JzKCBwYW5FbmQsIHBhblN0YXJ0ICkubXVsdGlwbHlTY2FsYXIoIHRoaXMucGFuU3BlZWQgKTtcclxuXHJcbiAgICAgIHBhbihwYW5EZWx0YS54LCBwYW5EZWx0YS55KTtcclxuXHJcbiAgICAgIFZlY3RvcjIuY2xvbmUocGFuRW5kLCBwYW5TdGFydCk7XHJcbiAgICAgIC8vIHBhblN0YXJ0LmNvcHkoIHBhbkVuZCApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVUb3VjaE1vdmVEb2xseSA9IChldmVudCkgPT4ge1xyXG4gICAgICBjb25zdCBwb3NpdGlvbiA9IGdldFNlY29uZFBvaW50ZXJQb3NpdGlvbihldmVudCk7XHJcblxyXG4gICAgICBjb25zdCBkeCA9IGV2ZW50LnBhZ2VYIC0gcG9zaXRpb24ueDtcclxuICAgICAgY29uc3QgZHkgPSBldmVudC5wYWdlWSAtIHBvc2l0aW9uLnk7XHJcblxyXG4gICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XHJcblxyXG4gICAgICBkb2xseUVuZC5zZXQoMCwgZGlzdGFuY2UpO1xyXG5cclxuICAgICAgZG9sbHlEZWx0YS5zZXQoMCwgTWF0aC5wb3coZG9sbHlFbmQueSAvIGRvbGx5U3RhcnQueSwgdGhpcy56b29tU3BlZWQpKTtcclxuXHJcbiAgICAgIGRvbGx5T3V0KGRvbGx5RGVsdGEueSk7XHJcblxyXG4gICAgICBWZWN0b3IyLmNsb25lKGRvbGx5RW5kLCBkb2xseVN0YXJ0KTtcclxuICAgICAgLy9kb2xseVN0YXJ0LmNvcHkoIGRvbGx5RW5kICk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZVRvdWNoTW92ZURvbGx5UGFuID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVpvb20pIGhhbmRsZVRvdWNoTW92ZURvbGx5KGV2ZW50KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVBhbikgaGFuZGxlVG91Y2hNb3ZlUGFuKGV2ZW50KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlVG91Y2hNb3ZlRG9sbHlSb3RhdGUgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW5hYmxlWm9vbSkgaGFuZGxlVG91Y2hNb3ZlRG9sbHkoZXZlbnQpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZW5hYmxlUm90YXRlKSBoYW5kbGVUb3VjaE1vdmVSb3RhdGUoZXZlbnQpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvL1xyXG4gICAgLy8gZXZlbnQgaGFuZGxlcnMgLSBGU006IGxpc3RlbiBmb3IgZXZlbnRzIGFuZCByZXNldCBzdGF0ZVxyXG4gICAgLy9cclxuXHJcbiAgICB0aGlzLm9uUG9pbnRlckRvd24gPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW5hYmxlZCA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgIGlmIChwb2ludGVycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLmRvbUVsZW1lbnQuc2V0UG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTtcclxuXHJcbiAgICAgICAgdGhpcy5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCB0aGlzLm9uUG9pbnRlck1vdmUpO1xyXG4gICAgICAgIHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIHRoaXMub25Qb2ludGVyVXApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL1xyXG5cclxuICAgICAgYWRkUG9pbnRlcihldmVudCk7XHJcblxyXG4gICAgICBpZiAoZXZlbnQucG9pbnRlclR5cGUgPT09IFwidG91Y2hcIikge1xyXG4gICAgICAgIG9uVG91Y2hTdGFydChldmVudCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb25Nb3VzZURvd24oZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMub25Qb2ludGVyTW92ZSA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lbmFibGVkID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgaWYgKGV2ZW50LnBvaW50ZXJUeXBlID09PSBcInRvdWNoXCIpIHtcclxuICAgICAgICBvblRvdWNoTW92ZShldmVudCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb25Nb3VzZU1vdmUoZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMub25Qb2ludGVyVXAgPSAoZXZlbnQpID0+IHtcclxuICAgICAgcmVtb3ZlUG9pbnRlcihldmVudCk7XHJcblxyXG4gICAgICBpZiAocG9pbnRlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5kb21FbGVtZW50LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpO1xyXG5cclxuICAgICAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIHRoaXMub25Qb2ludGVyTW92ZSk7XHJcbiAgICAgICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgdGhpcy5vblBvaW50ZXJVcCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChfZW5kRXZlbnQpO1xyXG5cclxuICAgICAgc3RhdGUgPSBTVEFURS5OT05FO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvbk1vdXNlRG93biA9IChldmVudCkgPT4ge1xyXG4gICAgICBsZXQgbW91c2VBY3Rpb247XHJcblxyXG4gICAgICBzd2l0Y2ggKGV2ZW50LmJ1dHRvbikge1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgIG1vdXNlQWN0aW9uID0gdGhpcy5tb3VzZUJ1dHRvbnMuTEVGVDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICBtb3VzZUFjdGlvbiA9IHRoaXMubW91c2VCdXR0b25zLk1JRERMRTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICBtb3VzZUFjdGlvbiA9IHRoaXMubW91c2VCdXR0b25zLlJJR0hUO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBtb3VzZUFjdGlvbiA9IC0xO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzd2l0Y2ggKG1vdXNlQWN0aW9uKSB7XHJcbiAgICAgICAgY2FzZSBNT1VTRS5ET0xMWTpcclxuICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb20gPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgaGFuZGxlTW91c2VEb3duRG9sbHkoZXZlbnQpO1xyXG5cclxuICAgICAgICAgIHN0YXRlID0gU1RBVEUuRE9MTFk7XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgTU9VU0UuUk9UQVRFOlxyXG4gICAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5lbmFibGVQYW4gPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBoYW5kbGVNb3VzZURvd25QYW4oZXZlbnQpO1xyXG5cclxuICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5QQU47XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5lbmFibGVSb3RhdGUgPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBoYW5kbGVNb3VzZURvd25Sb3RhdGUoZXZlbnQpO1xyXG5cclxuICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5ST1RBVEU7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgTU9VU0UuUEFOOlxyXG4gICAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5lbmFibGVSb3RhdGUgPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBoYW5kbGVNb3VzZURvd25Sb3RhdGUoZXZlbnQpO1xyXG5cclxuICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5ST1RBVEU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5lbmFibGVQYW4gPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBoYW5kbGVNb3VzZURvd25QYW4oZXZlbnQpO1xyXG5cclxuICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5QQU47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBzdGF0ZSA9IFNUQVRFLk5PTkU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzdGF0ZSAhPT0gU1RBVEUuTk9ORSkge1xyXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChfc3RhcnRFdmVudCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb25Nb3VzZU1vdmUgPSAoZXZlbnQpID0+IHtcclxuICAgICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICAgIGNhc2UgU1RBVEUuUk9UQVRFOlxyXG4gICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUm90YXRlID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgIGhhbmRsZU1vdXNlTW92ZVJvdGF0ZShldmVudCk7XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU1RBVEUuRE9MTFk6XHJcbiAgICAgICAgICBpZiAodGhpcy5lbmFibGVab29tID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgIGhhbmRsZU1vdXNlTW92ZURvbGx5KGV2ZW50KTtcclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTVEFURS5QQU46XHJcbiAgICAgICAgICBpZiAodGhpcy5lbmFibGVQYW4gPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgaGFuZGxlTW91c2VNb3ZlUGFuKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLm9uTW91c2VXaGVlbCA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID09PSBmYWxzZSB8fFxyXG4gICAgICAgIHRoaXMuZW5hYmxlWm9vbSA9PT0gZmFsc2UgfHxcclxuICAgICAgICBzdGF0ZSAhPT0gU1RBVEUuTk9ORVxyXG4gICAgICApXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChfc3RhcnRFdmVudCk7XHJcblxyXG4gICAgICBoYW5kbGVNb3VzZVdoZWVsKGV2ZW50KTtcclxuXHJcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChfZW5kRXZlbnQpO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLm9uS2V5RG93biA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lbmFibGVkID09PSBmYWxzZSB8fCB0aGlzLmVuYWJsZVBhbiA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgIGhhbmRsZUtleURvd24oZXZlbnQpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvblRvdWNoU3RhcnQgPSAoZXZlbnQpID0+IHtcclxuICAgICAgdHJhY2tQb2ludGVyKGV2ZW50KTtcclxuXHJcbiAgICAgIHN3aXRjaCAocG9pbnRlcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgc3dpdGNoICh0aGlzLnRvdWNoZXMuT05FKSB7XHJcbiAgICAgICAgICAgIGNhc2UgVE9VQ0guUk9UQVRFOlxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVJvdGF0ZSA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgaGFuZGxlVG91Y2hTdGFydFJvdGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgICBzdGF0ZSA9IFNUQVRFLlRPVUNIX1JPVEFURTtcclxuXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFRPVUNILlBBTjpcclxuICAgICAgICAgICAgICBpZiAodGhpcy5lbmFibGVQYW4gPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgIGhhbmRsZVRvdWNoU3RhcnRQYW4oKTtcclxuXHJcbiAgICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5UT1VDSF9QQU47XHJcblxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBzdGF0ZSA9IFNUQVRFLk5PTkU7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIHN3aXRjaCAodGhpcy50b3VjaGVzLlRXTykge1xyXG4gICAgICAgICAgICBjYXNlIFRPVUNILkRPTExZX1BBTjpcclxuICAgICAgICAgICAgICBpZiAodGhpcy5lbmFibGVab29tID09PSBmYWxzZSAmJiB0aGlzLmVuYWJsZVBhbiA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgaGFuZGxlVG91Y2hTdGFydERvbGx5UGFuKCk7XHJcblxyXG4gICAgICAgICAgICAgIHN0YXRlID0gU1RBVEUuVE9VQ0hfRE9MTFlfUEFOO1xyXG5cclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgVE9VQ0guRE9MTFlfUk9UQVRFOlxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb20gPT09IGZhbHNlICYmIHRoaXMuZW5hYmxlUm90YXRlID09PSBmYWxzZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgaGFuZGxlVG91Y2hTdGFydERvbGx5Um90YXRlKCk7XHJcblxyXG4gICAgICAgICAgICAgIHN0YXRlID0gU1RBVEUuVE9VQ0hfRE9MTFlfUk9UQVRFO1xyXG5cclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5OT05FO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgc3RhdGUgPSBTVEFURS5OT05FO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc3RhdGUgIT09IFNUQVRFLk5PTkUpIHtcclxuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoX3N0YXJ0RXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9uVG91Y2hNb3ZlID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIHRyYWNrUG9pbnRlcihldmVudCk7XHJcblxyXG4gICAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgICAgY2FzZSBTVEFURS5UT1VDSF9ST1RBVEU6XHJcbiAgICAgICAgICBpZiAodGhpcy5lbmFibGVSb3RhdGUgPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgaGFuZGxlVG91Y2hNb3ZlUm90YXRlKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFNUQVRFLlRPVUNIX1BBTjpcclxuICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVBhbiA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICBoYW5kbGVUb3VjaE1vdmVQYW4oZXZlbnQpO1xyXG5cclxuICAgICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU1RBVEUuVE9VQ0hfRE9MTFlfUEFOOlxyXG4gICAgICAgICAgaWYgKHRoaXMuZW5hYmxlWm9vbSA9PT0gZmFsc2UgJiYgdGhpcy5lbmFibGVQYW4gPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgaGFuZGxlVG91Y2hNb3ZlRG9sbHlQYW4oZXZlbnQpO1xyXG5cclxuICAgICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU1RBVEUuVE9VQ0hfRE9MTFlfUk9UQVRFOlxyXG4gICAgICAgICAgaWYgKHRoaXMuZW5hYmxlWm9vbSA9PT0gZmFsc2UgJiYgdGhpcy5lbmFibGVSb3RhdGUgPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgaGFuZGxlVG91Y2hNb3ZlRG9sbHlSb3RhdGUoZXZlbnQpO1xyXG5cclxuICAgICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBzdGF0ZSA9IFNUQVRFLk5PTkU7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5vbkNvbnRleHRNZW51ID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZWQgPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfTtcclxuICAgIHRoaXMuZ2V0QXV0b1JvdGF0aW9uQW5nbGUgPSAoKSA9PiB7XHJcbiAgICAgIHJldHVybiAoKDIgKiBNYXRoLlBJKSAvIDYwIC8gNjApICogdGhpcy5hdXRvUm90YXRlU3BlZWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGdldFpvb21TY2FsZSA9ICgpID0+IHtcclxuICAgICAgcmV0dXJuIE1hdGgucG93KDAuOTUsIHRoaXMuem9vbVNwZWVkKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMub25Db250ZXh0TWVudSk7XHJcblxyXG4gICAgdGhpcy5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCB0aGlzLm9uUG9pbnRlckRvd24pO1xyXG4gICAgdGhpcy5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIG9uUG9pbnRlckNhbmNlbCk7XHJcbiAgICB0aGlzLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIHRoaXMub25Nb3VzZVdoZWVsLCB7XHJcbiAgICAgIHBhc3NpdmU6IGZhbHNlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMub25Db250ZXh0TWVudSk7XHJcblxyXG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCB0aGlzLm9uUG9pbnRlckRvd24pO1xyXG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsIG9uUG9pbnRlckNhbmNlbCk7XHJcbiAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIHRoaXMub25Nb3VzZVdoZWVsKTtcclxuXHJcbiAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIHRoaXMub25Qb2ludGVyTW92ZSk7XHJcbiAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCB0aGlzLm9uUG9pbnRlclVwKTtcclxuXHJcbiAgICBpZiAodGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cyAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9kb21FbGVtZW50S2V5RXZlbnRzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMub25LZXlEb3duKTtcclxuICAgIH1cclxuXHJcbiAgICAvL3RoaXMuZGlzcGF0Y2hFdmVudCggeyB0eXBlOiAnZGlzcG9zZScgfSApOyAvLyBzaG91bGQgdGhpcyBiZSBhZGRlZCBoZXJlP1xyXG4gIH1cclxufVxyXG5jb25zdCBTVEFURSA9IHtcclxuICBOT05FOiAtMSxcclxuICBST1RBVEU6IDAsXHJcbiAgRE9MTFk6IDEsXHJcbiAgUEFOOiAyLFxyXG4gIFRPVUNIX1JPVEFURTogMyxcclxuICBUT1VDSF9QQU46IDQsXHJcbiAgVE9VQ0hfRE9MTFlfUEFOOiA1LFxyXG4gIFRPVUNIX0RPTExZX1JPVEFURTogNixcclxufTtcclxuXHJcbmxldCBzdGF0ZSA9IFNUQVRFLk5PTkU7XHJcblxyXG5jb25zdCBFUFMgPSAwLjAwMDAwMTtcclxuXHJcbi8vIGN1cnJlbnQgcG9zaXRpb24gaW4gc3BoZXJpY2FsIGNvb3JkaW5hdGVzXHJcbmNvbnN0IHNwaGVyaWNhbCA9IG5ldyBTcGhlcmljYWwoKTtcclxuY29uc3Qgc3BoZXJpY2FsRGVsdGEgPSBuZXcgU3BoZXJpY2FsKCk7XHJcblxyXG5sZXQgc2NhbGUgPSAxO1xyXG5jb25zdCBwYW5PZmZzZXQgPSBuZXcgVmVjdG9yMygpO1xyXG5sZXQgem9vbUNoYW5nZWQgPSBmYWxzZTtcclxuXHJcbmNvbnN0IHJvdGF0ZVN0YXJ0ID0gbmV3IFZlY3RvcjIoKTtcclxuY29uc3Qgcm90YXRlRW5kID0gbmV3IFZlY3RvcjIoKTtcclxuY29uc3Qgcm90YXRlRGVsdGEgPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuY29uc3QgcGFuU3RhcnQgPSBuZXcgVmVjdG9yMigpO1xyXG5jb25zdCBwYW5FbmQgPSBuZXcgVmVjdG9yMigpO1xyXG5jb25zdCBwYW5EZWx0YSA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG5jb25zdCBkb2xseVN0YXJ0ID0gbmV3IFZlY3RvcjIoKTtcclxuY29uc3QgZG9sbHlFbmQgPSBuZXcgVmVjdG9yMigpO1xyXG5jb25zdCBkb2xseURlbHRhID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbmNvbnN0IHBvaW50ZXJzID0gW107XHJcbmNvbnN0IHBvaW50ZXJQb3NpdGlvbnMgPSB7fTtcclxuZXhwb3J0IGVudW0gTU9VU0Uge1xyXG4gIExFRlQgPSAwLFxyXG4gIE1JRERMRSA9IDEsXHJcbiAgUklHSFQgPSAyLFxyXG4gIFJPVEFURSA9IDAsXHJcbiAgRE9MTFkgPSAxLFxyXG4gIFBBTiA9IDIsXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFRPVUNIIHtcclxuICBST1RBVEUsXHJcbiAgUEFOLFxyXG4gIERPTExZX1BBTixcclxuICBET0xMWV9ST1RBVEUsXHJcbn1cclxuZnVuY3Rpb24gcm90YXRlTGVmdChhbmdsZSkge1xyXG4gIHNwaGVyaWNhbERlbHRhLnRoZXRhIC09IGFuZ2xlO1xyXG59XHJcblxyXG5mdW5jdGlvbiByb3RhdGVVcChhbmdsZSkge1xyXG4gIHNwaGVyaWNhbERlbHRhLnBoaSAtPSBhbmdsZTtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkUG9pbnRlcihldmVudCkge1xyXG4gIHBvaW50ZXJzLnB1c2goZXZlbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVQb2ludGVyKGV2ZW50KSB7XHJcbiAgZGVsZXRlIHBvaW50ZXJQb3NpdGlvbnNbZXZlbnQucG9pbnRlcklkXTtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgaWYgKHBvaW50ZXJzW2ldLnBvaW50ZXJJZCA9PSBldmVudC5wb2ludGVySWQpIHtcclxuICAgICAgcG9pbnRlcnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB0cmFja1BvaW50ZXIoZXZlbnQpIHtcclxuICBsZXQgcG9zaXRpb24gPSBwb2ludGVyUG9zaXRpb25zW2V2ZW50LnBvaW50ZXJJZF07XHJcblxyXG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICBwb3NpdGlvbiA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgICBwb2ludGVyUG9zaXRpb25zW2V2ZW50LnBvaW50ZXJJZF0gPSBwb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIHBvc2l0aW9uLnNldChldmVudC5wYWdlWCwgZXZlbnQucGFnZVkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRTZWNvbmRQb2ludGVyUG9zaXRpb24oZXZlbnQpIHtcclxuICBjb25zdCBwb2ludGVyID1cclxuICAgIGV2ZW50LnBvaW50ZXJJZCA9PT0gcG9pbnRlcnNbMF0ucG9pbnRlcklkID8gcG9pbnRlcnNbMV0gOiBwb2ludGVyc1swXTtcclxuXHJcbiAgcmV0dXJuIHBvaW50ZXJQb3NpdGlvbnNbcG9pbnRlci5wb2ludGVySWRdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYW5kbGVNb3VzZURvd25Sb3RhdGUoZXZlbnQpIHtcclxuICByb3RhdGVTdGFydC5zZXQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bkRvbGx5KGV2ZW50KSB7XHJcbiAgZG9sbHlTdGFydC5zZXQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93blBhbihldmVudCkge1xyXG4gIHBhblN0YXJ0LnNldChldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcclxufVxyXG5mdW5jdGlvbiBvblBvaW50ZXJDYW5jZWwoZXZlbnQpIHtcclxuICByZW1vdmVQb2ludGVyKGV2ZW50KTtcclxufVxyXG5mdW5jdGlvbiBoYW5kbGVUb3VjaFN0YXJ0Um90YXRlKCkge1xyXG4gIGlmIChwb2ludGVycy5sZW5ndGggPT09IDEpIHtcclxuICAgIHJvdGF0ZVN0YXJ0LnNldChwb2ludGVyc1swXS5wYWdlWCwgcG9pbnRlcnNbMF0ucGFnZVkpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCB4ID0gMC41ICogKHBvaW50ZXJzWzBdLnBhZ2VYICsgcG9pbnRlcnNbMV0ucGFnZVgpO1xyXG4gICAgY29uc3QgeSA9IDAuNSAqIChwb2ludGVyc1swXS5wYWdlWSArIHBvaW50ZXJzWzFdLnBhZ2VZKTtcclxuXHJcbiAgICByb3RhdGVTdGFydC5zZXQoeCwgeSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBoYW5kbGVUb3VjaFN0YXJ0UGFuKCkge1xyXG4gIGlmIChwb2ludGVycy5sZW5ndGggPT09IDEpIHtcclxuICAgIHBhblN0YXJ0LnNldChwb2ludGVyc1swXS5wYWdlWCwgcG9pbnRlcnNbMF0ucGFnZVkpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCB4ID0gMC41ICogKHBvaW50ZXJzWzBdLnBhZ2VYICsgcG9pbnRlcnNbMV0ucGFnZVgpO1xyXG4gICAgY29uc3QgeSA9IDAuNSAqIChwb2ludGVyc1swXS5wYWdlWSArIHBvaW50ZXJzWzFdLnBhZ2VZKTtcclxuXHJcbiAgICBwYW5TdGFydC5zZXQoeCwgeSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBoYW5kbGVUb3VjaFN0YXJ0RG9sbHkoKSB7XHJcbiAgY29uc3QgZHggPSBwb2ludGVyc1swXS5wYWdlWCAtIHBvaW50ZXJzWzFdLnBhZ2VYO1xyXG4gIGNvbnN0IGR5ID0gcG9pbnRlcnNbMF0ucGFnZVkgLSBwb2ludGVyc1sxXS5wYWdlWTtcclxuXHJcbiAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xyXG5cclxuICBkb2xseVN0YXJ0LnNldCgwLCBkaXN0YW5jZSk7XHJcbn1cclxuIl0sIm5hbWVzIjpbIk1lcnNlbm5lVHdpc3RlciIsImRpc3RhbmNlU2NyYXRjaCIsImxlcnBTY3JhdGNoIiwiYW5nbGVCZXR3ZWVuU2NyYXRjaCIsImFuZ2xlQmV0d2VlblNjcmF0Y2gyIiwibW9zdE9ydGhvZ29uYWxBeGlzU2NyYXRjaCIsInNjYWxlU2NyYXRjaDEiLCJzY3JhdGNoQ29sdW1uIiwic2NhbGVTY3JhdGNoMyIsInNjYWxlU2NyYXRjaDQiLCJzY2FsZVNjcmF0Y2g1Iiwic2NyYXRjaFRyYW5zcG9zZU1hdHJpeCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxJQUFZLG9CQUVYLENBQUE7QUFGRCxDQUFBLFVBQVksb0JBQW9CLEVBQUE7QUFDL0IsSUFBQSxvQkFBQSxDQUFBLE1BQUEsQ0FBQSxHQUFBLE1BQWEsQ0FBQTtBQUNkLENBQUMsRUFGVyxvQkFBb0IsS0FBcEIsb0JBQW9CLEdBRS9CLEVBQUEsQ0FBQSxDQUFBLENBQUE7QUFFRDtBQUNBLElBQVksZUFHWCxDQUFBO0FBSEQsQ0FBQSxVQUFZLGVBQWUsRUFBQTtBQUMxQixJQUFBLGVBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxXQUFzQixDQUFBO0FBQ3RCLElBQUEsZUFBQSxDQUFBLGlCQUFBLENBQUEsR0FBQSxrQkFBb0MsQ0FBQTtBQUNyQyxDQUFDLEVBSFcsZUFBZSxLQUFmLGVBQWUsR0FHMUIsRUFBQSxDQUFBLENBQUEsQ0FBQTtBQUVEO0FBQ0EsSUFBWSxXQVdYLENBQUE7QUFYRCxDQUFBLFVBQVksV0FBVyxFQUFBO0FBQ3RCLElBQUEsV0FBQSxDQUFBLGtCQUFBLENBQUEsR0FBQSxvQkFBdUMsQ0FBQTtBQUN2QyxJQUFBLFdBQUEsQ0FBQSxzQkFBQSxDQUFBLEdBQUEsdUJBQThDLENBQUE7QUFDOUMsSUFBQSxXQUFBLENBQUEsc0JBQUEsQ0FBQSxHQUFBLHVCQUE4QyxDQUFBO0FBQzlDLElBQUEsV0FBQSxDQUFBLHNCQUFBLENBQUEsR0FBQSx3QkFBK0MsQ0FBQTtBQUMvQyxJQUFBLFdBQUEsQ0FBQSx3QkFBQSxDQUFBLEdBQUEsMEJBQW1ELENBQUE7QUFDbkQsSUFBQSxXQUFBLENBQUEsd0JB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LE1BQU0sRUFBRSxJQUFJLFVBQVUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFJLFVBQVU7QUFDdkcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQjtBQUNBLEVBQUU7QUFDRixFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLFNBQVMsUUFBUSxFQUFFLFVBQVUsRUFBRTtBQUN6RSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDYixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNWLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDL0MsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoQixFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBQztBQUM5QyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsTUFBTSxFQUFFLElBQUksT0FBTyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxVQUFVLElBQUksT0FBTyxDQUFDLENBQUM7QUFDM0csSUFBSSxR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LEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2pFLEdBQUc7QUFDSCxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQzFCLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNyRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUMxRSxHQUFHO0FBQ0gsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2RSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckU7QUFDQSxFQUFFLElBQUksQ0FB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LEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEQsUUFBQSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0RCxRQUFBLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDWjtBQUNELElBQUEsWUFBWSxDQUFDLE1BQWUsRUFBQTtBQUMzQixRQUFBLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQ2YsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQ1YsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDWixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkQsSUFB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LENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxjQUFjLENBQUMsVUFBc0IsRUFBRSxNQUFnQixFQUFBO1FBQzdELE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUV2QyxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDOUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRTVCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUU1QixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFFL0IsUUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoRSxTQUFBO0FBQ0QsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsUUFBQSxN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QUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0csU0FBQTtRQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxlQUFlLENBQUMsTUFBYyxFQUFFLEdBQVcsRUFBQTtBQUNqRCxRQUFBLE9BQU8sTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDeEI7QUFFRCxJQUFBLE9BQU8sU0FBUyxDQUFDLE1BQWUsRUFBRSxLQUFhLEVBQUUsTUFBZSxFQUFBO0FBQy9ELFFBQUEsTUFBTSxVQUFVLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM3QixRQUFBLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FB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TUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFFcEMsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFFBQVEsQ0FBQyxNQUFlLEVBQUUsTUFBZSxFQUFBO0FBQy9DLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVDLGVBQWEsQ0FBQyxDQUFDLENBQUM7QUFDbkcsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRUEsZUFBYSxDQUFDLENBQUMsQ0FBQztBQUNuRyxRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQSxlQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ25HLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtJQUVELE9BQU8sZUFBZSxDQUFDLE1BQWUsRUFBQTtBQUNyQyxRQUFBLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFQyxlQUFhLENBQUMsQ0FBQztBQUN4QyxRQUFBLE9BQU8sT0FBTyxDQUFDLGdCQUFnQixDQUFDQSxlQUFhLENBQUMsQ0FBQztLQUMvQztBQUVELElBQUEsT0FBTyxXQUFXLENBQUMsTUFBZSxFQUFFLFFBQWlCLEVBQUUsTUFBZSxFQUFBO1FBQ3JFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFQyxlQUFhLENBQUMsQ0FBQztBQUV0RCxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUVsQyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sV0FBVyxDQUFDLE1BQWUsRUFBRSxNQUFlLEVBQUE7UUFDbEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUVDLGVBQWEsQ0FBQyxDQUFDO0FBRXRELFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBRWhDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxRQUFRLENBQUMsSUFBYSxFQUFFLEtBQWMsRUFBRSxNQUFlLEVBQUE7QUFDN0QsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRixRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFakYsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRixRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFakYsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRixRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFakYsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLEdBQUcsQ0FBQyxJQUFhLEVBQUUsS0FBYyxFQUFFLE1BQWUsRUFBQTtBQUN4RCxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sUUFBUSxDQUFDLElBQWEsRUFBRSxLQUFjLEVBQUUsTUFBZSxFQUFBO0FBQzdELFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFlLEVBQUUsU0FBa0IsRUFBRSxNQUFlLEVBQUE7QUFDM0UsUUFBQSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFdkIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0QsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0QsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFFM0QsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLGdCQUFnQixDQUFDLE1BQWUsRUFBRSxNQUFjLEVBQUUsTUFBZSxFQUFBO1FBQ3ZFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9CLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxlQUFlLENBQUMsTUFBZSxFQUFFLEtBQWMsRUFBRSxNQUFlLEVBQUE7QUFDdEUsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFFaEMsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLE1BQU0sQ0FBQyxNQUFlLEVBQUUsTUFBZSxFQUFBO1FBQzdDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxTQUFTLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTtBQUNoRCxRQUFBLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixRQUFBLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixRQUFBLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixRQUFBLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixRQUFBLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixRQUFBLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixRQUFBLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixRQUFBLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixRQUFBLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUU5QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sR0FBRyxDQUFDLE1BQWUsRUFBRSxNQUFlLEVBQUE7QUFDMUMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFaEMsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0lBRUQsT0FBTyxXQUFXLENBQUMsTUFBZSxFQUFBO0FBQ2pDLFFBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXRCLFFBQUEsT0FBTyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztLQUNyRztBQUVELElBQUEsT0FBTyxPQUFPLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTtBQUM5QyxRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0QixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDOztRQUdoRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtBQUM3QyxZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUM1QyxTQUFBOztRQUdELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBRWxDLFFBQUEsTUFBTSxLQUFLLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQztRQUNoQyxPQUFPLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3ZEO0FBRUQsSUFBQSxPQUFPLGdCQUFnQixDQUFDLE1BQWUsRUFBRSxNQUFlLEVBQUE7QUFDdkQsUUFBQSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUVDLHdCQUFzQixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDbEY7QUFFRCxJQUFBLE9BQU8sTUFBTSxDQUFDLElBQWEsRUFBRSxLQUFjLEVBQUE7UUFDMUMsUUFDQyxJQUFJLEtBQUssS0FBSzthQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUNkLGdCQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLGdCQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLGdCQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLGdCQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLGdCQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLGdCQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLGdCQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLGdCQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3JCO0tBQ0Y7SUFFRCxPQUFPLGFBQWEsQ0FBQyxJQUFhLEVBQUUsS0FBYyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUE7QUFDOUQsUUFBQSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVuQyxRQUNDLElBQUksS0FBSyxLQUFLO2FBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ2QsZ0JBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTztBQUN2QyxnQkFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPO0FBQ3ZDLGdCQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU87QUFDdkMsZ0JBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTztBQUN2QyxnQkFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPO0FBQ3ZDLGdCQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU87QUFDdkMsZ0JBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTztBQUN2QyxnQkFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPO0FBQ3ZDLGdCQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxFQUN4QztLQUNGO0FBTUQsSUFBQSxLQUFLLENBQUMsTUFBZSxFQUFBO1FBQ3BCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDbkM7QUFFRCxJQUFBLE1BQU0sQ0FBQyxLQUFjLEVBQUE7UUFDcEIsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNuQztBQUVEOztBQUVHO0FBQ0gsSUFBQSxXQUFXLENBQUMsTUFBMEIsRUFBRSxLQUFlLEVBQUUsTUFBYyxFQUFBO1FBQ3RFLFFBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDM0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUM5QjtLQUNGO0FBRUQ7Ozs7Ozs7O0FBUUc7SUFDSCxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBQTtRQUMzQixPQUFPLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNuRDtJQUVELFFBQVEsR0FBQTtBQUNQLFFBQUEsUUFDQyxDQUFJLENBQUEsRUFBQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUssRUFBQSxFQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBSyxFQUFBLEVBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFLLEdBQUEsQ0FBQTtBQUN4QyxZQUFBLENBQUEsQ0FBQSxFQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUssRUFBQSxFQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBSyxHQUFBLENBQUE7QUFDeEMsWUFBQSxDQUFBLENBQUEsRUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUEsRUFBQSxFQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQSxFQUFBLEVBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUEsQ0FBRyxFQUNyQztLQUNGOztBQWhETSxPQUFRLENBQUEsUUFBQSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRW5GLE9BQUksQ0FBQSxJQUFBLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFpRHZGLE1BQU1MLGVBQWEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxPQUFPLEdBQUc7QUFDcEMsTUFBTUMsZUFBYSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDcEMsTUFBTUMsZUFBYSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDcEMsTUFBTUMsZUFBYSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDcEMsTUFBTUMsZUFBYSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFrRnBDLE1BQU1DLHdCQUFzQixHQUFHLElBQUksT0FBTyxFQUFFOztBQzV0QjVDLE1BQU0sT0FBTyxDQUFBO0FBZ0JaLElBQUEsV0FBQSxDQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUE7QUFDckMsUUFBQSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNYLFFBQUEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWCxRQUFBLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ1gsUUFBQSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNYO0FBQ0QsSUFBQSxHQUFHLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFBO0FBQzdDLFFBQUEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWCxRQUFBLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ1gsUUFBQSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNYLFFBQUEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDWDtJQUNELE9BQU8sR0FBQTtBQUNOLFFBQUEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN4QztBQUVELElBQUEsS0FBSyxDQUFDLE1BQWUsRUFBQTtRQUNwQixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ25DO0FBRUQsSUFBQSxNQUFNLENBQUMsS0FBYyxFQUFBO1FBQ3BCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDbkM7SUFFRCxhQUFhLENBQUMsS0FBYyxFQUFFLGVBQWUsR0FBRyxDQUFDLEVBQUUsZUFBZSxHQUFHLENBQUMsRUFBQTtBQUNyRSxRQUFBLE9BQU8sT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztLQUM1RTtJQUVELFFBQVEsR0FBQTtBQUNQLFFBQUEsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUEsRUFBQSxFQUFLLElBQUksQ0FBQyxDQUFDLENBQUssRUFBQSxFQUFBLElBQUksQ0FBQyxDQUFDLENBQUEsRUFBQSxFQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztLQUN0RDtJQUNELG1CQUFtQixDQUFDLFNBQW9CLEVBQUUsS0FBYSxFQUFBO1FBQ3RELElBQUksQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUUvQixRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ1o7SUFFRCxPQUFPLFlBQVksQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsTUFBZSxFQUFBO0FBQzlFLFFBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyQixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFNBQUE7QUFFRCxRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLEtBQUssQ0FBQyxTQUFrQixFQUFFLE1BQWUsRUFBQTtBQUMvQyxRQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDeEIsWUFBQSxPQUFPLFNBQVMsQ0FBQztBQUNqQixTQUFBO0FBRUQsUUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3JCLFlBQUEsT0FBTyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsU0FBQTtBQUVELFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtJQUVELE9BQU8sZ0JBQWdCLENBQUMsU0FBa0IsRUFBQTtRQUN6QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3BFO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQyxTQUFrQixFQUFBO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDcEU7QUFFRCxJQUFBLE9BQU8sa0JBQWtCLENBQUMsS0FBYyxFQUFFLE1BQWUsRUFBRSxNQUFlLEVBQUE7QUFDekUsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFdkMsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLGtCQUFrQixDQUFDLEtBQWMsRUFBRSxNQUFlLEVBQUUsTUFBZSxFQUFBO0FBQ3pFLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXZDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtJQUVELE9BQU8sS0FBSyxDQUFDLEtBQWMsRUFBRSxHQUFZLEVBQUUsR0FBWSxFQUFFLE1BQWUsRUFBQTtBQUN2RSxRQUFBLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxRQUFBLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxRQUFBLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxRQUFBLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUU3QyxRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRWIsUUFB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QUFFLGVBQWUsQ0FBQztBQUN0RSxnQkFBQSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDO0FBQ3RFLGdCQUFBLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQyxFQUN2RTtLQUNGOztBQTVRYSxPQUFBLENBQUEsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUV0RCxPQUFBLENBQUEsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUVyRCxPQUFBLENBQUEsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUV4RCxPQUFBLENBQUEsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUV4RCxPQUFBLENBQUEsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUV4RCxPQUFBLENBQUEsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQXFRdkU7QUFDQSxNQUFNLGVB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QUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDdkIsUUFBQSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRVYsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDdkIsUUFBQSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3QixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN2QixRQUFBLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFVixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN2QixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN2QixRQUFBLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzlCLFFBQUEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUVYLFFBQUEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDcEIsUUFBQSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNwQixRQUFBLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLFFBQUEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUVYLFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDWjtBQUNELElBQUEsYUFBYSxDQUFDLEtBQWMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFBO1FBQ3hDLE9BQU8sT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ25EO0FBQ0QsSUFBQSxNQUFNLENBQUMsR0FBWSxFQUFFLE1BQWUsRUFBRSxFQUFXLEVBQUE7UUFDaEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQyxRQUFBLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRTs7QUFFckIsWUFBQSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNSLFNBQUE7UUFDRCxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUU7O1lBR3JCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLGdCQUFBLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDO0FBQ2QsYUFBQTtBQUFNLGlCQUFBO0FBQ04sZ0JBQUEsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUM7QUFDZCxhQUFBO1lBQ0QsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFNBQUE7UUFDRCxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFakIsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNaO0lBQ0QsUUFBUSxHQUFBO1FBQ1AsUUFDQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQSxFQUFBLEVBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFLLEVBQUEsRUFBQSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFLLEdBQUEsQ0FBQTtBQUNyRCxZQUFBLENBQUEsQ0FBQSxFQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBSyxFQUFBLEVBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQSxFQUFBLEVBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFLLEdBQUEsQ0FBQTtBQUNyRCxZQUFBLENBQUEsQ0FBQSxFQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBSyxFQUFBLEVBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQSxFQUFBLEVBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFLLEdBQUEsQ0FBQTtZQUN0RCxDQUFJLENBQUEsRUFBQSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUEsRUFBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUssRUFBQSxFQUFBLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBRyxDQUFBLENBQUEsRUFDbkQ7S0FDRjtBQUNELElBQUEsT0FBTyxLQUFLLENBQUMsTUFBMEIsRUFBRSxNQUFlLEVBQUE7QUFDdkQsUUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3JCLFlBQUEsT0FBTyxTQUFTLENBQUM7QUFDakIsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNyQixZQUFBLE9BQU8sSUFBSSxPQUFPLENBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNULE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNULE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDVCxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQ1YsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNULE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDVCxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ1QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FDVixDQUFDO0FBQ0YsU0FBQTtRQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLG9CQUFvQixDQUFDLE1BQWdCLEVB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Q0FBQyxDQUFDLEVBQ1gsV0FBVyxDQUFDLENBQUMsRUFDYixRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQ1gsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUNYLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFDWCxXQUFXLENBQUMsQ0FBQyxFQUNiLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFDWCxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQ1gsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUNYLFdBQVcsQ0FBQyxDQUFDLEVBQ2IsR0FBRyxFQUNILEdBQUcsRUFDSCxHQUFHLEVBQ0gsR0FBRyxDQUNILENBQUM7QUFDRixTQUFBO1FBRUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNoQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDM0IsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtJQUVELE9BQU8sc0NBQXNDLENBQzVDLFdBQW9CLEVBQ3BCLFFBQW9CLEVBQ3BCLEtBQWMsRUFDZCxNQUFlLEVBQUE7QUFFZixRQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDckIsWUFBQSxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUN2QixTQUFBO0FBRUQsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFdkIsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRW5DLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUM5QixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFNUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUMvQixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRTVCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUUvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdB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QUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLEtBQUssR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM5QixRQUFBLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUV2QyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoQixRQUFBLE1B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LENBQUMsQ0FBQyxDQUFDO2dCQUNULE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ1QsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDVixNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDVixNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUM7YUFDVixDQUFDO0FBQ0YsU0FBQTtRQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0s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LENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFdEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV0QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXhCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFeEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFdBQVcsQ0FBQyxNQUFlLEVBQUUsTUFBa0IsRUFBQTtRQUNyRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRUMsZUFBYSxDQUFDLENBQUM7QUFFdEQsUUFBQSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFeEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUM3QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDN0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUM3QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDN0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUM3QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFFOUIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFVixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDZCxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLFlBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7WUFDN0IsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQzdCLFNBQUE7QUFBTSxhQUFBLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFO0FBQ3RDLFlBQUEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUM3QixZQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNwQixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7WUFDN0IsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQzdCLFNBQUE7YUFBTSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUU7QUFDdkIsWUFBQSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUM3QixZQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNwQixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDN0IsU0FBQTtBQUFNLGFBQUE7QUFDTixZQUFBLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7WUFDN0IsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUM3QixZQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNwQixTQUFBO0FBQ0QsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFFBQVEsQ0FBQyxJQUFhLEVBQUUsS0FBYyxFQUFFLE1BQWUsRUFBQTtBQUM3RCxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUV4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUUxQixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDdkYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3ZGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN4RixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFFeEYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3ZGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN2RixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDeEYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBRXhGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUN6RixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFDekYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQzFGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUUxRixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFDM0YsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQzNGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUM1RixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFFNUYsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3pCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxHQUFHLENBQUMsSUFBYSxFQUFFLEtBQWMsRUFBRSxNQUFlLEVBQUE7QUFDeEQsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sUUFBUSxDQUFDLElBQWEsRUFBRSxLQUFjLEVBQUUsTUFBZSxFQUFBO0FBQzdELFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLHNCQUFzQixDQUFDLElBQWEsRUFBRSxLQUFjLEVBQUUsTUFBZSxFQUFBO0FBQzNFLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXhCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRTFCLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDckUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNyRSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBRXRFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDckUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNyRSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBRXRFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUM7QUFDdEUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUN0RSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBRXZFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ2pGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ2pGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBRWxGLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8saUJBQWlCLENBQUMsTUFBZSxFQUFFLFFBQWlCLEVBQUUsTUFBZSxFQUFBO0FBQzNFLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRTFCLFFBQUEsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQUEsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQUEsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQUEsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQUEsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQUEsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQUEsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQUEsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQUEsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRTVCLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDckUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNyRSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBRXRFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDckUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNyRSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBRXRFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUM7QUFDdEUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUN0RSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBRXZFLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLHFCQUFxQixDQUFDLE1BQWUsRUFBRSxXQUFvQixFQUFFLE1BQWUsRUFBQTtBQUNsRixRQUFBLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUV4QixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV2RSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNoQixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxlQUFlLENBQUMsTUFBZSxFQUFFLEtBQWMsRUFBRSxNQUFlLEVBQUE7QUFDdEUsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7O1FBR3ZCLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sS0FBSyxHQUFHLEVBQUU7WUFDdkQsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyQyxTQUFBO1FBRUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUV4QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sc0JBQXNCLENBQUMsTUFBZSxFQUFFLEtBQWEsRUFBRSxNQUFlLEVBQUE7UUFDNUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUM5QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUM5QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUM5QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUV4QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sZ0JBQWdCLENBQUMsTUFBZSxFQUFFLFNBQWtCLEVBQUUsTUFBZSxFQUFBO0FBQzNFLFFBQUEsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUV2QixRQUFBLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDN0UsUUFBQSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzdFLFFBQUEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM5RSxRQUFBLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFFOUUsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyx1QkFBdUIsQ0FBQyxNQUFlLEVBQUUsU0FBa0IsRUFBRSxNQUFlLEVBQUE7QUFDbEYsUUFBQSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFdkIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0QsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxN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LE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxNQUFNLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTtRQUM3QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFNBQVMsQ0FBQyxNQUFlLEVBQUUsTUFBZSxFQUFBO0FBQ2hELFFBQUEsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTVCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNwQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7UUFDcEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNyQixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDckIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLEdBQUcsQ0FBQyxNQUFlLEVBQUUsTUFBZSxFQUFBO0FBQzFDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENB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Q2IsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ2QsZ0JBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTztBQUN2QyxnQkFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPO0FBQ3ZDLGdCQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU87QUFDdkMsZ0JBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTztBQUN2QyxnQkFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPO0FBQ3ZDLGdCQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU87QUFDdkMsZ0JBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTztBQUN2QyxnQkFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPO0FBQ3ZDLGdCQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU87QUFDdkMsZ0JBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTztBQUN2QyxnQkFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxPQUFPO0FBQ3pDLGdCQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLE9BQU87QUFDekMsZ0JBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksT0FBTztBQUN6QyxnQkFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxPQUFPO0FBQ3pDLGdCQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLE9BQU87QUFDekMsZ0JBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEVBQzFDO0tBQ0Y7QUFFRCxJQUFBLE9BQU8sY0FBYyxDQUFDLE1BQWUsRUFBRSxNQUFlLEVBQUE7QUFDckQsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFVBQVUsQ0FBQyxNQUFlLEVBQUUsTUFBZSxFQUFBO1FBQ2pELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxPQUFPLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTs7Ozs7QUFLOUMsUUFBQSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekIsUUFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekIsUUFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekIsUUFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7O0FBR3pCLFFBQUEsSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN6QixRQUFBLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDekIsUUFBQSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLFFBQUEsSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN6QixRQUFBLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7QUFDeEIsUUFBQSxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN4QixRQUFBLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDekIsUUFBQSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLFFBQUEsSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN6QixRQUFBLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7QUFDekIsUUFBQSxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDOztRQUd6QixNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2pHLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDakcsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNuRyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ25HLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDakcsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNqRyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ25HLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7O0FBR25HLFFBQUEsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDbkIsUUFBQSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuQixRQUFBLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFFBQUEsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDbkIsUUFBQSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuQixRQUFBLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFFBQUEsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDbkIsUUFBQSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuQixRQUFBLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFFBQUEsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDbkIsUUFBQSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNwQixRQUFBLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDOztRQUdwQixNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ3ZHLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDdkcsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztRQUMxRyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQzFHLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDdEcsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FB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LENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFNUIsUUFBQSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFdEIsUUFBQSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ3RELFFBQUEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUN0RCxRQUFBLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFFdkQsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3BCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNwQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDcEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNwQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDcEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3BCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDcEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3BCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN0QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFlLEVBQUUsTUFBZSxFQUFBO0FBQ3ZELFFBQUEsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLHNCQUFzQixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDbEY7QUFDRDs7QUFFRztBQUNILElBQUEsT0FBTyxXQUFXLENBQUMsTUFBZSxFQUFFLEtBQW9CLEVBQUUsTUFBYyxFQUFBO1FBQ3ZFLFFBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDM0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNqQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDakMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNq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QUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0UsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0UsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0UsWUFBQSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsWUFBQSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsWUFBQSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3QixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lB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R0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUMsWUFBQSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3JELE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QixZQUFBLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztBQUV4QixZQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsWUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyQyxTQUFBOztLQUVEO0lBQ0QsT0FBTyxHQUFBO0FBQ04sUUFBQSxJQUFJLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzVCLFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMxQixRQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLFFBQUEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDaEIsUUFBQSxJQUFJ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LENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUNqRjtBQUVELElBQUEsT0FBTyxRQUFRLENBQUMsSUFBZ0IsRUFBRSxLQUFpQixFQUFFLE1BQWtCLEVBQUE7QUFDdEUsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNyQixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBRXJCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUV2QixRQUFBLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDNUUsUUFBQSxNQUFNLENBQUMsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQzVFLFFBQUEsTUFBTSxDQUFDLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUM1RSxRQUFBLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFB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LFFBQVEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFFdEQsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFFaEMsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFFBQVEsQ0FBQyxJQUFhLEVBQUUsS0FBYyxFQUFFLE1BQWUsRUFBQTtRQUM3RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMs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LENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDO0FBQ3pDLElBQUEsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDakQsSUFBQSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUNsRCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDMUQsSUFBQSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakMsSUFBQSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3pDLElBQUEsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxQyxJQUFBLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBRWxELElBQUEsTUFBTSxTQUFTLEdBQUc7O0FBRWpCLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQzs7QUFHTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7O0FBR0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDOztBQUdMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQzs7QUFHTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7O0FBR0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0tBQ0wsQ0FBQztBQUVGLElBQUEsTUFBTSxHQUFHLEdBQUc7O1FBRVgsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDOztRQUdsQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7O1FBR2xDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzs7UUFHbEMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDOztRQUdsQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7O1FBR2xDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztLQUNsQyxDQUFDO0FBRUYsSUFBQSxNQUFNLE9BQU8sR0FBRzs7QUFFZixRQUFBLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzs7QUFHcEQsUUFBQSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7O0FBR3BELFFBQUEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDOztBQUcxRCxRQUFBLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzs7QUFHMUQsUUFBQSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7O0FBR3BELFFBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxD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QUFHLFNBQVMsQ0FBQyxDQUFDO0FBQzVELFlBQUEsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDM0QsWUFBQSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFDdkUsWUFBQSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2hELFlBQUEsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFDNUQsWUFBQSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzRCxZQUFBLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUN2RSxZQUFBLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUN2QixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUM7QUFDN0IsWUFBQSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7WUFDdEIsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDO0FBQzVCLFlBQUEsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7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Q0wsUUFBQSxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEQsUUFBQSxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFeEQsUUFBQSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwQixLQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMscUJBQXFCLEdBQUE7QUFDNUIsSUFBQSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDakQsSUFBQSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFFakQsSUFBQSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBRTlDLElBQUEsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDOUI7Ozs7In0= diff --git a/example/index.html b/example/index.html index a74d9c6..15a484c 100644 --- a/example/index.html +++ b/example/index.html @@ -29,6 +29,7 @@
Mesh
Axes SkyBox + InstanceMesh
Materials
Blinn-PhongMaterial { - return null; + return mesh.modelMatrix; }, UniformEnum.Mat4 ); uniformBuffer.setUniform("color", this, UniformEnum.Color); - uniformBuffer.setUniform("opacity", this, UniformEnum.Float); uniformBuffer.setUniform("rotation", this, UniformEnum.Float); uniformBuffer.setUniform("center", this, UniformEnum.FloatVec2); - uniformBuffer.setUniform("specular", this, UniformEnum.Color); - this.shaderData.setUniformBuffer("phong", uniformBuffer); + uniformBuffer.setUniform("opacity", this, UniformEnum.Float); + this.shaderData.setUniformBuffer("billboard", uniformBuffer); if (this.baseTexture) { this.shaderData.setDefine("USE_COLORTEXTURE", true); this.shaderData.setTexture("baseColorTexture", this.baseTexture); diff --git a/src/material/BlinnPhongMaterial.ts b/src/material/BlinnPhongMaterial.ts index 64a97a2..7c07902 100644 --- a/src/material/BlinnPhongMaterial.ts +++ b/src/material/BlinnPhongMaterial.ts @@ -30,16 +30,16 @@ export default class BlinnPhongMaterial extends Material { this.baseTexture = undefined; this.baseSampler = undefined; } - update(frameState: FrameState, mesh: Mesh) { + update(frameState?: FrameState, mesh?: Mesh) { if (!this.shaderData || this.dirty) this.createShaderData(mesh); } protected createShaderData(mesh?: Mesh) { - super.createShaderData(mesh); + super.createShaderData(); const uniformBuffer = new UniformBuffer({ label: "phong" }); uniformBuffer.setUniform( "modelMatrix", () => { - return null; + return mesh.modelMatrix; }, UniformEnum.Mat4 ); diff --git a/src/material/ColorMaterial.ts b/src/material/ColorMaterial.ts index 1cbc9d4..de6e09d 100644 --- a/src/material/ColorMaterial.ts +++ b/src/material/ColorMaterial.ts @@ -14,13 +14,13 @@ export default class ColorMaterial extends Material { defines: {} }); } - update(frameState: FrameState, mesh: Mesh) { - if (!this.shaderData || this.dirty) this.createShaderData(mesh); + update(frameState?: FrameState, mesh?: Mesh) { + if (!this.shaderData || this.dirty) this.createShaderData(); const uniformBuffer = new UniformBuffer({ label: "color" }); uniformBuffer.setUniform( "modelMatrix", () => { - return null; + return mesh.modelMatrix; }, UniformEnum.Mat4 ); diff --git a/src/material/Material.ts b/src/material/Material.ts index a31c327..85c80c1 100644 --- a/src/material/Material.ts +++ b/src/material/Material.ts @@ -100,14 +100,20 @@ export class Material { public set opacity(v: number) { this._opacity = v; } - onBeforeRender() {} + onBeforeRender() { + // callback + } - onBeforeCompile() {} + onBeforeCompile() { + // callback + } clone(): Material { return null; } - update(frameState?: FrameState, mesh?: Mesh) {} - protected createShaderData(mesh: Mesh, frameState?: FrameState) { + update(frameState?: FrameState, mesh?: Mesh) { + // update material + } + protected createShaderData() { if (this.shaderData) this.shaderData.destroy(); this.shaderData = new ShaderData(this.type, 0); this.ready = true; diff --git a/src/material/PbrMaterial.ts b/src/material/PbrMaterial.ts index 013b646..4e9cdb2 100644 --- a/src/material/PbrMaterial.ts +++ b/src/material/PbrMaterial.ts @@ -98,14 +98,14 @@ export default class PbrMaterial extends Material { } }); } - update(frameState: FrameState, mesh: Mesh) { + update(frameState?: FrameState, mesh?: Mesh) { if (!textureCache.getTexture("specular")) return; if (!this.shaderData || this.dirty) { - this.createShaderData(mesh, frameState); + this.createShaderData(mesh); } } - protected createShaderData(mesh: Mesh, frameState?: FrameState) { - super.createShaderData(mesh); + protected createShaderData(mesh?: Mesh) { + super.createShaderData(); const uniformBuffer = new UniformBuffer({ label: "pbr" }); uniformBuffer.setUniform( "modelMatrix", diff --git a/src/material/ShaderMaterial.ts b/src/material/ShaderMaterial.ts index fe43495..d62cf2b 100644 --- a/src/material/ShaderMaterial.ts +++ b/src/material/ShaderMaterial.ts @@ -36,7 +36,7 @@ export default class ShaderMaterial extends Material { return new ShaderMaterial(this.shaderMaterialParms); } protected createShaderData(mesh?: Mesh) { - super.createShaderData(mesh); + super.createShaderData(); const result = checkContainFloatType(this.uniforms); if (result.hasFloat) { this.uniformBuffer = result.hasArraytype @@ -55,6 +55,7 @@ export default class ShaderMaterial extends Material { this.uniforms[uniformsName], this.uniforms, this.shaderData, + mesh, this.uniformBuffer ); }); diff --git a/src/material/SkyBoxMaterial.ts b/src/material/SkyBoxMaterial.ts index 33b9f47..73f71cf 100644 --- a/src/material/SkyBoxMaterial.ts +++ b/src/material/SkyBoxMaterial.ts @@ -28,19 +28,19 @@ export default class SkyBoxMaterial extends Material { this.baseTexture = result.texture; this.baseSampler = result.sampler; } - update(frameState: FrameState, mesh: Mesh) { + update(frameState?: FrameState, mesh?: Mesh) { if (!this.loadFish) return; if (!this.shaderData) { this.createShaderData(mesh); } } - protected createShaderData(mesh: Mesh) { - super.createShaderData(mesh); + protected createShaderData(mesh?: Mesh) { + super.createShaderData(); const uniformBuffer = new UniformBuffer({ label: "skybox" }); uniformBuffer.setUniform( "modelMatrix", () => { - return null; + return mesh.modelMatrix; }, UniformEnum.Mat4 ); diff --git a/src/mesh/Billboard.ts b/src/mesh/Billboard.ts new file mode 100644 index 0000000..4372dcf --- /dev/null +++ b/src/mesh/Billboard.ts @@ -0,0 +1,18 @@ +import BillboardGeometry from "../geometry/BillboardGeometry"; +import { BillboardMaterial } from "../material/BillboardMaterial"; +import Texture from "../render/Texture"; +import { Mesh } from "./Mesh"; + +export class Billboard extends Mesh { + constructor() { + super(); + this.material = new BillboardMaterial(); + this.geometry = new BillboardGeometry(); + } + setTexture(texture: Texture) { + this.material.baseTexture = texture; + } + // set center(){ + + // } +} diff --git a/src/mesh/InstanceMesh.ts b/src/mesh/InstanceMesh.ts index 91f322f..e14567a 100644 --- a/src/mesh/InstanceMesh.ts +++ b/src/mesh/InstanceMesh.ts @@ -19,11 +19,10 @@ export class InstanceMesh extends Mesh { this.hasAddInstances = false; } update(frameState: FrameState, camera?: Camera) { - // create - this.geometry.update(frameState); - this.material.update(frameState, this); // update instances visiblity this.checkInstancesVisiblity({ frameState, camera }); + this.geometry.update(frameState); + this.material.update(frameState, this); if (!this.hasAddInstances) this.addUniformsToMaterial(); this.instanceCount = this.renderInstances.length; if (this.renderInstances.length < 1) return; @@ -45,11 +44,16 @@ export class InstanceMesh extends Mesh { } private checkInstancesVisiblity(options: { frameState: FrameState; camera: Camera }) { const { frameState, camera } = options; + const preFrameInstanceCount = this.renderInstances.length; + this.renderInstances = []; this.instances.forEach((instance: Instance) => { instance.updateMatrix(this?.parent?.modelMatrix); instance.visiblity = this.getInstanceVisiblity({ instance, frameState, camera }); if (instance.visiblity) this.renderInstances.push(instance); }); + this.material.dirty = this.renderInstances.length === preFrameInstanceCount; + // rebuild instanceMatrixsBuffer + if (this.material.dirty) this.hasAddInstances = false; } private getInstanceVisiblity(options: { instance: Instance; frameState: FrameState; camera: Camera }): boolean { const { instance, frameState, camera } = options; diff --git a/src/mesh/Mesh.ts b/src/mesh/Mesh.ts index 1dd04b3..832bbff 100644 --- a/src/mesh/Mesh.ts +++ b/src/mesh/Mesh.ts @@ -11,18 +11,20 @@ import createGuid from "../utils/createGuid"; export class Mesh extends RenderObject { [x: string]: any; uid: string; + frustumCull: boolean; + subCommands: { [prop: string]: DrawCommand }; geometry?: Geometry; material?: Material; instanceCount?: number; priority?: number; drawCommand?: DrawCommand; - subCommands: { [prop: string]: DrawCommand }; distanceToCamera?: number; constructor(geometry?: Geometry, material?: Material) { super(); this.geometry = geometry; this.material = material; this.type = RenderObjectType.Mesh; + this.frustumCull = true; this.uid = createGuid(); this.subCommands = {}; } @@ -53,12 +55,16 @@ export class Mesh extends RenderObject { frameState.renderQueue.opaque.push(this); } } - beforeRender() {} - afterRender() {} + beforeRender() { + // before render + } + afterRender() { + // after render + } public getDrawCommand(overrideMaterial?: Material, commandSubType?: CommandSubType, lightManger?: LightManger) { if (!this.drawCommand || this.material.dirty) { this.material.shaderSource.setDefines( - Object.assign(this.material.shaderData.defines, this.geometry.defines) + Object.assign({}, this.material.shaderData.defines, this.geometry.defines) ); if (this.material.dirty) this.material.dirty = false; this.drawCommand = new DrawCommand({ @@ -78,8 +84,7 @@ export class Mesh extends RenderObject { if (overrideMaterial) { if (!this.subCommands[commandSubType]) { const copyMat = overrideMaterial.clone(); - overrideMaterial.update(); - copyMat.update(); + copyMat.update(undefined, this); if (copyMat.dirty) copyMat.dirty = false; this.subCommands[commandSubType] = this.drawCommand.shallowClone(copyMat); } diff --git a/src/render/DrawCommand.ts b/src/render/DrawCommand.ts index e735a34..3185cfd 100644 --- a/src/render/DrawCommand.ts +++ b/src/render/DrawCommand.ts @@ -91,7 +91,6 @@ class DrawCommand implements Command { public render(context?: Context, passEncoder?: GPURenderPassEncoder, camera?: Camera): void { const { shaderData, - modelMatrix, renderState, vertexBuffer, indexBuffer, @@ -105,8 +104,6 @@ class DrawCommand implements Command { const defines = Object.assign({}, lightShaderData?.defines ?? {}, camera?.shaderData?.defines ?? {}); const { device } = context; - if (modelMatrix) shaderData?.replaceUniformBufferValue?.("modelMatrix", modelMatrix); - shaderData?.bind?.(context, currentPassEncoder); camera?.shaderData?.bind(context, currentPassEncoder); diff --git a/src/shader/Shaders.ts b/src/shader/Shaders.ts index c758dc3..a182bc8 100644 --- a/src/shader/Shaders.ts +++ b/src/shader/Shaders.ts @@ -1,26 +1,28 @@ -import ShaderChunk from "./shaderChunk/ShaderChunk"; -import phongVert from "./material/phongVert"; -import phongFrag from "./material/phongFrag"; +import { billboard_fs } from "./material/billboard_fs"; +import { billboard_vs } from "./material/billboard_vs"; import colorFrag from "./material/colorFrag"; import colorVert from "./material/colorVert"; +import pbr_fs from "./material/pbr_fs"; +import pbr_vs from "./material/pbr_vs"; import pbrFrag from "./material/pbrFrag"; import pbrVert from "./material/pbrVert"; -import skyBoxFrag from "./material/skyBoxFrag"; -import skyBoxVert from "./material/skyBoxVert"; +import phongFrag from "./material/phongFrag"; +import phongVert from "./material/phongVert"; import quadFrag from "./material/quadFrag"; import quadVert from "./material/quadVert"; -import pbr_vs from "./material/pbr_vs"; -import pbr_fs from "./material/pbr_fs"; +import skyBoxFrag from "./material/skyBoxFrag"; +import skyBoxVert from "./material/skyBoxVert"; +import blendFrag from "./postProcess/blend/blendFrag"; import Blur from "./postProcess/bloom/Blur"; import LuminosityHigh from "./postProcess/bloom/LuminosityHigh"; -import blendFrag from "./postProcess/blend/blendFrag"; +import ShaderChunk from "./shaderChunk/ShaderChunk"; import shadowMapDebuggerFrag from "./shaderChunk/shadow/shadowMapDebuggerFrag"; import shadowMapDebuggerVert from "./shaderChunk/shadow/shadowMapDebuggerVert"; -import shadowMapVert from "./shaderChunk/shadow/shadowMapVert"; import shadowMapFrag from "./shaderChunk/shadow/shadowMapFrag"; +import shadowMapVert from "./shaderChunk/shadow/shadowMapVert"; function reduceComma(shader) { - //对所有的include处理 + // 对所有的include处理 const str = resolveIncludes(shader); return str; } @@ -70,6 +72,10 @@ const shaders = { shadowMap: { vert: shadowMapVert, frag: shadowMapFrag + }, + billboard: { + vert: billboard_vs, + frag: billboard_fs } }; diff --git a/src/shader/material/billboardFrag.ts b/src/shader/material/billboardFrag.ts deleted file mode 100644 index 817cbb5..0000000 --- a/src/shader/material/billboardFrag.ts +++ /dev/null @@ -1,10 +0,0 @@ -// uniform sampler2D u_BaseColorSampler; -// uniform vec4 u_color; -// varying vec2 v_TexCoord; -// void main() { -// #if defined(M_USE_BILLBOARDTEXTURE) -// gl_FragColor=texture2D(u_BaseColorSampler,vec2(v_TexCoord.x,1.0-v_TexCoord.y)); -// #else -// gl_FragColor = u_color; -// #endif -// } diff --git a/src/shader/material/billboardVert.ts b/src/shader/material/billboardVert.ts deleted file mode 100644 index f963780..0000000 --- a/src/shader/material/billboardVert.ts +++ /dev/null @@ -1,26 +0,0 @@ -// attribute vec3 a_POSITION; -// attribute vec2 a_TEXCOORD_0; -// uniform float u_rotation; -// uniform vec2 u_center; -// uniform mat4 u_modelMatrix; -// uniform mat4 u_modelViewMatrix; -// uniform mat4 u_projectionMatrix; -// varying vec2 v_TexCoord; - -// void main() { -// v_TexCoord= a_TEXCOORD_0; -// vec4 mvPosition = u_modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 ); -// vec2 scale; -// scale.x = length( vec3( u_modelMatrix[ 0 ].x, u_modelMatrix[ 0 ].y, u_modelMatrix[ 0 ].z ) ); -// scale.y = length( vec3( u_modelMatrix[ 1 ].x, u_modelMatrix[ 1 ].y, u_modelMatrix[ 1 ].z ) ); -// #if defined(M_SIZEATTENUATION) -// // bool isPerspective = isPerspectiveMatrix( u_projectionMatrix ); -// scale *= - mvPosition.z; -// #endif -// vec2 alignedPosition = ( a_POSITION.xy - ( u_center - vec2( 0.5 ) ) ) * scale; -// vec2 rotatedPosition; -// rotatedPosition.x = cos( u_rotation ) * alignedPosition.x - sin( u_rotation ) * alignedPosition.y; -// rotatedPosition.y = sin( u_rotation ) * alignedPosition.x + cos( u_rotation ) * alignedPosition.y; -// mvPosition.xy += rotatedPosition; -// gl_Position = u_projectionMatrix * mvPosition; -// } diff --git a/src/shader/material/billboard_fs.ts b/src/shader/material/billboard_fs.ts new file mode 100644 index 0000000..05f8f15 --- /dev/null +++ b/src/shader/material/billboard_fs.ts @@ -0,0 +1,24 @@ +export function billboard_fs(defines) { + return ` + struct SelfUniform { + modelMatrix: mat4x4, + color:vec3, + rotation:f32, + center:vec2, + opacity:f32, + } + @binding(${defines.billboardBinding}) @group(0) var selfUniform : SelfUniform; + #if${defines.USE_COLORTEXTURE} + @group(0) @binding(${defines.baseColorSamplerBinding}) var baseColorSampler: sampler; + @group(0) @binding(${defines.baseColorTextureBinding}) var baseColorTexture: texture_2d; + #endif + @fragment + fn main(input:VertexOutput) -> @location(0) vec4 { + #if${defines.USE_COLORTEXTURE} + return textureSample(baseColorTexture, baseColorSampler, input.uv); + #else + return vec4(selfUniform.color,selfUniform.opacity); + #endif + } + `; +} diff --git a/src/shader/material/billboard_vs.ts b/src/shader/material/billboard_vs.ts new file mode 100644 index 0000000..29edac8 --- /dev/null +++ b/src/shader/material/billboard_vs.ts @@ -0,0 +1,37 @@ +import { wgslParseDefines } from "../WgslPreprocessor"; +export function billboard_vs(defines) { + return wgslParseDefines` + + #include + #include + #include + struct SelfUniform { + modelMatrix: mat4x4, + color:vec3, + rotation:f32, + center:vec2, + opacity:f32, + } + @binding(${defines.billboardBinding}) @group(0) var selfUniform : SelfUniform; + @binding(${defines.cameraBinding}) @group(1) var systemUniform : SystemUniform; + @vertex + fn main(input: VertexInput) -> VertexOutput { + var output:VertexOutput; + let mvPosition:vec4= ystemUniform.viewMatrix *selfUniform.modelMatrix*vec4(0.0,0.0,0.0, 1.0 ); + #if ${defines.HAS_UV} + output.uv=input.uv; + #endif + var scale:vec2; + scale.x = length( vec3( selfUniform.modelMatrix[ 0 ].x, selfUniform.modelMatrix[ 0 ].y, selfUniform.modelMatrix[ 0 ].z ) ); + scale.y = length( vec3( selfUniform.modelMatrix[ 1 ].x, selfUniform.modelMatrix[ 1 ].y, selfUniform.modelMatrix[ 1 ].z ) ); + + vec2 alignedPosition = ( input.position.xy - ( selfUniform.center - vec2( 0.5 ) ) ) * scale; + vec2 rotatedPosition; + rotatedPosition.x = cos( selfUniform.rotation ) * alignedPosition.x - sin( selfUniform.rotation ) * alignedPosition.y; + rotatedPosition.y = sin( selfUniform.rotation ) * alignedPosition.x + cos( selfUniform.rotation ) * alignedPosition.y; + mvPosition.xy += rotatedPosition; + output.position = systemUniform.projectionMatrix * mvPosition; + return output; + } + `; +} diff --git a/src/shader/material/pbr_fs.ts b/src/shader/material/pbr_fs.ts index ce40cab..804dd36 100644 --- a/src/shader/material/pbr_fs.ts +++ b/src/shader/material/pbr_fs.ts @@ -46,49 +46,12 @@ export default function pbr_fs(defines) { }; const M_PI:f32 = 3.141592653589793; const c_MinRoughness:f32 = 0.04; - @binding(${defines.pbrBinding}) @group(0) var materialUniform : MaterialUniform; - @binding(${defines.cameraBinding}) @group(1) var systemUniform : SystemUniform; - // IBL - #if ${defines.USE_IBL} - @group(0) @binding(${defines.specularEnvTextureBinding}) var specularEnvTexture: texture_cube; - @group(0) @binding(${defines.specularEnvSamplerBinding}) var specularEnvSampler: sampler; - #endif - #if ${defines.USE_TEXTURE} - @group(0) @binding(${defines.baseColorTextureBinding}) var baseColorTexture: texture_2d; - @group(0) @binding(${defines.baseColorSamplerBinding}) var baseColorSampler: sampler; - #endif - // normal map - #if ${defines.USE_NORMALTEXTURE} - @group(0) @binding(${defines.normalTextureBinding}) var normalTexture: texture_2d; - @group(0) @binding(${defines.normalSamplerBinding}) var normalSampler: sampler; - #endif - // emmisve map - #if ${defines.USE_EMISSIVETEXTURE} - @group(0) @binding(${defines.emissiveTextureBinding}) var emissiveTexture: texture_2d; - @group(0) @binding(${defines.emissiveSamplerBinding}) var emissiveSampler: sampler; - #endif - - // metal roughness - #if ${defines.USE_METALNESSTEXTURE} - @group(0) @binding(${ - defines.metalnessRoughnessTextureBinding - }) var metalnessRoughnessTexture: texture_2d; - @group(0) @binding(${defines.metalnessRoughnessSamplerBinding}) var metalnessRoughnessSampler: sampler; - #endif - // occlusion texture - #if ${defines.USE_AOTEXTURE} - @group(0) @binding(${defines.aoTextureBinding}) var aoTexture: texture_2d; - @group(0) @binding(${defines.aoSamplerBinding}) var aoSampler: sampler; - #endif - #if ${defines.USE_NORMALTEXTURE} - #include - #include - #else - #include - #endif + #include #if ${defines.USE_IBL} #include #endif + @binding(${defines.pbrBinding}) @group(0) var materialUniform : MaterialUniform; + @binding(${defines.cameraBinding}) @group(1) var systemUniform : SystemUniform; @fragment fn main(input:FragInput) -> @location(0) vec4 { diff --git a/src/shader/material/phongFrag.ts b/src/shader/material/phongFrag.ts index 116b0d3..c3b82bb 100644 --- a/src/shader/material/phongFrag.ts +++ b/src/shader/material/phongFrag.ts @@ -1,17 +1,6 @@ import { wgslParseDefines } from "../WgslPreprocessor"; export default function phongFrag(defines) { return wgslParseDefines` - struct VertInput { - @builtin(position) position: vec4, - @builtin(front_facing) frontFacing: bool, - @location(0) uv: vec2, - @location(1) view: vec3, // Vector from vertex to camera. - @location(2) worldPos: vec3, - @location(3) color: vec4, - @location(4) normal: vec3, - @location(5) viewPosition: vec3, - }; - struct MaterialUniform { modelMatrix: mat4x4, color: vec3, @@ -21,34 +10,14 @@ export default function phongFrag(defines) { shininess:f32, specular:vec3, } - struct SystemUniform { - projectionMatrix: mat4x4, - viewMatrix: mat4x4, - inverseViewMatrix: mat4x4, - cameraPosition: vec3, - }; - - #if${defines.USE_COLORTEXTURE} - @group(0) @binding(${defines.baseColorSamplerBinding}) var baseColorSampler: sampler; - @group(0) @binding(${defines.baseColorTextureBinding}) var baseColorTexture: texture_2d; - #endif - #if ${defines.USE_NORMALTEXTURE} - @group(0) @binding(${defines.normalTextureBinding}) var normalTexture: texture_2d; - @group(0) @binding(${defines.normalSamplerBinding}) var normalSampler: sampler; - #endif + #include + #include + #include + #include @binding(${defines.phongBinding}) @group(0) var materialUniform : MaterialUniform; @binding(${defines.cameraBinding}) @group(1) var systemUniform : SystemUniform; - #if ${defines.USE_NORMALTEXTURE} - #include - #include - #else - #include - #endif - - #include - @fragment - fn main(input:VertInput) -> @location(0) vec4 { + fn main(input:FragInput) -> @location(0) vec4 { var totalEmissiveRadiance:vec3 = materialUniform.emissive; var color:vec4; #if${defines.USE_COLORTEXTURE} diff --git a/src/shader/material/phongVert.ts b/src/shader/material/phongVert.ts index d6d6f62..e08352c 100644 --- a/src/shader/material/phongVert.ts +++ b/src/shader/material/phongVert.ts @@ -1,15 +1,6 @@ import { wgslParseDefines } from "../WgslPreprocessor"; export default function phongVert(defines) { - return ` - struct VertexOutput { - @builtin(position) position: vec4, - @location(0) uv: vec2, - @location(1) view: vec3, // Vector from vertex to camera. - @location(2) worldPos: vec3, - @location(3) color: vec4, - @location(4) normal: vec3, - @location(5) viewPosition: vec3, - }; + return wgslParseDefines` struct MaterialUniform { modelMatrix: mat4x4, color: vec3, @@ -19,25 +10,17 @@ export default function phongVert(defines) { specular:vec3, shininess:f32, } - struct SystemUniform { - projectionMatrix: mat4x4, - viewMatrix: mat4x4, - inverseViewMatrix: mat4x4, - cameraPosition: vec3, - }; - + #include + #include + #include @binding(${defines.phongBinding}) @group(0) var selfUniform : MaterialUniform; @binding(${defines.cameraBinding}) @group(1) var systemUniform : SystemUniform; - - struct VertexInput { - @location(${defines.positionLocation}) position: vec3, - @location(${defines.normalLocation}) normal: vec3, - @location(${defines.uvLocation}) uv: vec2, - } @vertex fn main(input: VertexInput) -> VertexOutput { var output: VertexOutput; - output.uv = input.uv; + #if ${defines.HAS_UV} + output.uv = input.uv; + #endif let modelPos=selfUniform.modelMatrix *vec4(input.position,1.0); output.worldPos = modelPos.xyz/modelPos.w; let vNormalView = selfUniform.normalMatrix * vec4(input.normal,0.0); diff --git a/src/shader/shaderChunk/ShaderChunk.ts b/src/shader/shaderChunk/ShaderChunk.ts index c2f9f7e..c914516 100644 --- a/src/shader/shaderChunk/ShaderChunk.ts +++ b/src/shader/shaderChunk/ShaderChunk.ts @@ -2,6 +2,7 @@ import { FragInput } from "./attribute/FragInput"; import { VertexInput } from "./attribute/VertexInput"; import { VertexOutput } from "./attribute/VertexOutput"; import { SystemUniform } from "./common/SystemUniform"; +import { TextureAndSamplerDefine } from "./common/TextureAndSamplerDefine"; import environment from "./environment/environment"; import { instanceVertHeader, instanceVertMain } from "./instance/Instance"; import light from "./light/light"; @@ -43,6 +44,7 @@ const ShaderChunk = { PbrMaterialStruct, SystemUniform, instanceVertMain, - instanceVertHeader + instanceVertHeader, + TextureAndSamplerDefine }; export default ShaderChunk; diff --git a/src/shader/shaderChunk/attribute/FragInput.ts b/src/shader/shaderChunk/attribute/FragInput.ts index 7592e33..dae6c0b 100644 --- a/src/shader/shaderChunk/attribute/FragInput.ts +++ b/src/shader/shaderChunk/attribute/FragInput.ts @@ -6,9 +6,10 @@ export function FragInput(defines) { @builtin(front_facing) frontFacing: bool, @location(0) worldPos:vec3, @location(1) normal:vec3, - #if ${defines.HAS_UV} - @location(2) uv:vec2 - #endif + @location(2) uv:vec2, + @location(3) view: vec3, // Vector from vertex to camera. + @location(4) color: vec4, + @location(5) viewPosition: vec3, } `; } diff --git a/src/shader/shaderChunk/attribute/VertexOutput.ts b/src/shader/shaderChunk/attribute/VertexOutput.ts index 161d1ee..e66e0b5 100644 --- a/src/shader/shaderChunk/attribute/VertexOutput.ts +++ b/src/shader/shaderChunk/attribute/VertexOutput.ts @@ -6,9 +6,10 @@ export function VertexOutput(defines) { @builtin(position) position:vec4, @location(0) worldPos:vec3, @location(1) normal:vec3, - #if ${defines.HAS_UV} - @location(2) uv:vec2 - #endif + @location(2) uv:vec2, + @location(3) view: vec3, // Vector from vertex to camera. + @location(4) color: vec4, + @location(5) viewPosition: vec3, } `; } diff --git a/src/shader/shaderChunk/common/TextureAndSamplerDefine.ts b/src/shader/shaderChunk/common/TextureAndSamplerDefine.ts new file mode 100644 index 0000000..87d2a10 --- /dev/null +++ b/src/shader/shaderChunk/common/TextureAndSamplerDefine.ts @@ -0,0 +1,41 @@ +import { wgslParseDefines } from "../../WgslPreprocessor"; + +export function TextureAndSamplerDefine(defines) { + return wgslParseDefines` + #if ${defines.USE_IBL} + @group(0) @binding(${defines.specularEnvTextureBinding}) var specularEnvTexture: texture_cube; + @group(0) @binding(${defines.specularEnvSamplerBinding}) var specularEnvSampler: sampler; + #endif + #if ${defines.USE_TEXTURE} + @group(0) @binding(${defines.baseColorTextureBinding}) var baseColorTexture: texture_2d; + @group(0) @binding(${defines.baseColorSamplerBinding}) var baseColorSampler: sampler; + #endif + // normal map + #if ${defines.USE_NORMALTEXTURE} + @group(0) @binding(${defines.normalTextureBinding}) var normalTexture: texture_2d; + @group(0) @binding(${defines.normalSamplerBinding}) var normalSampler: sampler; + #endif + // emmisve map + #if ${defines.USE_EMISSIVETEXTURE} + @group(0) @binding(${defines.emissiveTextureBinding}) var emissiveTexture: texture_2d; + @group(0) @binding(${defines.emissiveSamplerBinding}) var emissiveSampler: sampler; + #endif + + // metal roughness + #if ${defines.USE_METALNESSTEXTURE} + @group(0) @binding(${defines.metalnessRoughnessTextureBinding}) var metalnessRoughnessTexture: texture_2d; + @group(0) @binding(${defines.metalnessRoughnessSamplerBinding}) var metalnessRoughnessSampler: sampler; + #endif + // occlusion texture + #if ${defines.USE_AOTEXTURE} + @group(0) @binding(${defines.aoTextureBinding}) var aoTexture: texture_2d; + @group(0) @binding(${defines.aoSamplerBinding}) var aoSampler: sampler; + #endif + #if ${defines.USE_NORMALTEXTURE} + #include + #include + #else + #include + #endif + `; +} diff --git a/src/shader/shaderChunk/normal/getNormalBackUp.ts b/src/shader/shaderChunk/normal/getNormalBackUp.ts index d676c0a..3c0f3d3 100644 --- a/src/shader/shaderChunk/normal/getNormalBackUp.ts +++ b/src/shader/shaderChunk/normal/getNormalBackUp.ts @@ -16,7 +16,7 @@ export function getNormal(defines) { } export function getNormalByNormalTexture(defines) { return wgslParseDefines` - fn getNormalByNormalTexture(input:VertInput)->vec3{ + fn getNormalByNormalTexture(input:FragInput)->vec3{ var n:vec3 = textureSample(normalTexture,normalSampler, input.uv).rgb; let tbn:mat3x3 =getTBN(input); n = normalize(tbn * (2.0 * n - vec3(1.0))); @@ -27,7 +27,7 @@ export function getNormalByNormalTexture(defines) { } export function getTBN(defines) { return wgslParseDefines` - fn getTBN(input:VertInput)->mat3x3{ + fn getTBN(input:FragInput)->mat3x3{ #if ${defines.HAS_TANGENT} let tbn:mat3x3 = input.tbn; #else diff --git a/src/utils/combine.ts b/src/utils/combine.ts index 41412f6..28a687c 100644 --- a/src/utils/combine.ts +++ b/src/utils/combine.ts @@ -16,7 +16,7 @@ import defined from "./defined"; * const object2 = { * propTwo : 2 * } - * const final = Cesium.combine(object1, object2); + * const final = combine(object1, object2); * * // final === { * // propOne : 1, @@ -33,48 +33,40 @@ import defined from "./defined"; * @function */ function combine(object1, object2, deep) { - deep = defaultValue(deep, false); + deep = defaultValue(deep, false); - const result = {}; + const result = {}; - const object1Defined = defined(object1); - const object2Defined = defined(object2); - let property; - let object1Value; - let object2Value; - if (object1Defined) { - for (property in object1) { - if (object1.hasOwnProperty(property)) { - object1Value = object1[property]; - if ( - object2Defined && - deep && - typeof object1Value === "object" && - object2.hasOwnProperty(property) - ) { - object2Value = object2[property]; - if (typeof object2Value === "object") { - result[property] = combine(object1Value, object2Value, deep); - } else { - result[property] = object1Value; - } - } else { - result[property] = object1Value; - } - } - } - } - if (object2Defined) { - for (property in object2) { - if ( - object2.hasOwnProperty(property) && - !result.hasOwnProperty(property) - ) { - object2Value = object2[property]; - result[property] = object2Value; - } - } - } - return result; + const object1Defined = defined(object1); + const object2Defined = defined(object2); + let property; + let object1Value; + let object2Value; + if (object1Defined) { + for (property in object1) { + if (object1.hasOwnProperty(property)) { + object1Value = object1[property]; + if (object2Defined && deep && typeof object1Value === "object" && object2.hasOwnProperty(property)) { + object2Value = object2[property]; + if (typeof object2Value === "object") { + result[property] = combine(object1Value, object2Value, deep); + } else { + result[property] = object1Value; + } + } else { + result[property] = object1Value; + } + } + } + } + if (object2Defined) { + for (property in object2) { + if (object2.hasOwnProperty(property) && !result.hasOwnProperty(property)) { + object2Value = object2[property]; + result[property] = object2Value; + } + } + } + return result; } export default combine; diff --git a/src/utils/uniformUtils.ts b/src/utils/uniformUtils.ts index ed0c5b2..b3066ca 100644 --- a/src/utils/uniformUtils.ts +++ b/src/utils/uniformUtils.ts @@ -1,4 +1,5 @@ import { IUniform, Uniforms } from "../core/WebGPUTypes"; +import { Mesh } from "../mesh/Mesh"; import ShaderData from "../render/ShaderData"; import UniformBuffer from "../render/UniformBuffer"; import { UniformEnum } from "../render/Uniforms"; @@ -32,6 +33,7 @@ export function addUniformToShaderData( uniform: IUniform, uniforms: Uniforms, shaderData: ShaderData, + mesh?: Mesh, uniformBuffer?: UniformBuffer ) { switch (uniform.type) { @@ -79,6 +81,7 @@ export function addUniformToShaderData( }, UniformEnum.FloatVec4 ); + break; case "mat2": uniformBuffer.setUniform( name, @@ -96,11 +99,16 @@ export function addUniformToShaderData( }, UniformEnum.Mat3 ); + break; case "mat4": uniformBuffer.setUniform( name, () => { - return uniforms[name].value; + return name == "modelMatrix" + ? mesh?.modelMatrix + : name === "normalMatrix" + ? mesh.normalMatrix + : uniforms[name].value; }, UniformEnum.Mat4 ); @@ -157,6 +165,5 @@ export function addUniformToShaderData( break; default: throw new Error("not match unifrom type"); - break; } }