Aero Port Area Calculator – Total Area of Multiple Circular Ports

Aero Port Area Calculator

Aero Port Calculator

Calculate optimal port length for Flared Aero Ports.

Internal volume excluding sub/brace displacement.

Hz
Required Port Length
inches
Total Port Area
sq inches
Area per Cu Ft
sq in / cu ft

Port Efficiency Check

Chuffing Risk Good (12-16) Large
Length

Calculation Steps

 

In many engineering and design projects, you may work with circular openings called ports. These ports can be found in speaker boxes, ventilation systems, air ducts, and other equipment where air or sound needs to pass through.

When there is only one port, calculating its area is simple. But when there are multiple ports, things become more complex. You need to know the total open area to understand airflow, pressure, or sound performance.

Related Calculator:  Accurate Land Area Calculator for 4-Sided Plots — Square Feet, Acres & More

An Aero Port Area Calculator makes this task easy. By entering the diameter of one port and the number of ports, you can instantly find the total area of all openings combined.

This guide explains what an aero port is, how the calculator works, the formulas used, and how to calculate port area step by step.

What the Aero Port Area Calculator Is

An Aero Port Area Calculator is an online tool that calculates the combined area of several circular ports. These ports are usually identical in size and shape.

The calculator is useful for:

  • Speaker and audio enclosure design

  • Ventilation and airflow systems

  • Engineering projects with round openings

  • DIY and technical planning

Instead of manually calculating each port and adding the results, the calculator does it instantly.

How the Aero Port Area Calculator Works

The calculator uses the standard circle area formula and multiplies it by the number of ports.

Required Inputs

You usually need:

  • Diameter of one port (D)

  • Number of ports (N)

  • Unit of measurement (optional)

Output Results

The calculator shows:

  • Total port area

  • Area in square units (cm², in², m², etc.)

This helps you understand how much open space the ports provide.

Key Formulas Used

Area of One Circular Port

A_{port} = \pi \left(\frac{D}{2}\right)^2

Where:

  • D = diameter of the port

Related Calculator:  Octagon Area Calculator — Find the Area of an Eight-Sided Shape

Total Area of Multiple Ports

A_{total} = N \times \pi \left(\frac{D}{2}\right)^2

Where:

  • N = number of ports

These formulas work for any circular opening.

Step-by-Step Examples

Example 1: Two Small Ports

Diameter = 10 cm
Number of ports = 2

Step 1: Find radius
r = 10 \div 2 = 5 \text{ cm}

Step 2: Area of one port
A = \pi \times 5^2 = 78.54 \text{ cm}^2

Step 3: Total area
A_{total} = 2 \times 78.54 = 157.08 \text{ cm}^2

Example 2: Four Large Ports

Diameter = 8 inches
Number of ports = 4

A_{total} = 4 \times \pi \times (4)^2 = 201.06 \text{ in}^2

Example 3: Compare Designs

Design A: 1 port, 12 cm diameter
Design B: 3 ports, 6 cm diameter

Both designs can have similar total areas, even though the number of ports is different.

Features of an Aero Port Area Calculator

Simple Inputs

Only diameter and count are needed.

Fast Results

Calculations are instant.

Accurate Geometry

Uses standard formulas.

Unit Support

Works with many measurement units.

Easy to Use

No technical skills required.

Uses and Applications

Aero port area calculators are widely used in speaker enclosure design. The size and number of ports affect how air moves inside the box, which changes sound quality. Designers use the calculator to match the correct total port area for better bass performance.

In ventilation systems, multiple round vents may be used to move air. The calculator helps engineers ensure enough air can flow through the system without causing pressure problems.

Related Calculator:  Limacon Area Calculator — Compute Area of a Polar Curve

DIY builders also use this tool when creating custom projects with round holes. Knowing the total opening area helps with airflow, cooling, and noise control.

Helpful Tips

Measure Diameter Correctly

Use the full width of the circle.

Keep Units Consistent

Do not mix inches and centimeters.

Count All Ports

Missing one changes the result.

Compare Designs

Different layouts can give similar areas.

Common Mistakes

Using Radius Instead of Diameter

The formula needs diameter.

Forgetting to Multiply by N

Total area needs all ports.

Mixing Units

Always use one unit system.

Rounding Too Early

Round only at the end.

FAQs

What is an aero port?

It is a circular opening for airflow or sound.

Is this for airports?

No, it is for circular ports.

Can I use it for ventilation holes?

Yes, it works for any round opening.

Does port size affect airflow?

Yes, larger area means more airflow.

Is the calculator accurate?

Yes, with correct inputs.

Final Words

An Aero Port Area Calculator is a simple but powerful tool for calculating the total area of multiple circular openings. It saves time, avoids mistakes, and helps in better design decisions.

Whether you are working on a speaker system, ventilation setup, or engineering project, knowing the total port area helps you achieve better performance and efficiency.

Similar Posts

  • Plot Area Calculator – Measure Your Land Size Instantly

    Plot Area Calculator Plot Area Calculator Accurate Construction Plot Measurement & Conversion Rectangle Irregular (4 Sides + Diagonal) Input Unit Feet (ft)Yards (yd)Meters (m) Length Width For precision, measure the 4 perimeter sides and one diagonal connecting opposite corners. Side A (AB) Side B (BC) Side C (CD) Side D (DA) Diagonal (AC, connecting A-B…

  • Equilateral Triangle Area Calculator – Geometry Made Simple

    Equilateral Triangle Calculator Equilateral Triangle Calculator Solve using Side, Height, Area, or Radius Unit cmminft Side Length (a) Height (h) Area (A) Perimeter (P) Inradius (r) Shape Visualization Formula Used: Enter any value to calculate others.   An equilateral triangle is one of the most balanced and symmetrical shapes in geometry. All three sides are…

  • Dome Surface Area Calculator – Easy Spherical Cap Geometry Tool

    Dome Surface Area Calculator Dome Calculator Architectural Surface Area & Volume. Base Radius (r) ftmcmin Base Diameter (d) Dome Height (h) Visualize as Geodesic Dome Roof Surface Area — sq ft Floor Area — sq ft Internal Volume — cu ft Circumference — ft Work Shown   Domes are beautiful curved structures that appear in…

  • Area of Enclosed Region Calculator – Find the Area Inside Curved Boundaries

    // Base64 Content var b64 = “PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KCjxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPHRpdGxlPkFyZWEgb2YgRW5jbG9zZWQgUmVnaW9uIENhbGN1bGF0b3I8L3RpdGxlPgogICAgPHN0eWxlPgogICAgICAgIDpyb290IHsKICAgICAgICAgICAgLS1wcmltYXJ5OiAjZDgxYjYwOwogICAgICAgICAgICAvKiBQaW5rL1Jvc2UgKi8KICAgICAgICAgICAgLS1wcmltYXJ5LWxpZ2h0OiAjZjQ4ZmIxOwogICAgICAgICAgICAtLXNlY29uZGFyeTogIzAwODk3YjsKICAgICAgICAgICAgLyogVGVhbCAqLwogICAgICAgICAgICAtLWJnLXBhZ2U6ICNmZmYwZjU7CiAgICAgICAgICAgIC0tYmctY2FyZDogI2ZmZmZmZjsKICAgICAgICAgICAgLS1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjA4KTsKICAgICAgICAgICAgLS1ib3JkZXI6ICNlZWVlZWU7CiAgICAgICAgfQoKICAgICAgICAqIHsKICAgICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgICAgICBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgc3lzdGVtLXVpLCBzYW5zLXNlcmlmOwogICAgICAgIH0KCiAgICAgICAgYm9keSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLXBhZ2UpOwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgICAgICAgIHBhZGRpbmc6IDMwcHggMTVweDsKICAgICAgICB9CgogICAgICAgIC5jYWxjLWNhcmQgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jYXJkKTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICAgICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93KTsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIG1heC13aWR0aDogODAwcHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDMwcHg7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgIGdhcDogMjBweDsKICAgICAgICB9CgogICAgICAgIC5oZWFkZXIgaDIgewogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIGNvbG9yOiAjMzMzOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgICAgfQoKICAgICAgICAuaGVhZGVyIHAgewogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIGNvbG9yOiAjNzc3OwogICAgICAgICAgICBmb250LXNpemU6IDAuOTVyZW07CiAgICAgICAgfQoKICAgICAgICAvKiBUYWJzICovCiAgICAgICAgLnRhYnMgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmViZWU7CiAgICAgICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICAgIH0KCiAgICAgICAgLnRhYi1idG4gewogICAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICAgICAgICBmb250LXNpemU6IDFyZW07CiAgICAgICAgICAgIGNvbG9yOiAjODgwZTRmOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgdHJhbnNpdGlvbjogMC4yczsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICB9CgogICAgICAgIC50YWItYnRuLmFjdGl2ZSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNkODFiNjA7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMjE2LCAyNywgOTYsIDAuMyk7CiAgICAgICAgfQoKICAgICAgICAvKiBJbnB1dCBBcmVhICovCiAgICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgICBnYXA6IDE1cHg7CiAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZUluIDAuM3M7CiAgICAgICAgfQoKICAgICAgICAuaGlkZGVuIHsKICAgICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIH0KCiAgICAgICAgLmlucHV0LWdyb3VwIGxhYmVsIHsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgICAgY29sb3I6ICM0NDQ7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45cmVtOwogICAgICAgIH0KCiAgICAgICAgLmlucHV0LWJveCB7CiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB9CgogICAgICAgIC5wcmVmaXggewogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIGxlZnQ6IDEwcHg7CiAgICAgICAgICAgIGNvbG9yOiAjOTk5OwogICAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgICAgICBmb250LXNpemU6IDEuMXJlbTsKICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICBpbnB1dCB7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDEycHggMTJweCA2MHB4OwogICAgICAgICAgICAvKiBzcGFjZSBmb3IgcHJlZml4ICovCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjFyZW07CiAgICAgICAgfQoKICAgICAgICAuc2hvcnQtaW4gaW5wdXQgewogICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDE1cHg7CiAgICAgICAgfQoKICAgICAgICAvKiBubyBwcmVmaXggaW5wdXRzICovCgogICAgICAgIC5yb3ctaW5wdXRzIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZ2FwOiAyMHB4OwogICAgICAgIH0KCiAgICAgICAgLmJ0bi1jYWxjIHsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIHBhZGRpbmc6IDE0cHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXByaW1hcnkpOwogICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4xcmVtOwogICAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDMwcHg7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgICAgIHRyYW5zaXRpb246IDAuMnM7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgICAgfQoKICAgICAgICAuYnRuLWNhbGM6aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjYWQxNDU3OwogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICAgICAgfQoKICAgICAgICAvKiBSZXN1bHQgKi8KICAgICAgICAucmVzdWx0LWJveCB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNlMGYyZjE7CiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB2YXIoLS1zZWNvbmRhcnkpOwogICAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KCiAgICAgICAgLnJlc3VsdC10aXRsZSB7CiAgICAgICAgICAgIGNvbG9yOiAjMDA2OTVjOwogICAgICAgICAgICBmb250LXNpemU6IDAuODVyZW07CiAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgICAgfQoKICAgICAgICAucmVzdWx0LXZhbCB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMi4ycmVtOwogICAgICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgICAgICBjb2xvcjogIzAwNGQ0MDsKICAgICAgICAgICAgbWFyZ2luOiA1cHggMDsKICAgICAgICB9CgogICAgICAgIC5yZXN1bHQtZGVzYyB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45cmVtOwogICAgICAgICAgICBjb2xvcjogIzAwNzk2YjsKICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwgMTIxLCAxMDcsIDAuMik7CiAgICAgICAgICAgIHBhZGRpbmdUb3A6IDEwcHg7CiAgICAgICAgfQoKICAgICAgICAvKiBHcmFwaCAqLwogICAgICAgIC5ncmFwaC1hcmVhIHsKICAgICAgICAgICAgaGVpZ2h0OiAzNTBweDsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KCiAgICAgICAgLmVycm9yIHsKICAgICAgICAgICAgY29sb3I6ICNkMzJmMmY7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmNkZDI7CiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgICAgICBmb250LXNpemU6IDAuOXJlbTsKICAgICAgICB9CgogICAgICAgIEBrZXlmcmFtZXMgZmFkZUluIHsKICAgICAgICAgICAgZnJvbSB7CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0byB7CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgPC9zdHlsZT4KPC9oZWFkPgoKPGJvZHk+CgogICAgPGRpdiBjbGFzcz0iY2FsYy1jYXJkIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8aDI+QXJlYSBvZiBFbmNsb3NlZCBSZWdpb24gQ2FsY3VsYXRvcjwvaDI+CiAgICAgICAgICAgIDxwPkNhbGN1bGF0ZSB0aGUgYXJlYSBvZiBsb29wcyAoUGFyYW1ldHJpYyksIHJvc2VzIChQb2xhciksIG9yIGJvdW5kZWQgcmVnaW9ucy48L3A+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InRhYnMiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0YWItYnRuIGFjdGl2ZSIgb25jbGljaz0ic2V0TW9kZSgncGFyYW1ldHJpYycpIj5QYXJhbWV0cmljPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRhYi1idG4iIG9uY2xpY2s9InNldE1vZGUoJ3BvbGFyJykiPlBvbGFyPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRhYi1idG4iIG9uY2xpY2s9InNldE1vZGUoJ2NhcnRlc2lhbicpIj5DYXJ0ZXNpYW48L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBQYXJhbWV0cmljIElucHV0cyAtLT4KICAgICAgICA8ZGl2IGlkPSJpbnBfcGFyYW1ldHJpYyIgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ctaW5wdXRzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIiBzdHlsZT0iZmxleDoxIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+eCh0KSBGdW5jdGlvbjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYm94Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByZWZpeCI+eCh0KT08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icF94dCIgdmFsdWU9ImNvcyh0KV4zIiBwbGFjZWhvbGRlcj0iZS5nLiBjb3ModCleMyI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIiBzdHlsZT0iZmxleDoxIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+eSh0KSBGdW5jdGlvbjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYm94Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByZWZpeCI+eSh0KT08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icF95dCIgdmFsdWU9InNpbih0KV4zIiBwbGFjZWhvbGRlcj0iZS5nLiBzaW4odCleMyI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdy1pbnB1dHMgc2hvcnQtaW4iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiIHN0eWxlPSJmbGV4OjEiPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbD5TdGFydCB0PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0icF90MSIgdmFsdWU9IjAiPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCIgc3R5bGU9ImZsZXg6MSI+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPkVuZCB0PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0icF90MiIgdmFsdWU9IjYuMjgzMTgiPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIFBvbGFyIElucHV0cyAtLT4KICAgICAgICA8ZGl2IGlkPSJpbnBfcG9sYXIiIGNsYXNzPSJpbnB1dC13cmFwcGVyIGhpZGRlbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgICAgICAgICAgIDxsYWJlbD5SYWRpdXMgcijOuCk8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYm94Ij4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJlZml4Ij5yKM64KT08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJwb2xfciIgdmFsdWU9IjIqY29zKDMqdGhldGEpIiBwbGFjZWhvbGRlcj0iZS5nLiAyKmNvcygzKnRoZXRhKSI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdy1pbnB1dHMgc2hvcnQtaW4iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiIHN0eWxlPSJmbGV4OjEiPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbD5TdGFydCDOuDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9InBvbF90aDEiIHZhbHVlPSIwIj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiIHN0eWxlPSJmbGV4OjEiPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbD5FbmQgzrg8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJwb2xfdGgyIiB2YWx1ZT0iMy4xNDE1OSI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gQ2FydGVzaWFuIElucHV0cyAtLT4KICAgICAgICA8ZGl2IGlkPSJpbnBfY2FydGVzaWFuIiBjbGFzcz0iaW5wdXQtd3JhcHBlciBoaWRkZW4iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ctaW5wdXRzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIiBzdHlsZT0iZmxleDoxIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+VXBwZXIgQ3VydmU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWJveCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcmVmaXgiPmYoeCk9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImNfZngiIHZhbHVlPSJ4IiBwbGFjZWhvbGRlcj0iZS5nLiB4Ij4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiIHN0eWxlPSJmbGV4OjEiPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbD5Mb3dlciBDdXJ2ZTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtYm94Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByZWZpeCI+Zyh4KT08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iY19neCIgdmFsdWU9InheMiIgcGxhY2Vob2xkZXI9ImUuZy4geF4yIj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93LWlucHV0cyBzaG9ydC1pbiI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCIgc3R5bGU9ImZsZXg6MSI+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlN0YXJ0IHg8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJjX3gxIiB2YWx1ZT0iMCI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIiBzdHlsZT0iZmxleDoxIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+RW5kIHg8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJjX3gyIiB2YWx1ZT0iMSI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0bi1jYWxjIiBvbmNsaWNrPSJjYWxjdWxhdGUoKSI+Q2FsY3VsYXRlIEFyZWE8L2J1dHRvbj4KICAgICAgICA8ZGl2IGNsYXNzPSJlcnJvciIgaWQ9ImVycl9tc2ciPjwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJyZXN1bHQtYm94IiBpZD0icmVzX2JveCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlc3VsdC10aXRsZSI+RW5jbG9zZWQgQXJlYTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXN1bHQtdmFsIiBpZD0icmVzX3ZhbCI+LS08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVzdWx0LWRlc2MiIGlkPSJyZXNfZGVzYyI+PC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImdyYXBoLWFyZWEiPgogICAgICAgICAgICA8Y2FudmFzIGlkPSJjYW52YXMiPjwvY2FudmFzPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPHNjcmlwdD4KICAgICAgICAvKiAtLS0gTWF0aCBFbmdpbmUgKEFTVCkgLS0tICovCiAgICAgICAgY29uc3QgTWF0aEVuZ2luZSA9ICgoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IFQgPSB7IE46IDEsIEk6IDIsIE9wOiAzLCBMUDogNCwgUlA6IDUsIEVPRjogNiB9OwogICAgICAgICAgICBmdW5jdGlvbiB0b2socykgewogICAgICAgICAgICAgICAgY29uc3QgdCA9IFtdOyBsZXQgaSA9IDA7CiAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IHMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgYyA9IHNbaV07CiAgICAgICAgICAgICAgICAgICAgaWYgKC9ccy8udGVzdChjKSkgeyBpKys7IGNvbnRpbnVlOyB9CiAgICAgICAgICAgICAgICAgICAgaWYgKC9bMC05Ll0vLnRlc3QoYykpIHsgbGV0IG4gPSAnJzsgd2hpbGUgKGkgPCBzLmxlbmd0aCAmJiAvWzAtOS5dLy50ZXN0KHNbaV0pKSBuICs9IHNbaSsrXTsgdC5wdXNoKHsgdHlwZTogVC5OLCB2aXM6IHBhcnNlRmxvYXQobikgfSk7IH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgvW2Etel0vLnRlc3QoYykpIHsgbGV0IGlkID0gJyc7IHdoaWxlIChpIDwgcy5sZW5ndGggJiYgL1thLXowLTldLy50ZXN0KHNbaV0pKSBpZCArPSBzW2krK107IHQucHVzaCh7IHR5cGU6IFQuSSwgdmlzOiBpZC50b0xvd2VyQ2FzZSgpIH0pOyB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoJystKi9eJy5pbmNsdWRlcyhjKSkgeyB0LnB1c2goeyB0eXBlOiBULk9wLCB2aXM6IGMgfSk7IGkrKzsgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09ICcoJykgeyB0LnB1c2goeyB0eXBlOiBULkxQIH0pOyBpKys7IH0gZWxzZSBpZiAoYyA9PT0gJyknKSB7IHQucHVzaCh7IHR5cGU6IFQuUlAgfSk7IGkrKzsgfSBlbHNlIGkrKzsKICAgICAgICAgICAgICAgIH0gdC5wdXNoKHsgdHlwZTogVC5FT0YgfSk7IHJldHVybiB0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNsYXNzIFAgewogICAgICAgICAgICAgICAgY29uc3RydWN0b3IodHMpIHsgdGhpcy50cyA9IHRzOyB0aGlzLnAgPSAwOyB9CiAgICAgICAgICAgICAgICBwZWVrKCkgeyByZXR1cm4gdGhpcy50c1t0aGlzLnBdOyB9CiAgICAgICAgICAgICAgICBjb25zdW1lKCkgeyByZXR1cm4gdGhpcy50c1t0aGlzLnArK107IH0KICAgICAgICAgICAgICAgIHBhcnNlKCkgeyByZXR1cm4gdGhpcy5FKCk7IH0KICAgICAgICAgICAgICAgIEUoKSB7IGxldCBsID0gdGhpcy5UZW0oKTsgd2hpbGUgKHRoaXMucGVlaygpLnZpcyA9PT0gJysnIHx8IHRoaXMucGVlaygpLnZpcyA9PT0gJy0nKSB7IGNvbnN0IG8gPSB0aGlzLmNvbnN1bWUoKS52aXM7IGwgPSB7IHR5cGU6ICdCJywgb3A6IG8sIGwsIHI6IHRoaXMuVGVtKCkgfTsgfSByZXR1cm4gbDsgfQogICAgICAgICAgICAgICAgVGVtKCkgeyBsZXQgbCA9IHRoaXMuRmFjKCk7IHdoaWxlICh0aGlzLnBlZWsoKS52aXMgPT09ICcqJyB8fCB0aGlzLnBlZWsoKS52aXMgPT09ICcvJykgeyBjb25zdCBvID0gdGhpcy5jb25zdW1lKCkudmlzOyBsID0geyB0eXBlOiAnQicsIG9wOiBvLCBsLCByOiB0aGlzLkZhYygpIH07IH0gcmV0dXJuIGw7IH0KICAgICAgICAgICAgICAgIEZhYygpIHsgbGV0IGwgPSB0aGlzLkJhcygpOyBpZiAodGhpcy5wZWVrKCkudmlzID09PSAnXicpIHsgdGhpcy5jb25zdW1lKCk7IGwgPSB7IHR5cGU6ICdCJywgb3A6ICdeJywgbCwgcjogdGhpcy5GYWMoKSB9OyB9IHJldHVybiBsOyB9CiAgICAgICAgICAgICAgICBCYXMoKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdCA9IHRoaXMucGVlaygpOwogICAgICAgICAgICAgICAgICAgIGlmICh0LnR5cGUgPT09IFQuTikgcmV0dXJuIHsgdHlwZTogJ0wnLCB2OiB0aGlzLmNvbnN1bWUoKS52aXMgfTsKICAgICAgICAgICAgICAgICAgICBpZiAodC50eXBlID09PSBULkkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbiA9IHRoaXMuY29uc3VtZSgpLnZpczsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGVlaygpLnR5cGUgPT09IFQuTFApIHsgdGhpcy5jb25zdW1lKCk7IGNvbnN0IGEgPSB0aGlzLkUoKTsgdGhpcy5jb25zdW1lKCk7IHJldHVybiB7IHR5cGU6ICdDJywgbiwgYSB9OyB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChbJ3gnLCAndCcsICd0aGV0YSddLmluY2x1ZGVzKG4pKSByZXR1cm4geyB0eXBlOiAnVicgfTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPT09ICdwaScpIHJldHVybiB7IHR5cGU6ICdMJywgdjogTWF0aC5QSSB9OwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9PT0gJ2UnKSByZXR1cm4geyB0eXBlOiAnTCcsIHY6IE1hdGguRSB9OwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiAnTCcsIHY6IDAgfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHQudHlwZSA9PT0gVC5MUCkgeyB0aGlzLmNvbnN1bWUoKTsgY29uc3QgZSA9IHRoaXMuRSgpOyB0aGlzLmNvbnN1bWUoKTsgcmV0dXJuIGU7IH0KICAgICAgICAgICAgICAgICAgICBpZiAodC52aXMgPT09ICctJykgeyB0aGlzLmNvbnN1bWUoKTsgcmV0dXJuIHsgdHlwZTogJ1UnLCBvcDogJy0nLCBhOiB0aGlzLkJhcygpIH07IH0KICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTsgcmV0dXJuIHsgdHlwZTogJ0wnLCB2OiAwIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gZXYobiwgeCkgewogICAgICAgICAgICAgICAgaWYgKCFuKSByZXR1cm4gMDsgaWYgKG4udHlwZSA9PT0gJ0wnKSByZXR1cm4gbi52OyBpZiAobi50eXBlID09PSAnVicpIHJldHVybiB4OwogICAgICAgICAgICAgICAgaWYgKG4udHlwZSA9PT0gJ0InKSB7IGNvbnN0IGwgPSBldihuLmwsIHgpLCByID0gZXYobi5yLCB4KTsgc3dpdGNoIChuLm9wKSB7IGNhc2UgJysnOiByZXR1cm4gbCArIHI7IGNhc2UgJy0nOiByZXR1cm4gbCAtIHI7IGNhc2UgJyonOiByZXR1cm4gbCAqIHI7IGNhc2UgJy8nOiByZXR1cm4gbCAvIHI7IGNhc2UgJ14nOiByZXR1cm4gTWF0aC5wb3cobCwgcik7IH0gfQogICAgICAgICAgICAgICAgaWYgKG4udHlwZSA9PT0gJ1UnKSByZXR1cm4gLWV2KG4uYSwgeCk7CiAgICAgICAgICAgICAgICBpZiAobi50eXBlID09PSAnQycpIHsgY29uc3QgYSA9IGV2KG4uYSwgeCk7IHN3aXRjaCAobi5uKSB7IGNhc2UgJ3Npbic6IHJldHVybiBNYXRoLnNpbihhKTsgY2FzZSAnY29zJzogcmV0dXJuIE1hdGguY29zKGEpOyBjYXNlICd0YW4nOiByZXR1cm4gTWF0aC50YW4oYSk7IGNhc2UgJ3NxcnQnOiByZXR1cm4gTWF0aC5zcXJ0KGEpOyBjYXNlICdhYnMnOiByZXR1cm4gTWF0aC5hYnMoYSk7IGNhc2UgJ2xuJzogcmV0dXJuIE1hdGgubG9nKGEpOyB9IH0KICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB7IGM6IHMgPT4geyB0cnkgeyBjb25zdCBhc3QgPSBuZXcgUCh0b2socykpLnBhcnNlKCk7IHJldHVybiB4ID0+IGV2KGFzdCwgeCk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGw7IH0gfSB9OwogICAgICAgIH0pKCk7CgogICAgICAgIC8qIC0tLSBJbnRlZ3JhdGlvbiAmIExvZ2ljIC0tLSAqLwogICAgICAgIGZ1bmN0aW9uIGFkYXB0aXZlU2ltcHNvbnMoZiwgYSwgYiwgZXBzID0gMWUtNSkgewogICAgICAgICAgICBjb25zdCBtaWQgPSAoYSArIGIpIC8gMiwgaCA9IChiIC0gYSkgLyAyOwogICAgICAgICAgICBjb25zdCBTID0gKGggLyAzKSAqIChmKGEpICsgNCAqIGYobWlkKSArIGYoYikpOwogICAgICAgICAgICBjb25zdCByZWMgPSAobCwgciwgZSwgU19wcmV2LCBkKSA9PiB7CiAgICAgICAgICAgICAgICBpZiAoZCA+IDE1KSByZXR1cm4gU19wcmV2OwogICAgICAgICAgICAgICAgY29uc3QgbSA9IChsICsgcikgLyAyLCBoMiA9IChyIC0gbCkgLyAyOwogICAgICAgICAgICAgICAgY29uc3QgTFMgPSAoaDIgLyA2KSAqIChmKGwpICsgNCAqIGYoKGwgKyBtKSAvIDIpICsgZihtKSk7CiAgICAgICAgICAgICAgICBjb25zdCBSUyA9IChoMiAvIDYpICogKGYobSkgKyA0ICogZigobSArIHIpIC8gMikgKyBmKHIpKTsKICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhMUyArIFJTIC0gU19wcmV2KSA8PSAxNSAqIGUpIHJldHVybiBMUyArIFJTICsgKExTICsgUlMgLSBTX3ByZXYpIC8gMTU7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVjKGwsIG0sIGUgLyAyLCBMUywgZCArIDEpICsgcmVjKG0sIHIsIGUgLyAyLCBSUywgZCArIDEpOwogICAgICAgICAgICB9OwogICAgICAgICAgICByZXR1cm4gcmVjKGEsIGIsIGVwcywgUywgMCk7CiAgICAgICAgfQoKICAgICAgICAvLyBEZXJpdmF0aXZlIGVzdGltYXRpb24gZm9yIFBhcmFtZXRyaWMgQXJlYSAoeSAqIHgnKQogICAgICAgIGZ1bmN0aW9uIGRlcml2YXRpdmUoZiwgeCwgaCA9IDFlLTUpIHsKICAgICAgICAgICAgcmV0dXJuIChmKHggKyBoKSAtIGYoeCAtIGgpKSAvICgyICogaCk7CiAgICAgICAgfQoKICAgICAgICBsZXQgY3VyTW9kZSA9ICdwYXJhbWV0cmljJzsKCiAgICAgICAgZnVuY3Rpb24gc2V0TW9kZShtKSB7CiAgICAgICAgICAgIGN1ck1vZGUgPSBtOwogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGFiLWJ0bicpLmZvckVhY2goYiA9PiBiLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpKTsKICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRhYi1idG4nKVttID09PSAncGFyYW1ldHJpYycgPyAwIDogbSA9PT0gJ3BvbGFyJyA/IDEgOiAyXS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKCiAgICAgICAgICAgIFsnaW5wX3BhcmFtZXRyaWMnLCAnaW5wX3BvbGFyJywgJ2lucF9jYXJ0ZXNpYW4nXS5mb3JFYWNoKGlkID0+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKSk7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbnBfJyArIG0pLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpOwoKICAgICAgICAgICAgLy8gSGlkZSByZXN1bHQgb24gbW9kZSBzd2l0Y2gKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc19ib3gnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyX21zZycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBjYWxjdWxhdGUoKSB7CiAgICAgICAgICAgIGNvbnN0IGVyciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcnJfbXNnJyk7CiAgICAgICAgICAgIGNvbnN0IHJlc0JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXNfYm94Jyk7CiAgICAgICAgICAgIGVyci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICByZXNCb3guc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCiAgICAgICAgICAgIGxldCBhcmVhID0gMDsKICAgICAgICAgICAgbGV0IHBvaW50cyA9IFtdOwogICAgICAgICAgICBsZXQgZGVzYyA9ICIiOwoKICAgICAgICAgICAgaWYgKGN1ck1vZGUgPT09ICdwYXJhbWV0cmljJykgewogICAgICAgICAgICAgICAgY29uc3Qgc3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncF94dCcpLnZhbHVlOwogICAgICAgICAgICAgICAgY29uc3Qgc3kgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncF95dCcpLnZhbHVlOwogICAgICAgICAgICAgICAgY29uc3QgZnggPSBNYXRoRW5naW5lLmMoc3gpOwogICAgICAgICAgICAgICAgY29uc3QgZnkgPSBNYXRoRW5naW5lLmMoc3kpOwogICAgICAgICAgICAgICAgY29uc3QgdDEgPSBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwX3QxJykudmFsdWUpOwogICAgICAgICAgICAgICAgY29uc3QgdDIgPSBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwX3QyJykudmFsdWUpOwoKICAgICAgICAgICAgICAgIGlmICghZnggfHwgIWZ5KSB7IGVyci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsgZXJyLmlubmVyVGV4dCA9ICJJbnZhbGlkIFBhcmFtZXRyaWMgRnVuY3Rpb25zIjsgcmV0dXJuOyB9CgogICAgICAgICAgICAgICAgLy8gQXJlYSA9IEludGVncmFsIHkodCkgKiB4Jyh0KSBkdCAgKG9yIHggeScgZHQsIHNpZ24gZGVwZW5kcyBvbiBkaXJlY3Rpb24pCiAgICAgICAgICAgICAgICAvLyBPZnRlbiBBcmVhID0gSW50ZWdyYWwgfHkgKiB4J3wgPyBObywgR3JlZW4ncyBpcyAwLjUgSW50ZWdyYWwgKHggZHkgLSB5IGR4KSBvciBqdXN0IHkgZHguCiAgICAgICAgICAgICAgICAvLyBVc2luZyB5KHQpICogeCcodCkgZ2l2ZXMgc2lnbmVkIGFyZWEuIFdlIHVzdWFsbHkgd2FudCBBYnNvbHV0ZSBlbmNsb3NlZCBhcmVhLgogICAgICAgICAgICAgICAgLy8gR3JlZW4ncyBUaGVvcmVtIHN5bW1ldHJpYyBmb3JtOiAwLjUgKiBJbnRlZ3JhbCAoeCp5JyAtIHkqeCcpIGR0CiAgICAgICAgICAgICAgICBjb25zdCBpbnRlZ3JhbmQgPSB0ID0+IHsKICAgICAgICAgICAgICAgICAgICBjb25zdCB4ID0gZngodCksIHkgPSBmeSh0KTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBkeCA9IGRlcml2YXRpdmUoZngsIHQpLCBkeSA9IGRlcml2YXRpdmUoZnksIHQpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjUgKiAoeCAqIGR5IC0geSAqIGR4KTsKICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4geSAqIGR4OyAvLyBTdGFuZGFyZCB5IGR4CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIC8vIEZvciBsb29wcyBsaWtlIEFzdHJvaWQgKGNvc14zLCBzaW5eMyksIHRoZSBzeW1tZXRyaWMgZm9ybSBpcyByb2J1c3QuCiAgICAgICAgICAgICAgICBhcmVhID0gTWF0aC5hYnMoYWRhcHRpdmVTaW1wc29ucyhpbnRlZ3JhbmQsIHQxLCB0MikpOwogICAgICAgICAgICAgICAgZGVzYyA9IGBDYWxjdWxhdGVkIHVzaW5nIEdyZWVuJ3MgVGhlb3JlbSBmb3IgUGFyYW1ldHJpYyBDdXJ2ZXM6IEEgPSAwLjUg4oirKHggZHkgLSB5IGR4KWA7CgogICAgICAgICAgICAgICAgLy8gR2VuIHBvaW50cwogICAgICAgICAgICAgICAgZm9yIChsZXQgdCA9IHQxOyB0IDw9IHQyOyB0ICs9ICh0MiAtIHQxKSAvIDIwMCkgcG9pbnRzLnB1c2goeyB4OiBmeCh0KSwgeTogZnkodCkgfSk7CgogICAgICAgICAgICB9IGVsc2UgaWYgKGN1ck1vZGUgPT09ICdwb2xhcicpIHsKICAgICAgICAgICAgICAgIGNvbnN0IHNyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvbF9yJykudmFsdWU7CiAgICAgICAgICAgICAgICBjb25zdCBmciA9IE1hdGhFbmdpbmUuYyhzcik7CiAgICAgICAgICAgICAgICBjb25zdCB0aDEgPSBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb2xfdGgxJykudmFsdWUpOwogICAgICAgICAgICAgICAgY29uc3QgdGgyID0gcGFyc2VGbG9hdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9sX3RoMicpLnZhbHVlKTsKCiAgICAgICAgICAgICAgICBpZiAoIWZyKSB7IGVyci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsgZXJyLmlubmVyVGV4dCA9ICJJbnZhbGlkIFBvbGFyIEZ1bmN0aW9uIjsgcmV0dXJuOyB9CgogICAgICAgICAgICAgICAgLy8gQXJlYSA9IDAuNSAqIEludGVncmFsIChyXjIpIGRUaGV0YQogICAgICAgICAgICAgICAgY29uc3QgaW50ZWdyYW5kID0gdGggPT4gewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBmcih0aCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuNSAqIHIgKiByOwogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBhcmVhID0gYWRhcHRpdmVTaW1wc29ucyhpbnRlZ3JhbmQsIHRoMSwgdGgyKTsKICAgICAgICAgICAgICAgIGRlc2MgPSAiQ2FsY3VsYXRlZCB1c2luZyBQb2xhciBBcmVhIEZvcm11bGE6IEEgPSAxLzIg4oirIHLCsiBkzrgiOwoKICAgICAgICAgICAgICAgIC8vIEdlbiBwb2ludHMKICAgICAgICAgICAgICAgIGZvciAobGV0IHRoID0gdGgxOyB0aCA8PSB0aDI7IHRoICs9ICh0aDIgLSB0aDEpIC8gMjAwKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IGZyKHRoKTsKICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHIgKiBNYXRoLmNvcyh0aCksIHk6IHIgKiBNYXRoLnNpbih0aCkgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9IGVsc2UgeyAvLyBDYXJ0ZXNpYW4KICAgICAgICAgICAgICAgIGNvbnN0IHNmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NfZngnKS52YWx1ZTsKICAgICAgICAgICAgICAgIGNvbnN0IHNnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NfZ3gnKS52YWx1ZTsKICAgICAgICAgICAgICAgIGNvbnN0IGZmID0gTWF0aEVuZ2luZS5jKHNmKSwgZmcgPSBNYXRoRW5naW5lLmMoc2cpOwogICAgICAgICAgICAgICAgY29uc3QgeDEgPSBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjX3gxJykudmFsdWUpOwogICAgICAgICAgICAgICAgY29uc3QgeDIgPSBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjX3gyJykudmFsdWUpOwoKICAgICAgICAgICAgICAgIGlmICghZmYgfHwgIWZnKSB7IGVyci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsgZXJyLmlubmVyVGV4dCA9ICJJbnZhbGlkIEZ1bmN0aW9ucyI7IHJldHVybjsgfQoKICAgICAgICAgICAgICAgIGNvbnN0IGludGVncmFuZCA9IHggPT4gTWF0aC5hYnMoZmYoeCkgLSBmZyh4KSk7IC8vIEFyZWEgRW5jbG9zZWQgPSB8Zi1nfAogICAgICAgICAgICAgICAgYXJlYSA9IGFkYXB0aXZlU2ltcHNvbnMoaW50ZWdyYW5kLCB4MSwgeDIpOwogICAgICAgICAgICAgICAgZGVzYyA9ICJDYWxjdWxhdGVkIHVzaW5nIENhcnRlc2lhbiBJbnRlZ3JhdGlvbjogQSA9IOKIqyB8Zih4KSAtIGcoeCl8IGR4IjsKCiAgICAgICAgICAgICAgICBmb3IgKGxldCB4ID0geDE7IHggPD0geDI7IHggKz0gKHgyIC0geDEpIC8gMjAwKSBwb2ludHMucHVzaCh7IHgsIHkxOiBmZih4KSwgeTI6IGZnKHgpIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBTaG93CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXNfdmFsJykuaW5uZXJUZXh0ID0gYXJlYS50b0ZpeGVkKDUpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzX2Rlc2MnKS5pbm5lclRleHQgPSBkZXNjOwogICAgICAgICAgICByZXNCb3guc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CgogICAgICAgICAgICBkcmF3KHBvaW50cyk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBkcmF3KHB0cykgewogICAgICAgICAgICBjb25zdCBjdnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FudmFzJyk7CiAgICAgICAgICAgIGNvbnN0IGN0eCA9IGN2cy5nZXRDb250ZXh0KCcyZCcpOwogICAgICAgICAgICBjb25zdCB3ID0gY3ZzLnBhcmVudEVsZW1lbnQuY2xpZW50V2lkdGg7CiAgICAgICAgICAgIGNvbnN0IGggPSBjdnMucGFyZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7CiAgICAgICAgICAgIGN2cy53aWR0aCA9IHc7IGN2cy5oZWlnaHQgPSBoOwoKICAgICAgICAgICAgaWYgKCFwdHMubGVuZ3RoKSByZXR1cm47CgogICAgICAgICAgICAvLyBCb3VuZHMKICAgICAgICAgICAgbGV0IHhzID0gW10sIHlzID0gW107CiAgICAgICAgICAgIGlmIChjdXJNb2RlID09PSAnY2FydGVzaWFuJykgewogICAgICAgICAgICAgICAgeHMgPSBwdHMubWFwKHAgPT4gcC54KTsKICAgICAgICAgICAgICAgIHlzID0gcHRzLm1hcChwID0+IHAueTEpLmNvbmNhdChwdHMubWFwKHAgPT4gcC55MikpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgeHMgPSBwdHMubWFwKHAgPT4gcC54KTsKICAgICAgICAgICAgICAgIHlzID0gcHRzLm1hcChwID0+IHAueSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxldCBtaW5YID0gTWF0aC5taW4oLi4ueHMpLCBtYXhYID0gTWF0aC5tYXgoLi4ueHMpOwogICAgICAgICAgICBsZXQgbWluWSA9IE1hdGgubWluKC4uLnlzKSwgbWF4WSA9IE1hdGgubWF4KC4uLnlzKTsKCiAgICAgICAgICAgIC8vIFBhZAogICAgICAgICAgICBjb25zdCBweCA9IChtYXhYIC0gbWluWCkgKiAwLjIgfHwgMiwgcHkgPSAobWF4WSAtIG1pblkpICogMC4yIHx8IDI7CiAgICAgICAgICAgIG1pblggLT0gcHg7IG1heFggKz0gcHg7IG1pblkgLT0gcHk7IG1heFkgKz0gcHk7CgogICAgICAgICAgICAvLyBBc3BlY3QgUmF0aW8gRml4IChmb3IgcG9sYXJzL2NpcmNsZXMgdG8gbG9vayByb3VuZCkKICAgICAgICAgICAgY29uc3QgcmFuZ2VYID0gbWF4WCAtIG1pblgsIHJhbmdlWSA9IG1heFkgLSBtaW5ZOwogICAgICAgICAgICBpZiAocmFuZ2VYID4gcmFuZ2VZKSB7CiAgICAgICAgICAgICAgICBjb25zdCBtaWRZID0gKG1pblkgKyBtYXhZKSAvIDI7CiAgICAgICAgICAgICAgICBtaW5ZID0gbWlkWSAtIHJhbmdlWCAvIDI7IG1heFkgPSBtaWRZICsgcmFuZ2VYIC8gMjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnN0IG1pZFggPSAobWluWCArIG1heFgpIC8gMjsKICAgICAgICAgICAgICAgIG1pblggPSBtaWRYIC0gcmFuZ2VZIC8gMjsgbWF4WCA9IG1pZFggKyByYW5nZVkgLyAyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjb25zdCB0b0N4ID0geCA9PiAoeCAtIG1pblgpIC8gKG1heFggLSBtaW5YKSAqIHc7CiAgICAgICAgICAgIGNvbnN0IHRvQ3kgPSB5ID0+IGggLSAoeSAtIG1pblkpIC8gKG1heFkgLSBtaW5ZKSAqIGg7CgogICAgICAgICAgICAvLyBBeGVzCiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9ICcjZTBlMGUwJzsKICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICBjb25zdCBveCA9IHRvQ3goMCksIG95ID0gdG9DeSgwKTsKICAgICAgICAgICAgY3R4Lm1vdmVUbygwLCBveSk7IGN0eC5saW5lVG8odywgb3kpOwogICAgICAgICAgICBjdHgubW92ZVRvKG94LCAwKTsgY3R4LmxpbmVUbyhveCwgaCk7CiAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKCiAgICAgICAgICAgIC8vIERyYXcgU2hhcGUKICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gJyNkODFiNjAnOwogICAgICAgICAgICBjdHgubGluZVdpZHRoID0gMjsKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICdyZ2JhKDIxNiwgMjcsIDk2LCAwLjE1KSc7IC8vIEZpbGwgYXJlYQoKICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICBpZiAoY3VyTW9kZSA9PT0gJ2NhcnRlc2lhbicpIHsKICAgICAgICAgICAgICAgIC8vIERyYXcgcG9seWdvbjogVG9wIGN1cnZlIGZ3ZCwgQm90dG9tIGN1cnZlIGJhY2sKICAgICAgICAgICAgICAgIC8vIHB0cyBoYXMgeCwgeTEsIHkyCiAgICAgICAgICAgICAgICAvLyBGaXJzdCB0cmFjZSB5MSAoVXBwZXIgaXMgYXJiaXRyYXJ5LCB3ZSBqdXN0IHRyYWNlIG9uZSB0aGVuIG90aGVyKQogICAgICAgICAgICAgICAgbGV0IHN0YXJ0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGZvciAobGV0IHAgb2YgcHRzKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3ggPSB0b0N4KHAueCksIGN5ID0gdG9DeShwLnkxKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0ZWQpIHsgY3R4Lm1vdmVUbyhjeCwgY3kpOyBzdGFydGVkID0gdHJ1ZTsgfSBlbHNlIGN0eC5saW5lVG8oY3gsIGN5KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIFRyYWNlIGJhY2sgeTIKICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBwdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRvKHRvQ3gocHRzW2ldLngpLCB0b0N5KHB0c1tpXS55MikpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpOwogICAgICAgICAgICAgICAgY3R4LmZpbGwoKTsgY3R4LnN0cm9rZSgpOwoKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIFBhcmFtZXRyaWMvUG9sYXIgaXMgdXN1YWxseSBhIGxvb3Agb3IgbGluZQogICAgICAgICAgICAgICAgbGV0IHN0YXJ0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGZvciAobGV0IHAgb2YgcHRzKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3ggPSB0b0N4KHAueCksIGN5ID0gdG9DeShwLnkpOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhcnRlZCkgeyBjdHgubW92ZVRvKGN4LCBjeSk7IHN0YXJ0ZWQgPSB0cnVlOyB9IGVsc2UgY3R4LmxpbmVUbyhjeCwgY3kpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gQ2xvc2UgbG9vcCBmb3IgZmlsbGluZwogICAgICAgICAgICAgICAgaWYgKGN1ck1vZGUgPT09ICdwb2xhcicpIGN0eC5saW5lVG8ob3gsIG95KTsgLy8gUG9sYXIgdXN1YWxseSByYWRpYXRlcyBmcm9tIGNlbnRlciAKICAgICAgICAgICAgICAgIGVsc2UgY3R4LmNsb3NlUGF0aCgpOyAvLyBQYXJhbWV0cmljIGxvb3AKCiAgICAgICAgICAgICAgICBjdHguZmlsbCgpOyBjdHguc3Ryb2tlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIEluaXQgZGVmYXVsdAogICAgICAgIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIC8vIHNsaWdodCBkZWxheSB0byBlbnN1cmUgc2l6ZQogICAgICAgICAgICBzZXRUaW1lb3V0KGNhbGN1bGF0ZSwgMTAwKTsKICAgICAgICB9OwoKICAgIDwvc2NyaXB0Pgo8L2JvZHk+Cgo8L2h0bWw+”; var htmlContent = “”; try { htmlContent = atob(b64); } catch (e) { console.error(“Base64 decode failed”, e); wrapper.innerHTML = ” Error loading calculator. “; return; } // Create Iframe var iframe = document.createElement(‘iframe’); iframe.style.width = “100%”; iframe.style.border = “none”; iframe.style.overflow = “hidden”; iframe.scrolling = “no”; iframe.style.minHeight = “400px”;…

  • Hexagon Area Calculator — Instant Area in Square Feet, Meters & More

    Hexagon Area Calculator Hexagon Area Calculator Calculate area of a 6-sided polygon (Hexagon). Supports Regular (s, P, a, R) and Irregular (Coordinate) modes. Calculation Mode Regular Hexagon (Side Length)Regular Hexagon (Perimeter)Regular Hexagon (Apothem)Regular Hexagon (Circumradius)Irregular (Coordinates) Side Length (s) mcmmminftyd Perimeter (P) mcmmminft Apothem (a) mcmmminft Circumradius (R) mcmmminft Enter X,Y for 6 vertices Unit…