{"id":24704,"date":"2026-08-19T01:14:24","date_gmt":"2026-08-19T01:14:24","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24704"},"modified":"2026-08-19T02:13:28","modified_gmt":"2026-08-19T02:13:28","slug":"flange-bolt-quantity-and-size-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/ru\/flange-bolt-quantity-and-size-calculator\/","title":{"rendered":"Flange Bolt Quantity and Size Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Flange Bolt Quantity and Size Calculator<\/strong> is a professional engineering tool designed to help users determine the required number, size, and specifications of bolts for reliable flange connections. By analyzing key parameters such as flange dimensions, operating pressure, gasket requirements, bolt material strength, and safety factors, it helps engineers optimize bolt selection and connection performance. The Flange Bolt Quantity and Size Calculator supports flange design, pressure equipment applications, and mechanical assembly while reducing the risks of leakage, insufficient clamping force, and bolt failure.<\/p>\n\n\n\n<!-- WordPress: copy ALL content below into a Custom HTML block -->\n<style>\n\/* Flange Bolt Calculator \u2014 WordPress hardened styles *\/\n\n#fbc-calculator.fbc-calculator {\n    --fbc-primary: #1a5276;\n    --fbc-primary-light: #2471a3;\n    --fbc-primary-dark: #0e3a56;\n    --fbc-bg: #f0f3f6;\n    --fbc-surface: #ffffff;\n    --fbc-border: #d5dde5;\n    --fbc-text: #2c3e50;\n    --fbc-text-muted: #6c7a89;\n    --fbc-safe: #27ae60;\n    --fbc-warning: #f39c12;\n    --fbc-critical: #e74c3c;\n    --fbc-radius: 8px;\n    --fbc-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);\n    --fbc-font: 'Segoe UI', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;\n\n    display: block !important;\n    width: 100% !important;\n    max-width: 1200px !important;\n    margin: 0 auto !important;\n    padding: 1.25rem !important;\n    font-family: var(--fbc-font) !important;\n    font-size: 16px !important;\n    line-height: 1.6 !important;\n    color: var(--fbc-text) !important;\n    background: var(--fbc-bg) !important;\n    text-align: left !important;\n    isolation: isolate;\n}\n\n#fbc-calculator.fbc-calculator,\n#fbc-calculator.fbc-calculator * {\n    box-sizing: border-box;\n}\n\n#fbc-calculator.fbc-calculator [hidden] {\n    display: none !important;\n}\n\n#fbc-calculator.fbc-calculator #resultsPanel.fbc-show {\n    display: block !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-layout {\n    display: block;\n    width: 100%;\n}\n\n#fbc-calculator.fbc-calculator .fbc-panel {\n    display: block;\n    width: 100%;\n    background: var(--fbc-surface) !important;\n    border-radius: var(--fbc-radius) !important;\n    box-shadow: var(--fbc-shadow);\n    padding: 1.5rem !important;\n    border: 1px solid var(--fbc-border) !important;\n    margin: 0 0 1.5rem !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-panel h2 {\n    font-family: var(--fbc-font) !important;\n    font-size: 1.15rem !important;\n    color: var(--fbc-primary) !important;\n    margin: 0 0 1.25rem !important;\n    padding: 0 0 0.6rem !important;\n    border: none !important;\n    border-bottom: 2px solid var(--fbc-primary-light) !important;\n    font-weight: 700 !important;\n    line-height: 1.3 !important;\n    background: none !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-panel h3 {\n    font-family: var(--fbc-font) !important;\n    font-size: 1rem !important;\n    color: var(--fbc-primary) !important;\n    margin: 1.25rem 0 0.75rem !important;\n    padding: 0 !important;\n    font-weight: 700 !important;\n    border: none !important;\n    background: none !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-panel h4 {\n    font-family: var(--fbc-font) !important;\n    font-size: 0.85rem !important;\n    color: var(--fbc-text-muted) !important;\n    margin: 0 0 0.5rem !important;\n    text-align: center;\n    font-weight: 600 !important;\n    border: none !important;\n    background: none !important;\n}\n\n#fbc-calculator.fbc-calculator form {\n    display: block;\n    width: 100%;\n    margin: 0 !important;\n    padding: 0 !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-group {\n    display: block;\n    width: 100%;\n    border: 1px solid var(--fbc-border) !important;\n    border-radius: var(--fbc-radius) !important;\n    padding: 1rem !important;\n    margin: 0 0 1rem !important;\n    background: transparent !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-group legend {\n    display: block;\n    font-size: 0.8rem !important;\n    font-weight: 600 !important;\n    color: var(--fbc-primary-light) !important;\n    padding: 0 0.4rem !important;\n    margin: 0 0 0.5rem !important;\n    float: none !important;\n    width: auto !important;\n    border: none !important;\n    background: transparent !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-field {\n    display: block;\n    width: 100%;\n    margin: 0 0 0.85rem !important;\n    padding: 0 !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-row {\n    display: table !important;\n    width: 100% !important;\n    table-layout: fixed !important;\n    border-collapse: separate !important;\n    border-spacing: 0.75rem 0 !important;\n    margin: 0 !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-row > .fbc-field {\n    display: table-cell !important;\n    width: 50% !important;\n    vertical-align: top !important;\n    margin: 0 !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-field label {\n    display: block !important;\n    font-family: var(--fbc-font) !important;\n    font-size: 0.82rem !important;\n    font-weight: 600 !important;\n    margin: 0 0 0.3rem !important;\n    padding: 0 !important;\n    color: var(--fbc-text) !important;\n    line-height: 1.4 !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-field > select,\n#fbc-calculator.fbc-calculator .fbc-field > input[type=\"number\"] {\n    display: block !important;\n    width: 100% !important;\n    max-width: 100% !important;\n    padding: 0.5rem 0.65rem !important;\n    border: 1px solid var(--fbc-border) !important;\n    border-radius: 4px !important;\n    font-family: var(--fbc-font) !important;\n    font-size: 0.9rem !important;\n    font-weight: 400 !important;\n    line-height: 1.4 !important;\n    background: #fafbfc !important;\n    color: var(--fbc-text) !important;\n    margin: 0 !important;\n    height: auto !important;\n    min-height: 38px !important;\n    box-shadow: none !important;\n    float: none !important;\n    clear: none !important;\n    appearance: auto !important;\n    -webkit-appearance: auto !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-unit-table {\n    display: table !important;\n    width: 100% !important;\n    table-layout: fixed !important;\n    border-collapse: separate !important;\n    border-spacing: 6px 0 !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    border: none !important;\n    background: transparent !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-unit-table tr {\n    display: table-row !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-unit-table td {\n    display: table-cell !important;\n    vertical-align: middle !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    border: none !important;\n    background: transparent !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-unit-input {\n    width: auto !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-unit-cell {\n    width: 72px !important;\n    min-width: 72px !important;\n    max-width: 80px !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-unit-table input[type=\"number\"],\n#fbc-calculator.fbc-calculator .fbc-unit-table select {\n    display: block !important;\n    width: 100% !important;\n    max-width: 100% !important;\n    padding: 0.5rem 0.65rem !important;\n    border: 1px solid var(--fbc-border) !important;\n    border-radius: 4px !important;\n    font-family: var(--fbc-font) !important;\n    font-size: 0.9rem !important;\n    background: #fafbfc !important;\n    color: var(--fbc-text) !important;\n    margin: 0 !important;\n    height: auto !important;\n    min-height: 38px !important;\n    box-shadow: none !important;\n    float: none !important;\n    clear: none !important;\n    appearance: auto !important;\n    -webkit-appearance: auto !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-unit-table select {\n    font-size: 0.8rem !important;\n    background: #eef1f5 !important;\n    color: var(--fbc-text-muted) !important;\n    padding: 0.5rem !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-unit-tag {\n    display: block !important;\n    width: 100% !important;\n    min-height: 38px !important;\n    padding: 0.5rem !important;\n    border: 1px solid var(--fbc-border) !important;\n    border-radius: 4px !important;\n    font-family: var(--fbc-font) !important;\n    font-size: 0.8rem !important;\n    font-weight: 400 !important;\n    color: var(--fbc-text-muted) !important;\n    background: #eef1f5 !important;\n    text-align: center !important;\n    line-height: 1.2 !important;\n    margin: 0 !important;\n    white-space: nowrap !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-tip {\n    display: inline-flex !important;\n    align-items: center;\n    justify-content: center;\n    width: 16px;\n    height: 16px;\n    border-radius: 50%;\n    background: var(--fbc-primary-light) !important;\n    color: #fff !important;\n    font-size: 0.65rem !important;\n    font-weight: 700 !important;\n    cursor: help;\n    position: relative;\n    margin-left: 4px;\n    line-height: 1 !important;\n    border: none !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-tip::after {\n    content: attr(data-tip);\n    position: absolute;\n    bottom: calc(100% + 6px);\n    left: 50%;\n    transform: translateX(-50%);\n    background: var(--fbc-primary-dark);\n    color: #fff;\n    padding: 0.4rem 0.6rem;\n    border-radius: 4px;\n    font-size: 0.72rem;\n    font-weight: 400;\n    white-space: normal;\n    width: 200px;\n    text-align: left;\n    opacity: 0;\n    pointer-events: none;\n    z-index: 100;\n}\n\n#fbc-calculator.fbc-calculator .fbc-tip:hover::after {\n    opacity: 1;\n}\n\n#fbc-calculator.fbc-calculator .fbc-actions {\n    display: block !important;\n    width: 100% !important;\n    text-align: center !important;\n    margin: 0.5rem 0 0 !important;\n    padding: 0 !important;\n}\n\n#fbc-calculator.fbc-calculator button.fbc-btn {\n    display: inline-block !important;\n    width: auto !important;\n    min-width: 160px !important;\n    padding: 0.65rem 2rem !important;\n    border: none !important;\n    border-radius: var(--fbc-radius) !important;\n    font-family: var(--fbc-font) !important;\n    font-size: 0.95rem !important;\n    font-weight: 600 !important;\n    cursor: pointer !important;\n    line-height: 1.4 !important;\n    text-transform: none !important;\n    letter-spacing: normal !important;\n    box-shadow: none !important;\n    text-decoration: none !important;\n    margin: 0 !important;\n    appearance: none !important;\n    -webkit-appearance: none !important;\n}\n\n#fbc-calculator.fbc-calculator button.fbc-btn-main {\n    background: var(--fbc-primary-light) !important;\n    color: #fff !important;\n}\n\n#fbc-calculator.fbc-calculator button.fbc-btn-main:hover {\n    background: var(--fbc-primary) !important;\n    color: #fff !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-error {\n    display: block;\n    margin-top: 1rem;\n    padding: 0.75rem 1rem;\n    background: #fdecea !important;\n    border: 1px solid var(--fbc-critical) !important;\n    border-radius: var(--fbc-radius);\n    color: var(--fbc-critical) !important;\n    font-size: 0.85rem !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-results {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 0.75rem !important;\n    width: 100% !important;\n    margin: 0 !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-result {\n    display: block !important;\n    width: auto !important;\n    background: #f7f9fb !important;\n    border: 1px solid var(--fbc-border) !important;\n    border-radius: var(--fbc-radius);\n    padding: 0.85rem !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-result-hi {\n    background: linear-gradient(135deg, #eaf2f8, #f0f7ff) !important;\n    border-color: var(--fbc-primary-light) !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-result-k {\n    display: block;\n    font-size: 0.75rem !important;\n    font-weight: 600 !important;\n    color: var(--fbc-text-muted) !important;\n    text-transform: uppercase;\n}\n\n#fbc-calculator.fbc-calculator .fbc-result-v {\n    display: block;\n    font-size: 1.15rem !important;\n    font-weight: 700 !important;\n    color: var(--fbc-primary-dark) !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-badge {\n    display: inline-block !important;\n    padding: 0.2rem 0.75rem !important;\n    border-radius: 20px !important;\n    font-size: 0.9rem !important;\n    color: #fff !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-badge.safe { background: var(--fbc-safe) !important; }\n#fbc-calculator.fbc-calculator .fbc-badge.warning { background: var(--fbc-warning) !important; }\n#fbc-calculator.fbc-calculator .fbc-badge.critical { background: var(--fbc-critical) !important; }\n\n#fbc-calculator.fbc-calculator .fbc-badge-box.safe { border-color: var(--fbc-safe) !important; background: #eafaf1 !important; }\n#fbc-calculator.fbc-calculator .fbc-badge-box.warning { border-color: var(--fbc-warning) !important; background: #fef9e7 !important; }\n#fbc-calculator.fbc-calculator .fbc-badge-box.critical { border-color: var(--fbc-critical) !important; background: #fdedec !important; }\n\n#fbc-calculator.fbc-calculator .fbc-detail-grid {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 0.5rem !important;\n    width: 100% !important;\n    margin: 0 !important;\n    font-size: 0.82rem !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-detail-grid > div {\n    display: flex !important;\n    justify-content: space-between !important;\n    align-items: center !important;\n    gap: 0.5rem !important;\n    padding: 0.4rem 0.6rem !important;\n    background: #f7f9fb !important;\n    border-radius: 4px;\n}\n\n#fbc-calculator.fbc-calculator .fbc-detail {\n    margin-top: 1rem;\n}\n\n#fbc-calculator.fbc-calculator .fbc-viz {\n    margin-top: 1.5rem;\n    padding-top: 1rem;\n    border-top: 1px solid var(--fbc-border) !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-detail-grid dt {\n#fbc-calculator.fbc-calculator .fbc-detail-grid dd {\n    display: inline !important;\n    margin: 0 !important;\n    padding: 0 !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-viz-grid {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 1rem !important;\n    width: 100% !important;\n    margin: 0 !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-viz-item {\n    display: block !important;\n    width: auto !important;\n    background: #f7f9fb !important;\n    border: 1px solid var(--fbc-border) !important;\n    border-radius: var(--fbc-radius);\n    padding: 0.75rem !important;\n    text-align: center;\n}\n\n#fbc-calculator.fbc-calculator .fbc-viz-item svg {\n    width: 100% !important;\n    max-height: 220px;\n    display: block;\n    margin: 0 auto;\n}\n\n#fbc-calculator.fbc-calculator .fbc-cap {\n    font-size: 0.78rem !important;\n    color: var(--fbc-text-muted) !important;\n    margin: 0.3rem 0 0 !important;\n}\n\n#fbc-calculator.fbc-calculator .fbc-risk-bar {\n    height: 24px;\n    background: linear-gradient(to right, var(--fbc-safe), var(--fbc-warning), var(--fbc-critical)) !important;\n    border-radius: 12px;\n    position: relative;\n    overflow: hidden;\n    margin: 0.5rem 0;\n}\n\n#fbc-calculator.fbc-calculator .fbc-risk-pin {\n    position: absolute;\n    top: -4px;\n    width: 4px;\n    height: 32px;\n    background: #fff !important;\n    border: 2px solid var(--fbc-primary-dark) !important;\n    border-radius: 2px;\n}\n\n#fbc-calculator.fbc-calculator .fbc-risk-msg {\n    font-size: 0.85rem !important;\n    font-weight: 600 !important;\n    color: var(--fbc-text) !important;\n    margin: 0 !important;\n}\n\n@media (max-width: 640px) {\n    #fbc-calculator.fbc-calculator .fbc-row,\n    #fbc-calculator.fbc-calculator .fbc-row > .fbc-field {\n        display: block !important;\n        width: 100% !important;\n    }\n\n    #fbc-calculator.fbc-calculator .fbc-results,\n    #fbc-calculator.fbc-calculator .fbc-detail-grid,\n    #fbc-calculator.fbc-calculator .fbc-viz-grid {\n        grid-template-columns: 1fr !important;\n    }\n}\n\n<\/style>\n<div id=\"fbc-calculator\" class=\"fbc-calculator\">\n        <div class=\"fbc-layout\">\n            <section class=\"fbc-panel\" aria-label=\"Calculator inputs\">\n                <h2>Input Parameters<\/h2>\n                <form id=\"calcForm\" novalidate>\n                    <div class=\"fbc-field\">\n                        <label for=\"flangeType\">Flange Type\n                            <span class=\"fbc-tip\" data-tip=\"Select flange face type. Affects gasket effective area estimate.\">?<\/span>\n                        <\/label>\n                        <select id=\"flangeType\" name=\"flangeType\">\n                            <option value=\"raised\">Raised Face Flange<\/option>\n                            <option value=\"flat\">Flat Face Flange<\/option>\n                            <option value=\"rtj\">Ring Type Joint Flange<\/option>\n                            <option value=\"custom\">Custom Flange<\/option>\n                        <\/select>\n                    <\/div>\n\n                    <fieldset class=\"fbc-group\">\n                        <legend>Flange Dimensions<\/legend>\n                        <div class=\"fbc-row\">\n                            <div class=\"fbc-field\">\n                                <label for=\"flangeOD\">Flange Outside Diameter\n                                    <span class=\"fbc-tip\" data-tip=\"Overall outer diameter of the flange.\">?<\/span>\n                                <\/label>\n                                <table class=\"fbc-unit-table\" role=\"presentation\"><tr>\n                                    <td class=\"fbc-unit-input\"><input type=\"number\" id=\"flangeOD\" name=\"flangeOD\" value=\"300\" min=\"0\" step=\"any\"><\/td>\n                                    <td class=\"fbc-unit-cell\"><select id=\"lengthUnit\" class=\"fbc-unit-sel\"><option value=\"mm\" selected>mm<\/option><option value=\"inch\">inch<\/option><\/select><\/td>\n                                <\/tr><\/table>\n                            <\/div>\n                            <div class=\"fbc-field\">\n                                <label for=\"boltCircle\">Bolt Circle Diameter\n                                    <span class=\"fbc-tip\" data-tip=\"Diameter of the bolt hole circle (PCD).\">?<\/span>\n                                <\/label>\n                                <table class=\"fbc-unit-table\" role=\"presentation\"><tr>\n                                    <td class=\"fbc-unit-input\"><input type=\"number\" id=\"boltCircle\" name=\"boltCircle\" value=\"250\" min=\"0\" step=\"any\"><\/td>\n                                    <td class=\"fbc-unit-cell\"><span class=\"fbc-unit-tag\" id=\"lengthUnitLabel\">mm<\/span><\/td>\n                                <\/tr><\/table>\n                            <\/div>\n                        <\/div>\n                        <div class=\"fbc-field\">\n                            <label for=\"innerDiameter\">Flange Inner Diameter\n                                <span class=\"fbc-tip\" data-tip=\"Internal bore diameter of the flange.\">?<\/span>\n                            <\/label>\n                            <table class=\"fbc-unit-table\" role=\"presentation\"><tr>\n                                <td class=\"fbc-unit-input\"><input type=\"number\" id=\"innerDiameter\" name=\"innerDiameter\" value=\"200\" min=\"0\" step=\"any\"><\/td>\n                                <td class=\"fbc-unit-cell\"><span class=\"fbc-unit-tag\" id=\"lengthUnitLabel2\">mm<\/span><\/td>\n                            <\/tr><\/table>\n                        <\/div>\n                    <\/fieldset>\n\n                    <fieldset class=\"fbc-group\">\n                        <legend>Operating Conditions<\/legend>\n                        <div class=\"fbc-row\">\n                            <div class=\"fbc-field\">\n                                <label for=\"pressure\">Operating Pressure\n                                    <span class=\"fbc-tip\" data-tip=\"Internal system operating pressure.\">?<\/span>\n                                <\/label>\n                                <table class=\"fbc-unit-table\" role=\"presentation\"><tr>\n                                    <td class=\"fbc-unit-input\"><input type=\"number\" id=\"pressure\" name=\"pressure\" value=\"2\" min=\"0\" step=\"any\"><\/td>\n                                    <td class=\"fbc-unit-cell\"><select id=\"pressureUnit\" class=\"fbc-unit-sel\"><option value=\"MPa\" selected>MPa<\/option><option value=\"bar\">bar<\/option><option value=\"psi\">psi<\/option><\/select><\/td>\n                                <\/tr><\/table>\n                            <\/div>\n                            <div class=\"fbc-field\">\n                                <label for=\"temperature\">Operating Temperature\n                                    <span class=\"fbc-tip\" data-tip=\"Working temperature for reference.\">?<\/span>\n                                <\/label>\n                                <table class=\"fbc-unit-table\" role=\"presentation\"><tr>\n                                    <td class=\"fbc-unit-input\"><input type=\"number\" id=\"temperature\" name=\"temperature\" value=\"25\" step=\"any\"><\/td>\n                                    <td class=\"fbc-unit-cell\"><select id=\"tempUnit\" class=\"fbc-unit-sel\"><option value=\"C\" selected>\u00b0C<\/option><option value=\"F\">\u00b0F<\/option><\/select><\/td>\n                                <\/tr><\/table>\n                            <\/div>\n                        <\/div>\n                    <\/fieldset>\n\n                    <fieldset class=\"fbc-group\">\n                        <legend>Gasket Properties<\/legend>\n                        <div class=\"fbc-field\">\n                            <label for=\"gasketType\">Gasket Type\n                                <span class=\"fbc-tip\" data-tip=\"Gasket material affects default seating stress.\">?<\/span>\n                            <\/label>\n                            <select id=\"gasketType\" name=\"gasketType\">\n                                <option value=\"spiral\" selected>Spiral Wound Gasket<\/option>\n                                <option value=\"rubber\">Rubber Gasket<\/option>\n                                <option value=\"metal\">Metal Gasket<\/option>\n                                <option value=\"ptfe\">PTFE Gasket<\/option>\n                                <option value=\"custom\">Custom Gasket<\/option>\n                            <\/select>\n                        <\/div>\n                        <div class=\"fbc-field\">\n                            <label for=\"gasketStress\">Gasket Seating Stress\n                                <span class=\"fbc-tip\" data-tip=\"Minimum compression stress required for gasket sealing (y-value).\">?<\/span>\n                            <\/label>\n                            <table class=\"fbc-unit-table\" role=\"presentation\"><tr>\n                                <td class=\"fbc-unit-input\"><input type=\"number\" id=\"gasketStress\" name=\"gasketStress\" value=\"25\" min=\"0\" step=\"any\"><\/td>\n                                <td class=\"fbc-unit-cell\"><span class=\"fbc-unit-tag\">MPa<\/span><\/td>\n                            <\/tr><\/table>\n                        <\/div>\n                    <\/fieldset>\n\n                    <fieldset class=\"fbc-group\">\n                        <legend>Bolt Properties<\/legend>\n                        <div class=\"fbc-field\">\n                            <label for=\"boltGrade\">Bolt Material Grade\n                                <span class=\"fbc-tip\" data-tip=\"Select bolt grade to auto-fill strength values.\">?<\/span>\n                            <\/label>\n                            <select id=\"boltGrade\" name=\"boltGrade\">\n                                <option value=\"8.8\" selected>Grade 8.8<\/option>\n                                <option value=\"10.9\">Grade 10.9<\/option>\n                                <option value=\"ss\">Stainless Steel<\/option>\n                                <option value=\"a193\">ASTM A193<\/option>\n                                <option value=\"custom\">Custom Material<\/option>\n                            <\/select>\n                        <\/div>\n                        <div class=\"fbc-row\">\n                            <div class=\"fbc-field\">\n                                <label for=\"tensileStrength\">Bolt Tensile Strength\n                                    <span class=\"fbc-tip\" data-tip=\"Ultimate tensile strength of bolt material.\">?<\/span>\n                                <\/label>\n                                <table class=\"fbc-unit-table\" role=\"presentation\"><tr>\n                                    <td class=\"fbc-unit-input\"><input type=\"number\" id=\"tensileStrength\" name=\"tensileStrength\" value=\"800\" min=\"0\" step=\"any\"><\/td>\n                                    <td class=\"fbc-unit-cell\"><select id=\"stressUnit\" class=\"fbc-unit-sel\"><option value=\"MPa\" selected>MPa<\/option><option value=\"psi\">psi<\/option><\/select><\/td>\n                                <\/tr><\/table>\n                            <\/div>\n                            <div class=\"fbc-field\">\n                                <label for=\"allowableStress\">Allowable Bolt Stress\n                                    <span class=\"fbc-tip\" data-tip=\"Design allowable tensile stress for bolt sizing.\">?<\/span>\n                                <\/label>\n                                <table class=\"fbc-unit-table\" role=\"presentation\"><tr>\n                                    <td class=\"fbc-unit-input\"><input type=\"number\" id=\"allowableStress\" name=\"allowableStress\" value=\"400\" min=\"0\" step=\"any\"><\/td>\n                                    <td class=\"fbc-unit-cell\"><span class=\"fbc-unit-tag\" id=\"stressUnitLabel\">MPa<\/span><\/td>\n                                <\/tr><\/table>\n                            <\/div>\n                        <\/div>\n                        <div class=\"fbc-field\">\n                            <label for=\"safetyFactor\">Design Safety Factor\n                                <span class=\"fbc-tip\" data-tip=\"Applied to pressure separating force. Default: 2.0\">?<\/span>\n                            <\/label>\n                            <input type=\"number\" id=\"safetyFactor\" name=\"safetyFactor\" value=\"2.0\" min=\"1\" step=\"0.1\">\n                        <\/div>\n                        <div class=\"fbc-field\">\n                            <label for=\"boltCount\">Number of Bolts (optional)\n                                <span class=\"fbc-tip\" data-tip=\"Leave blank to auto-calculate based on bolt spacing.\">?<\/span>\n                            <\/label>\n                            <input type=\"number\" id=\"boltCount\" name=\"boltCount\" placeholder=\"Auto\" min=\"1\" step=\"1\">\n                        <\/div>\n                    <\/fieldset>\n\n                    <div class=\"fbc-actions\">\n                        <button type=\"submit\" class=\"fbc-btn fbc-btn-main\" id=\"calcBtn\">Calculate<\/button>\n                    <\/div>\n                <\/form>\n                <div id=\"errorBox\" class=\"fbc-error\" role=\"alert\" hidden><\/div>\n            <\/section>\n\n            <section class=\"fbc-panel\" id=\"resultsPanel\" aria-label=\"Calculation results\" hidden>\n                <h2>Results<\/h2>\n                <div class=\"fbc-results\">\n                    <div class=\"fbc-result\"><span class=\"fbc-result-k\">Required Total Bolt Force<\/span><span class=\"fbc-result-v\" id=\"resTotalForce\">&#8211;<\/span><\/div>\n                    <div class=\"fbc-result\"><span class=\"fbc-result-k\">Recommended Bolt Quantity<\/span><span class=\"fbc-result-v\" id=\"resBoltQty\">&#8211;<\/span><\/div>\n                    <div class=\"fbc-result fbc-result-hi\"><span class=\"fbc-result-k\">Recommended Bolt Size<\/span><span class=\"fbc-result-v\" id=\"resBoltSize\">&#8211;<\/span><\/div>\n                    <div class=\"fbc-result\"><span class=\"fbc-result-k\">Bolt Load Per Piece<\/span><span class=\"fbc-result-v\" id=\"resBoltLoad\">&#8211;<\/span><\/div>\n                    <div class=\"fbc-result\"><span class=\"fbc-result-k\">Recommended Tightening Torque<\/span><span class=\"fbc-result-v\" id=\"resTorque\">&#8211;<\/span><\/div>\n                    <div class=\"fbc-result\"><span class=\"fbc-result-k\">Bolt Stress<\/span><span class=\"fbc-result-v\" id=\"resBoltStress\">&#8211;<\/span><\/div>\n                    <div class=\"fbc-result\"><span class=\"fbc-result-k\">Safety Factor<\/span><span class=\"fbc-result-v\" id=\"resSafetyFactor\">&#8211;<\/span><\/div>\n                    <div class=\"fbc-result fbc-badge-box\" id=\"statusCard\"><span class=\"fbc-result-k\">Flange Connection Status<\/span><span class=\"fbc-result-v fbc-badge\" id=\"resStatus\">&#8211;<\/span><\/div>\n                <\/div>\n\n                <div class=\"fbc-detail\">\n                    <h3>Calculation Details<\/h3>\n                    <dl class=\"fbc-detail-grid\">\n                            <div><dt>Pressure Separating Force (Fp)<\/dt><dd id=\"detFp\">&#8211;<\/dd><\/div>\n                            <div><dt>Gasket Compression Force (Fg)<\/dt><dd id=\"detFg\">&#8211;<\/dd><\/div>\n                            <div><dt>Effective Pressure Area<\/dt><dd id=\"detArea\">&#8211;<\/dd><\/div>\n                            <div><dt>Required Tensile Area (At)<\/dt><dd id=\"detAt\">&#8211;<\/dd><\/div>\n                            <div><dt>Bolt Spacing<\/dt><dd id=\"detSpacing\">&#8211;<\/dd><\/div>\n                            <div><dt>Actual Tensile Area<\/dt><dd id=\"detActualAt\">&#8211;<\/dd><\/div>\n                    <\/dl>\n                <\/div>\n\n                <div class=\"fbc-viz\" id=\"vizSection\">\n                    <h3>Engineering Visualization<\/h3>\n                    <div class=\"fbc-viz-grid\">\n                        <div class=\"fbc-viz-item\">\n                            <h4>Flange Bolt Circle Diagram<\/h4>\n                            <svg id=\"boltCircleSvg\" viewBox=\"0 0 320 320\" aria-label=\"Bolt circle layout diagram\"><\/svg>\n                        <\/div>\n                        <div class=\"fbc-viz-item\">\n                            <h4>Pressure Force Illustration<\/h4>\n                            <svg id=\"pressureSvg\" viewBox=\"0 0 320 200\" aria-label=\"Pressure force diagram\"><\/svg>\n                        <\/div>\n                        <div class=\"fbc-viz-item\">\n                            <h4>Bolt Stress Gauge<\/h4>\n                            <svg id=\"stressGaugeSvg\" viewBox=\"0 0 280 160\" aria-label=\"Bolt stress gauge\"><\/svg>\n                            <p class=\"fbc-cap\" id=\"gaugeCaption\"><\/p>\n                        <\/div>\n                        <div class=\"fbc-viz-item\">\n                            <h4>Leakage Risk Indicator<\/h4>\n                            <div class=\"fbc-risk\">\n                                <div class=\"fbc-risk-bar\"><div class=\"fbc-risk-pin\" id=\"riskFill\"><\/div><\/div>\n                                <p class=\"fbc-risk-msg\" id=\"riskText\">&#8211;<\/p>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/section>\n        <\/div>\n    <\/div>\n<script>\n(function(){\n  try {\n    (new Function(atob(\"LyoqDQogKiBGbGFuZ2UgQm9sdCBRdWFudGl0eSBhbmQgU2l6ZSBDYWxjdWxhdG9yDQogKi8NCg0KKGZ1bmN0aW9uICgpIHsNCiAgICAndXNlIHN0cmljdCc7DQoNCiAgICBmdW5jdGlvbiBpbml0Q2FsY3VsYXRvcigpIHsNCiAgICAgICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYmMtY2FsY3VsYXRvcicpOw0KICAgICAgICBpZiAoIXJvb3QpIHJldHVybjsNCg0KICAgICAgICBmdW5jdGlvbiBlbChpZCkgew0KICAgICAgICAgICAgcmV0dXJuIHJvb3QucXVlcnlTZWxlY3RvcignIycgKyBpZCk7DQogICAgICAgIH0NCg0KICAgICAgICBjb25zdCBmb3JtID0gZWwoJ2NhbGNGb3JtJyk7DQogICAgICAgIGNvbnN0IGVycm9yQm94ID0gZWwoJ2Vycm9yQm94Jyk7DQogICAgICAgIGNvbnN0IHJlc3VsdHNQYW5lbCA9IGVsKCdyZXN1bHRzUGFuZWwnKTsNCiAgICAgICAgaWYgKCFmb3JtIHx8ICFlcnJvckJveCB8fCAhcmVzdWx0c1BhbmVsKSByZXR1cm47DQogICAgY29uc3QgQk9MVF9TSVpFUyA9IFsNCiAgICAgICAgeyBsYWJlbDogJ002JywgIGQ6IDYsICBhdDogMjAuMSB9LA0KICAgICAgICB7IGxhYmVsOiAnTTgnLCAgZDogOCwgIGF0OiAzNi42IH0sDQogICAgICAgIHsgbGFiZWw6ICdNMTAnLCBkOiAxMCwgYXQ6IDU4LjAgfSwNCiAgICAgICAgeyBsYWJlbDogJ00xMicsIGQ6IDEyLCBhdDogODQuMyB9LA0KICAgICAgICB7IGxhYmVsOiAnTTE0JywgZDogMTQsIGF0OiAxMTUgfSwNCiAgICAgICAgeyBsYWJlbDogJ00xNicsIGQ6IDE2LCBhdDogMTU3IH0sDQogICAgICAgIHsgbGFiZWw6ICdNMjAnLCBkOiAyMCwgYXQ6IDI0NSB9LA0KICAgICAgICB7IGxhYmVsOiAnTTI0JywgZDogMjQsIGF0OiAzNTMgfSwNCiAgICAgICAgeyBsYWJlbDogJ00yNycsIGQ6IDI3LCBhdDogNDU5IH0sDQogICAgICAgIHsgbGFiZWw6ICdNMzAnLCBkOiAzMCwgYXQ6IDU2MSB9LA0KICAgICAgICB7IGxhYmVsOiAnTTM2JywgZDogMzYsIGF0OiA4MTcgfSwNCiAgICAgICAgeyBsYWJlbDogJ000MicsIGQ6IDQyLCBhdDogMTEyMCB9LA0KICAgICAgICB7IGxhYmVsOiAnTTQ4JywgZDogNDgsIGF0OiAxNDcwIH0NCiAgICBdOw0KDQogICAgY29uc3QgU1RBTkRBUkRfQk9MVF9DT1VOVFMgPSBbNCwgNiwgOCwgMTIsIDE2LCAyMCwgMjQsIDI4LCAzMiwgMzYsIDQwLCA0NCwgNDgsIDUyLCA1NiwgNjAsIDY0XTsNCg0KICAgIGNvbnN0IEdBU0tFVF9ERUZBVUxUUyA9IHsNCiAgICAgICAgc3BpcmFsOiAyNSwNCiAgICAgICAgcnViYmVyOiA1LA0KICAgICAgICBtZXRhbDogNTAsDQogICAgICAgIHB0ZmU6IDE1LA0KICAgICAgICBjdXN0b206IDI1DQogICAgfTsNCg0KICAgIGNvbnN0IEJPTFRfR1JBREVfREVGQVVMVFMgPSB7DQogICAgICAgICc4LjgnOiAgeyB0ZW5zaWxlOiA4MDAsIGFsbG93YWJsZTogNDAwIH0sDQogICAgICAgICcxMC45JzogeyB0ZW5zaWxlOiAxMDAwLCBhbGxvd2FibGU6IDUwMCB9LA0KICAgICAgICBzczogICAgIHsgdGVuc2lsZTogNzAwLCBhbGxvd2FibGU6IDM1MCB9LA0KICAgICAgICBhMTkzOiAgIHsgdGVuc2lsZTogOTMwLCBhbGxvd2FibGU6IDQ2NSB9LA0KICAgICAgICBjdXN0b206IHsgdGVuc2lsZTogODAwLCBhbGxvd2FibGU6IDQwMCB9DQogICAgfTsNCg0KICAgIGNvbnN0IEZMQU5HRV9BUkVBX0ZBQ1RPUiA9IHsNCiAgICAgICAgcmFpc2VkOiAxLjAsDQogICAgICAgIGZsYXQ6IDAuOTUsDQogICAgICAgIHJ0ajogMC44NSwNCiAgICAgICAgY3VzdG9tOiAxLjANCiAgICB9Ow0KDQogICAgLy8gSVNPIG1ldHJpYyBjb2Fyc2UgdGhyZWFkIHRlbnNpbGUgc3RyZXNzIGFyZWFzIChtbTIpDQogICAgZnVuY3Rpb24gdG9NbSh2YWx1ZSwgdW5pdCkgew0KICAgICAgICByZXR1cm4gdW5pdCA9PT0gJ2luY2gnID8gdmFsdWUgKiAyNS40IDogdmFsdWU7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZnJvbU1tKG1tLCB1bml0KSB7DQogICAgICAgIHJldHVybiB1bml0ID09PSAnaW5jaCcgPyBtbSAvIDI1LjQgOiBtbTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiB0b1BhKHByZXNzdXJlLCB1bml0KSB7DQogICAgICAgIHN3aXRjaCAodW5pdCkgew0KICAgICAgICAgICAgY2FzZSAnTVBhJzogcmV0dXJuIHByZXNzdXJlICogMWU2Ow0KICAgICAgICAgICAgY2FzZSAnYmFyJzogcmV0dXJuIHByZXNzdXJlICogMWU1Ow0KICAgICAgICAgICAgY2FzZSAncHNpJzogcmV0dXJuIHByZXNzdXJlICogNjg5NC43NjsNCiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBwcmVzc3VyZTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHRvTXBhKHN0cmVzcywgdW5pdCkgew0KICAgICAgICByZXR1cm4gdW5pdCA9PT0gJ3BzaScgPyBzdHJlc3MgKiAwLjAwNjg5NDc2IDogc3RyZXNzOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGZvcm1hdEZvcmNlKG4pIHsNCiAgICAgICAgaWYgKE1hdGguYWJzKG4pID49IDEwMDApIHJldHVybiAobiAvIDEwMDApLnRvRml4ZWQoMikgKyAnIGtOJzsNCiAgICAgICAgcmV0dXJuIG4udG9GaXhlZCgwKSArICcgTic7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZm9ybWF0QXJlYShtbTIpIHsNCiAgICAgICAgaWYgKG1tMiA+PSAxZTYpIHJldHVybiAobW0yIC8gMWU2KS50b0ZpeGVkKDQpICsgJyBtMic7DQogICAgICAgIHJldHVybiBtbTIudG9GaXhlZCgxKSArICcgbW0yJzsNCiAgICB9DQoNCiAgICAvLyBSb3VuZCB0byBuZWFyZXN0IHN0YW5kYXJkIGJvbHQgY291bnQNCiAgICBmdW5jdGlvbiByb3VuZFRvU3RhbmRhcmRDb3VudChuKSB7DQogICAgICAgIGxldCBiZXN0ID0gU1RBTkRBUkRfQk9MVF9DT1VOVFNbMF07DQogICAgICAgIGxldCBtaW5EaWZmID0gTWF0aC5hYnMobiAtIGJlc3QpOw0KICAgICAgICBmb3IgKGNvbnN0IGMgb2YgU1RBTkRBUkRfQk9MVF9DT1VOVFMpIHsNCiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhuIC0gYyk7DQogICAgICAgICAgICBpZiAoZGlmZiA8IG1pbkRpZmYpIHsNCiAgICAgICAgICAgICAgICBtaW5EaWZmID0gZGlmZjsNCiAgICAgICAgICAgICAgICBiZXN0ID0gYzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gYmVzdDsNCiAgICB9DQoNCiAgICAvLyBTZWxlY3QgYm9sdCBzaXplIGZyb20gcmVxdWlyZWQgdGVuc2lsZSBhcmVhIChtbTIpDQogICAgZnVuY3Rpb24gc2VsZWN0Qm9sdFNpemUocmVxdWlyZWRBdCkgew0KICAgICAgICBmb3IgKGNvbnN0IGJvbHQgb2YgQk9MVF9TSVpFUykgew0KICAgICAgICAgICAgaWYgKGJvbHQuYXQgPj0gcmVxdWlyZWRBdCkgcmV0dXJuIGJvbHQ7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIEJPTFRfU0laRVNbQk9MVF9TSVpFUy5sZW5ndGggLSAxXTsNCiAgICB9DQoNCiAgICAvLyBWYWxpZGF0ZSBpbnB1dHMNCiAgICBmdW5jdGlvbiB2YWxpZGF0ZShpbnB1dHMpIHsNCiAgICAgICAgY29uc3QgZXJyb3JzID0gW107DQoNCiAgICAgICAgaWYgKCFpbnB1dHMuZmxhbmdlT0QgfHwgaW5wdXRzLmZsYW5nZU9EIDw9IDApDQogICAgICAgICAgICBlcnJvcnMucHVzaCgnRmxhbmdlIG91dHNpZGUgZGlhbWV0ZXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nKTsNCiAgICAgICAgaWYgKCFpbnB1dHMuYm9sdENpcmNsZSB8fCBpbnB1dHMuYm9sdENpcmNsZSA8PSAwKQ0KICAgICAgICAgICAgZXJyb3JzLnB1c2goJ0JvbHQgY2lyY2xlIGRpYW1ldGVyIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgIGlmICghaW5wdXRzLmlubmVyRGlhbWV0ZXIgfHwgaW5wdXRzLmlubmVyRGlhbWV0ZXIgPD0gMCkNCiAgICAgICAgICAgIGVycm9ycy5wdXNoKCdGbGFuZ2UgaW5uZXIgZGlhbWV0ZXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nKTsNCiAgICAgICAgaWYgKGlucHV0cy5pbm5lckRpYW1ldGVyID49IGlucHV0cy5ib2x0Q2lyY2xlKQ0KICAgICAgICAgICAgZXJyb3JzLnB1c2goJ0lubmVyIGRpYW1ldGVyIG11c3QgYmUgc21hbGxlciB0aGFuIGJvbHQgY2lyY2xlIGRpYW1ldGVyLicpOw0KICAgICAgICBpZiAoaW5wdXRzLmJvbHRDaXJjbGUgPj0gaW5wdXRzLmZsYW5nZU9EKQ0KICAgICAgICAgICAgZXJyb3JzLnB1c2goJ0JvbHQgY2lyY2xlIGRpYW1ldGVyIG11c3QgYmUgc21hbGxlciB0aGFuIGZsYW5nZSBvdXRzaWRlIGRpYW1ldGVyLicpOw0KICAgICAgICBpZiAoaW5wdXRzLnByZXNzdXJlIDw9IDApDQogICAgICAgICAgICBlcnJvcnMucHVzaCgnT3BlcmF0aW5nIHByZXNzdXJlIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgIGlmIChpbnB1dHMuZ2Fza2V0U3RyZXNzIDw9IDApDQogICAgICAgICAgICBlcnJvcnMucHVzaCgnR2Fza2V0IHNlYXRpbmcgc3RyZXNzIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgIGlmIChpbnB1dHMudGVuc2lsZVN0cmVuZ3RoIDw9IDApDQogICAgICAgICAgICBlcnJvcnMucHVzaCgnQm9sdCB0ZW5zaWxlIHN0cmVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgIGlmIChpbnB1dHMuYWxsb3dhYmxlU3RyZXNzIDw9IDApDQogICAgICAgICAgICBlcnJvcnMucHVzaCgnQWxsb3dhYmxlIGJvbHQgc3RyZXNzIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgIGlmIChpbnB1dHMuc2FmZXR5RmFjdG9yIDwgMSkNCiAgICAgICAgICAgIGVycm9ycy5wdXNoKCdEZXNpZ24gc2FmZXR5IGZhY3RvciBtdXN0IGJlIGF0IGxlYXN0IDEuMC4nKTsNCg0KICAgICAgICByZXR1cm4gZXJyb3JzOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHJlYWRJbnB1dHMoKSB7DQogICAgICAgIGNvbnN0IGxlbmd0aFVuaXQgPSBlbCgnbGVuZ3RoVW5pdCcpLnZhbHVlOw0KICAgICAgICBjb25zdCBwcmVzc3VyZVVuaXQgPSBlbCgncHJlc3N1cmVVbml0JykudmFsdWU7DQogICAgICAgIGNvbnN0IHN0cmVzc1VuaXQgPSBlbCgnc3RyZXNzVW5pdCcpLnZhbHVlOw0KDQogICAgICAgIGNvbnN0IGJvbHRDb3VudFJhdyA9IGVsKCdib2x0Q291bnQnKS52YWx1ZTsNCg0KICAgICAgICByZXR1cm4gew0KICAgICAgICAgICAgZmxhbmdlVHlwZTogZWwoJ2ZsYW5nZVR5cGUnKS52YWx1ZSwNCiAgICAgICAgICAgIGZsYW5nZU9EOiB0b01tKHBhcnNlRmxvYXQoZWwoJ2ZsYW5nZU9EJykudmFsdWUpLCBsZW5ndGhVbml0KSwNCiAgICAgICAgICAgIGJvbHRDaXJjbGU6IHRvTW0ocGFyc2VGbG9hdChlbCgnYm9sdENpcmNsZScpLnZhbHVlKSwgbGVuZ3RoVW5pdCksDQogICAgICAgICAgICBpbm5lckRpYW1ldGVyOiB0b01tKHBhcnNlRmxvYXQoZWwoJ2lubmVyRGlhbWV0ZXInKS52YWx1ZSksIGxlbmd0aFVuaXQpLA0KICAgICAgICAgICAgcHJlc3N1cmU6IHBhcnNlRmxvYXQoZWwoJ3ByZXNzdXJlJykudmFsdWUpLA0KICAgICAgICAgICAgcHJlc3N1cmVVbml0LA0KICAgICAgICAgICAgdGVtcGVyYXR1cmU6IHBhcnNlRmxvYXQoZWwoJ3RlbXBlcmF0dXJlJykudmFsdWUpLA0KICAgICAgICAgICAgZ2Fza2V0VHlwZTogZWwoJ2dhc2tldFR5cGUnKS52YWx1ZSwNCiAgICAgICAgICAgIGdhc2tldFN0cmVzczogcGFyc2VGbG9hdChlbCgnZ2Fza2V0U3RyZXNzJykudmFsdWUpLA0KICAgICAgICAgICAgYm9sdEdyYWRlOiBlbCgnYm9sdEdyYWRlJykudmFsdWUsDQogICAgICAgICAgICB0ZW5zaWxlU3RyZW5ndGg6IHRvTXBhKHBhcnNlRmxvYXQoZWwoJ3RlbnNpbGVTdHJlbmd0aCcpLnZhbHVlKSwgc3RyZXNzVW5pdCksDQogICAgICAgICAgICBhbGxvd2FibGVTdHJlc3M6IHRvTXBhKHBhcnNlRmxvYXQoZWwoJ2FsbG93YWJsZVN0cmVzcycpLnZhbHVlKSwgc3RyZXNzVW5pdCksDQogICAgICAgICAgICBzYWZldHlGYWN0b3I6IHBhcnNlRmxvYXQoZWwoJ3NhZmV0eUZhY3RvcicpLnZhbHVlKSwNCiAgICAgICAgICAgIGJvbHRDb3VudDogYm9sdENvdW50UmF3ID8gcGFyc2VJbnQoYm9sdENvdW50UmF3LCAxMCkgOiBudWxsLA0KICAgICAgICAgICAgbGVuZ3RoVW5pdCwNCiAgICAgICAgICAgIHN0cmVzc1VuaXQNCiAgICAgICAgfTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjYWxjdWxhdGUoaW5wdXRzKSB7DQogICAgICAgIGNvbnN0IGFyZWFGYWN0b3IgPSBGTEFOR0VfQVJFQV9GQUNUT1JbaW5wdXRzLmZsYW5nZVR5cGVdIHx8IDEuMDsNCg0KICAgICAgICAvLyBFZmZlY3RpdmUgZ2Fza2V0IC8gcHJlc3N1cmUgZGlhbWV0ZXINCiAgICAgICAgY29uc3QgZWZmZWN0aXZlRGlhbWV0ZXIgPSAoaW5wdXRzLmlubmVyRGlhbWV0ZXIgKyBpbnB1dHMuYm9sdENpcmNsZSkgLyAyOw0KICAgICAgICBjb25zdCBlZmZlY3RpdmVEaWFtZXRlck0gPSBlZmZlY3RpdmVEaWFtZXRlciAvIDEwMDA7DQoNCiAgICAgICAgLy8gRWZmZWN0aXZlIHByZXNzdXJlIGFyZWEgKG0yKQ0KICAgICAgICBjb25zdCBwcmVzc3VyZUFyZWFNMiA9IE1hdGguUEkgLyA0ICogZWZmZWN0aXZlRGlhbWV0ZXJNICogZWZmZWN0aXZlRGlhbWV0ZXJNICogYXJlYUZhY3RvcjsNCiAgICAgICAgY29uc3QgcHJlc3N1cmVBcmVhTW0yID0gcHJlc3N1cmVBcmVhTTIgKiAxZTY7DQoNCiAgICAgICAgLy8gRnAgPSBQIHggQQ0KICAgICAgICBjb25zdCBwcmVzc3VyZVBhID0gdG9QYShpbnB1dHMucHJlc3N1cmUsIGlucHV0cy5wcmVzc3VyZVVuaXQpOw0KICAgICAgICBjb25zdCBGcCA9IHByZXNzdXJlUGEgKiBwcmVzc3VyZUFyZWFNMjsNCg0KICAgICAgICAvLyBHYXNrZXQgY29tcHJlc3Npb24gZm9yY2UgRmcNCiAgICAgICAgY29uc3QgZ2Fza2V0V2lkdGggPSAoaW5wdXRzLmJvbHRDaXJjbGUgLSBpbnB1dHMuaW5uZXJEaWFtZXRlcikgLyAyICogMC41Ow0KICAgICAgICBjb25zdCBnYXNrZXRBcmVhTW0yID0gTWF0aC5QSSAqIGVmZmVjdGl2ZURpYW1ldGVyICogZ2Fza2V0V2lkdGg7DQogICAgICAgIGNvbnN0IGdhc2tldFN0cmVzc1BhID0gaW5wdXRzLmdhc2tldFN0cmVzcyAqIDFlNjsNCiAgICAgICAgY29uc3QgRmcgPSBnYXNrZXRTdHJlc3NQYSAqIChnYXNrZXRBcmVhTW0yIC8gMWU2KTsNCg0KICAgICAgICAvLyBGYiA9IEZwIHggU0YgKyBGZw0KICAgICAgICBjb25zdCBGYiA9IEZwICogaW5wdXRzLnNhZmV0eUZhY3RvciArIEZnOw0KDQogICAgICAgIC8vIEJvbHQgcXVhbnRpdHkgZXN0aW1hdGlvbjogTiA9IHBpIHggRCAvIFMNCiAgICAgICAgY29uc3QgZXN0aW1hdGVkU3BhY2luZyA9IE1hdGgubWF4KDUwLCBpbnB1dHMuYm9sdENpcmNsZSAqIDAuMDgpOw0KICAgICAgICBsZXQgYm9sdFF0eSA9IGlucHV0cy5ib2x0Q291bnQgfHwgcm91bmRUb1N0YW5kYXJkQ291bnQoDQogICAgICAgICAgICBNYXRoLlBJICogaW5wdXRzLmJvbHRDaXJjbGUgLyBlc3RpbWF0ZWRTcGFjaW5nDQogICAgICAgICk7DQoNCiAgICAgICAgaWYgKGJvbHRRdHkgPCA0KSBib2x0UXR5ID0gNDsNCg0KICAgICAgICAvLyBJdGVyYXRpdmUgYm9sdCBzaXppbmc6IGFkanVzdCBib2x0IHNpemUgYW5kIGNvdW50DQogICAgICAgIGxldCBib2x0ID0gc2VsZWN0Qm9sdFNpemUoKEZiIC8gYm9sdFF0eSkgLyAoaW5wdXRzLmFsbG93YWJsZVN0cmVzcyAqIDFlNikgKiAxZTYpOw0KICAgICAgICBsZXQgRmJvbHQgPSBGYiAvIGJvbHRRdHk7DQogICAgICAgIGxldCByZXF1aXJlZEF0ID0gRmJvbHQgLyAoaW5wdXRzLmFsbG93YWJsZVN0cmVzcyAqIDFlNikgKiAxZTY7DQoNCiAgICAgICAgLy8gUmUtY2hlY2sgaWYgYm9sdCBpcyBhZGVxdWF0ZTsgaWYgbm90LCB0cnkgbW9yZSBib2x0cw0KICAgICAgICBsZXQgaXRlcmF0aW9ucyA9IDA7DQogICAgICAgIHdoaWxlIChib2x0LmF0IDwgcmVxdWlyZWRBdCAqIDAuOTkgJiYgaXRlcmF0aW9ucyA8IDIwKSB7DQogICAgICAgICAgICBjb25zdCBuZXh0Q291bnQgPSBTVEFOREFSRF9CT0xUX0NPVU5UUy5maW5kKGMgPT4gYyA+IGJvbHRRdHkpIHx8IGJvbHRRdHkgKyA0Ow0KICAgICAgICAgICAgYm9sdFF0eSA9IG5leHRDb3VudDsNCiAgICAgICAgICAgIEZib2x0ID0gRmIgLyBib2x0UXR5Ow0KICAgICAgICAgICAgcmVxdWlyZWRBdCA9IEZib2x0IC8gKGlucHV0cy5hbGxvd2FibGVTdHJlc3MgKiAxZTYpICogMWU2Ow0KICAgICAgICAgICAgYm9sdCA9IHNlbGVjdEJvbHRTaXplKHJlcXVpcmVkQXQpOw0KICAgICAgICAgICAgaXRlcmF0aW9ucysrOw0KICAgICAgICB9DQoNCiAgICAgICAgY29uc3QgYWN0dWFsQXQgPSBib2x0LmF0Ow0KICAgICAgICBjb25zdCBib2x0U3RyZXNzID0gRmJvbHQgLyAoYWN0dWFsQXQgLyAxZTYpIC8gMWU2Ow0KICAgICAgICBjb25zdCBhY3R1YWxTYWZldHlGYWN0b3IgPSBpbnB1dHMuYWxsb3dhYmxlU3RyZXNzIC8gYm9sdFN0cmVzczsNCg0KICAgICAgICBjb25zdCBib2x0U3BhY2luZyA9IE1hdGguUEkgKiBpbnB1dHMuYm9sdENpcmNsZSAvIGJvbHRRdHk7DQoNCiAgICAgICAgY29uc3QgSyA9IDAuMjsNCiAgICAgICAgY29uc3QgYm9sdERtID0gYm9sdC5kIC8gMTAwMDsNCiAgICAgICAgY29uc3QgdG9ycXVlID0gSyAqIEZib2x0ICogYm9sdERtOw0KDQogICAgICAgIGxldCBzdGF0dXMsIHN0YXR1c0NsYXNzLCByaXNrTGV2ZWw7DQogICAgICAgIGlmIChhY3R1YWxTYWZldHlGYWN0b3IgPj0gMS41ICYmIEZiIDw9IEZwICogaW5wdXRzLnNhZmV0eUZhY3RvciArIEZnICogMS4yKSB7DQogICAgICAgICAgICBzdGF0dXMgPSAnU2FmZSc7DQogICAgICAgICAgICBzdGF0dXNDbGFzcyA9ICdzYWZlJzsNCiAgICAgICAgICAgIHJpc2tMZXZlbCA9IDAuMTU7DQogICAgICAgIH0gZWxzZSBpZiAoYWN0dWFsU2FmZXR5RmFjdG9yID49IDEuMCkgew0KICAgICAgICAgICAgc3RhdHVzID0gJ1dhcm5pbmcnOw0KICAgICAgICAgICAgc3RhdHVzQ2xhc3MgPSAnd2FybmluZyc7DQogICAgICAgICAgICByaXNrTGV2ZWwgPSAwLjU7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBzdGF0dXMgPSAnRmFpbHVyZSBSaXNrJzsNCiAgICAgICAgICAgIHN0YXR1c0NsYXNzID0gJ2NyaXRpY2FsJzsNCiAgICAgICAgICAgIHJpc2tMZXZlbCA9IDAuOTsNCiAgICAgICAgfQ0KDQogICAgICAgIGNvbnN0IHdhcm5pbmdzID0gW107DQogICAgICAgIGlmIChhY3R1YWxBdCA8IHJlcXVpcmVkQXQpIHsNCiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goJ1NlbGVjdGVkIGJvbHQgc2l6ZSBtYXkgYmUgaW5zdWZmaWNpZW50IGZvciB0aGUgcmVxdWlyZWQgbG9hZC4gQ29uc2lkZXIgbGFyZ2VyIGJvbHRzIG9yIG1vcmUgYm9sdHMuJyk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGlucHV0cy5wcmVzc3VyZSA+IDEwKSB7DQogICAgICAgICAgICB3YXJuaW5ncy5wdXNoKCdIaWdoIG9wZXJhdGluZyBwcmVzc3VyZSAtIHZlcmlmeSBhZ2FpbnN0IGZsYW5nZSBwcmVzc3VyZSBjbGFzcyBhbmQgYXBwbGljYWJsZSBkZXNpZ24gY29kZXMuJyk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGJvbHRTcGFjaW5nID4gMTIwKSB7DQogICAgICAgICAgICB3YXJuaW5ncy5wdXNoKCdCb2x0IHNwYWNpbmcgZXhjZWVkcyAxMjAgbW0gLSBjb25zaWRlciBhZGRpbmcgbW9yZSBib2x0cyBmb3IgZXZlbiBsb2FkIGRpc3RyaWJ1dGlvbi4nKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoYm9sdFNwYWNpbmcgPCAyNSkgew0KICAgICAgICAgICAgd2FybmluZ3MucHVzaCgnQm9sdCBzcGFjaW5nIGlzIHZlcnkgdGlnaHQgLSB2ZXJpZnkgZmxhbmdlIGJvbHQgaG9sZSBhdmFpbGFiaWxpdHkuJyk7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gew0KICAgICAgICAgICAgRnAsIEZnLCBGYiwgRmJvbHQsIGJvbHRRdHksIGJvbHQsIHJlcXVpcmVkQXQsIGFjdHVhbEF0LA0KICAgICAgICAgICAgYm9sdFN0cmVzcywgYWN0dWFsU2FmZXR5RmFjdG9yLCBib2x0U3BhY2luZywgdG9ycXVlLA0KICAgICAgICAgICAgcHJlc3N1cmVBcmVhTTIsIHByZXNzdXJlQXJlYU1tMiwgZWZmZWN0aXZlRGlhbWV0ZXIsDQogICAgICAgICAgICBzdGF0dXMsIHN0YXR1c0NsYXNzLCByaXNrTGV2ZWwsIHdhcm5pbmdzDQogICAgICAgIH07DQogICAgfQ0KDQogICAgZnVuY3Rpb24gc2hvd0Vycm9ycyhlcnJvcnMsIHdhcm5pbmdzKSB7DQogICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAwICYmICghd2FybmluZ3MgfHwgd2FybmluZ3MubGVuZ3RoID09PSAwKSkgew0KICAgICAgICAgICAgZXJyb3JCb3guaGlkZGVuID0gdHJ1ZTsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICBsZXQgaHRtbCA9ICcnOw0KICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkgew0KICAgICAgICAgICAgaHRtbCArPSAnPHN0cm9uZz5QbGVhc2UgY29ycmVjdCB0aGUgZm9sbG93aW5nOjwvc3Ryb25nPjx1bD4nOw0KICAgICAgICAgICAgZXJyb3JzLmZvckVhY2goZSA9PiB7IGh0bWwgKz0gJzxsaT4nICsgZSArICc8L2xpPic7IH0pOw0KICAgICAgICAgICAgaHRtbCArPSAnPC91bD4nOw0KICAgICAgICB9DQogICAgICAgIGlmICh3YXJuaW5ncyAmJiB3YXJuaW5ncy5sZW5ndGgpIHsNCiAgICAgICAgICAgIGh0bWwgKz0gJzxzdHJvbmc+V2FybmluZ3M6PC9zdHJvbmc+PHVsPic7DQogICAgICAgICAgICB3YXJuaW5ncy5mb3JFYWNoKHcgPT4geyBodG1sICs9ICc8bGk+JyArIHcgKyAnPC9saT4nOyB9KTsNCiAgICAgICAgICAgIGh0bWwgKz0gJzwvdWw+JzsNCiAgICAgICAgfQ0KICAgICAgICBlcnJvckJveC5pbm5lckhUTUwgPSBodG1sOw0KICAgICAgICBlcnJvckJveC5oaWRkZW4gPSBmYWxzZTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBkaXNwbGF5UmVzdWx0cyhyZXN1bHQpIHsNCiAgICAgICAgZWwoJ3Jlc1RvdGFsRm9yY2UnKS50ZXh0Q29udGVudCA9IGZvcm1hdEZvcmNlKHJlc3VsdC5GYik7DQogICAgICAgIGVsKCdyZXNCb2x0UXR5JykudGV4dENvbnRlbnQgPSByZXN1bHQuYm9sdFF0eSArICcgYm9sdHMnOw0KICAgICAgICBlbCgncmVzQm9sdFNpemUnKS50ZXh0Q29udGVudCA9IHJlc3VsdC5ib2x0LmxhYmVsOw0KICAgICAgICBlbCgncmVzQm9sdExvYWQnKS50ZXh0Q29udGVudCA9IGZvcm1hdEZvcmNlKHJlc3VsdC5GYm9sdCk7DQogICAgICAgIGVsKCdyZXNUb3JxdWUnKS50ZXh0Q29udGVudCA9IHJlc3VsdC50b3JxdWUudG9GaXhlZCgxKSArICcgTi5tJzsNCiAgICAgICAgZWwoJ3Jlc0JvbHRTdHJlc3MnKS50ZXh0Q29udGVudCA9IHJlc3VsdC5ib2x0U3RyZXNzLnRvRml4ZWQoMSkgKyAnIE1QYSc7DQogICAgICAgIGVsKCdyZXNTYWZldHlGYWN0b3InKS50ZXh0Q29udGVudCA9IHJlc3VsdC5hY3R1YWxTYWZldHlGYWN0b3IudG9GaXhlZCgyKTsNCg0KICAgICAgICBjb25zdCBzdGF0dXNFbCA9IGVsKCdyZXNTdGF0dXMnKTsNCiAgICAgICAgc3RhdHVzRWwudGV4dENvbnRlbnQgPSByZXN1bHQuc3RhdHVzOw0KICAgICAgICBzdGF0dXNFbC5jbGFzc05hbWUgPSAnZmJjLXJlc3VsdC12IGZiYy1iYWRnZSAnICsgcmVzdWx0LnN0YXR1c0NsYXNzOw0KDQogICAgICAgIGNvbnN0IHN0YXR1c0NhcmQgPSBlbCgnc3RhdHVzQ2FyZCcpOw0KICAgICAgICBzdGF0dXNDYXJkLmNsYXNzTmFtZSA9ICdmYmMtcmVzdWx0IGZiYy1iYWRnZS1ib3ggJyArIHJlc3VsdC5zdGF0dXNDbGFzczsNCg0KICAgICAgICBlbCgnZGV0RnAnKS50ZXh0Q29udGVudCA9IGZvcm1hdEZvcmNlKHJlc3VsdC5GcCk7DQogICAgICAgIGVsKCdkZXRGZycpLnRleHRDb250ZW50ID0gZm9ybWF0Rm9yY2UocmVzdWx0LkZnKTsNCiAgICAgICAgZWwoJ2RldEFyZWEnKS50ZXh0Q29udGVudCA9IGZvcm1hdEFyZWEocmVzdWx0LnByZXNzdXJlQXJlYU1tMik7DQogICAgICAgIGVsKCdkZXRBdCcpLnRleHRDb250ZW50ID0gcmVzdWx0LnJlcXVpcmVkQXQudG9GaXhlZCgxKSArICcgbW0yJzsNCiAgICAgICAgZWwoJ2RldFNwYWNpbmcnKS50ZXh0Q29udGVudCA9IHJlc3VsdC5ib2x0U3BhY2luZy50b0ZpeGVkKDEpICsgJyBtbSc7DQogICAgICAgIGVsKCdkZXRBY3R1YWxBdCcpLnRleHRDb250ZW50ID0gcmVzdWx0LmFjdHVhbEF0ICsgJyBtbTInOw0KDQogICAgICAgIHJlc3VsdHNQYW5lbC5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpOw0KICAgICAgICByZXN1bHRzUGFuZWwuY2xhc3NMaXN0LmFkZCgnZmJjLXNob3cnKTsNCiAgICAgICAgcmVzdWx0c1BhbmVsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgIH0NCg0KICAgIC8vIC0tLSBWaXN1YWxpemF0aW9ucyAtLS0NCg0KICAgIGZ1bmN0aW9uIGRyYXdCb2x0Q2lyY2xlKHN2ZywgYm9sdFF0eSwgZmxhbmdlT0QsIGJvbHRDaXJjbGUsIGlubmVyRCkgew0KICAgICAgICBjb25zdCBjeCA9IDE2MCwgY3kgPSAxNjA7DQogICAgICAgIGNvbnN0IG1heFIgPSAxMzA7DQogICAgICAgIGNvbnN0IHNjYWxlID0gbWF4UiAvIChmbGFuZ2VPRCAvIDIpOw0KDQogICAgICAgIGNvbnN0IHJGbGFuZ2UgPSAoZmxhbmdlT0QgLyAyKSAqIHNjYWxlOw0KICAgICAgICBjb25zdCByQm9sdCA9IChib2x0Q2lyY2xlIC8gMikgKiBzY2FsZTsNCiAgICAgICAgY29uc3QgcklubmVyID0gKGlubmVyRCAvIDIpICogc2NhbGU7DQogICAgICAgIGNvbnN0IHJIb2xlID0gTWF0aC5tYXgoNCwgTWF0aC5taW4oOCwgckJvbHQgKiAwLjA2KSk7DQoNCiAgICAgICAgbGV0IGh0bWwgPSAnJzsNCg0KICAgICAgICBodG1sICs9IGA8Y2lyY2xlIGN4PSIke2N4fSIgY3k9IiR7Y3l9IiByPSIke3JGbGFuZ2V9IiBmaWxsPSIjZGRlM2VhIiBzdHJva2U9IiMxYTUyNzYiIHN0cm9rZS13aWR0aD0iMiIvPmA7DQogICAgICAgIGh0bWwgKz0gYDxjaXJjbGUgY3g9IiR7Y3h9IiBjeT0iJHtjeX0iIHI9IiR7cklubmVyfSIgZmlsbD0iI2YwZjNmNiIgc3Ryb2tlPSIjNmM3YTg5IiBzdHJva2Utd2lkdGg9IjEuNSIvPmA7DQogICAgICAgIGh0bWwgKz0gYDxjaXJjbGUgY3g9IiR7Y3h9IiBjeT0iJHtjeX0iIHI9IiR7ckJvbHR9IiBmaWxsPSJub25lIiBzdHJva2U9IiMyNDcxYTMiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtZGFzaGFycmF5PSI2LDQiLz5gOw0KDQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYm9sdFF0eTsgaSsrKSB7DQogICAgICAgICAgICBjb25zdCBhbmdsZSA9ICgyICogTWF0aC5QSSAqIGkgLyBib2x0UXR5KSAtIE1hdGguUEkgLyAyOw0KICAgICAgICAgICAgY29uc3QgYnggPSBjeCArIHJCb2x0ICogTWF0aC5jb3MoYW5nbGUpOw0KICAgICAgICAgICAgY29uc3QgYnkgPSBjeSArIHJCb2x0ICogTWF0aC5zaW4oYW5nbGUpOw0KICAgICAgICAgICAgaHRtbCArPSBgPGNpcmNsZSBjeD0iJHtieC50b0ZpeGVkKDEpfSIgY3k9IiR7YnkudG9GaXhlZCgxKX0iIHI9IiR7ckhvbGV9IiBmaWxsPSIjZTY3ZTIyIiBzdHJva2U9IiNkMzU0MDAiIHN0cm9rZS13aWR0aD0iMSIvPmA7DQogICAgICAgIH0NCg0KICAgICAgICBodG1sICs9IGA8bGluZSB4MT0iJHtjeCAtIDZ9IiB5MT0iJHtjeX0iIHgyPSIke2N4ICsgNn0iIHkyPSIke2N5fSIgc3Ryb2tlPSIjYWFhIiBzdHJva2Utd2lkdGg9IjEiLz5gOw0KICAgICAgICBodG1sICs9IGA8bGluZSB4MT0iJHtjeH0iIHkxPSIke2N5IC0gNn0iIHgyPSIke2N4fSIgeTI9IiR7Y3kgKyA2fSIgc3Ryb2tlPSIjYWFhIiBzdHJva2Utd2lkdGg9IjEiLz5gOw0KDQogICAgICAgIHN2Zy5pbm5lckhUTUwgPSBodG1sOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGRyYXdQcmVzc3VyZUZvcmNlKHN2ZywgRnApIHsNCiAgICAgICAgY29uc3QgZm9yY2VLbiA9IEZwIC8gMTAwMDsNCiAgICAgICAgY29uc3QgYXJyb3dMZW4gPSBNYXRoLm1pbig4MCwgTWF0aC5tYXgoMzAsIGZvcmNlS24gKiAyKSk7DQoNCiAgICAgICAgbGV0IGh0bWwgPSAnPGRlZnM+PG1hcmtlciBpZD0iZmJjLWFycm93LXJlZCIgbWFya2VyV2lkdGg9IjgiIG1hcmtlckhlaWdodD0iOCIgcmVmWD0iNCIgcmVmWT0iNCIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCwwIEw4LDQgTDAsOCBaIiBmaWxsPSIjZTc0YzNjIi8+PC9tYXJrZXI+PC9kZWZzPic7DQoNCiAgICAgICAgaHRtbCArPSBgPHJlY3QgeD0iNjAiIHk9IjYwIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjgwIiByeD0iNCIgZmlsbD0iI2RkZTNlYSIgc3Ryb2tlPSIjMWE1Mjc2IiBzdHJva2Utd2lkdGg9IjIiLz5gOw0KICAgICAgICBodG1sICs9IGA8cmVjdCB4PSIxMDAiIHk9IjcwIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjYwIiByeD0iMiIgZmlsbD0iI2VhZjJmOCIgc3Ryb2tlPSIjMjQ3MWEzIiBzdHJva2Utd2lkdGg9IjEiLz5gOw0KDQogICAgICAgIGZvciAobGV0IHggPSAxMTA7IHggPD0gMjEwOyB4ICs9IDI1KSB7DQogICAgICAgICAgICBodG1sICs9IGA8bGluZSB4MT0iJHt4fSIgeTE9Ijc1IiB4Mj0iJHt4fSIgeTI9IiR7NzUgKyBhcnJvd0xlbiAqIDAuNX0iIHN0cm9rZT0iI2U3NGMzYyIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2ZiYy1hcnJvdy1yZWQpIi8+YDsNCiAgICAgICAgfQ0KDQogICAgICAgIGh0bWwgKz0gYDx0ZXh0IHg9IjE2MCIgeT0iMTcwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMmMzZTUwIiBmb250LWZhbWlseT0iU2Vnb2UgVUksc2Fucy1zZXJpZiI+RnAgPSAke2Zvcm1hdEZvcmNlKEZwKX08L3RleHQ+YDsNCiAgICAgICAgaHRtbCArPSBgPHRleHQgeD0iMTYwIiB5PSIxODgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTEiIGZpbGw9IiM2YzdhODkiIGZvbnQtZmFtaWx5PSJTZWdvZSBVSSxzYW5zLXNlcmlmIj5QcmVzc3VyZSBTZXBhcmF0aW5nIEZvcmNlPC90ZXh0PmA7DQoNCiAgICAgICAgc3ZnLmlubmVySFRNTCA9IGh0bWw7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZHJhd1N0cmVzc0dhdWdlKHN2Zywgc3RyZXNzLCBhbGxvd2FibGUpIHsNCiAgICAgICAgY29uc3QgcGN0ID0gTWF0aC5taW4oMTAwLCAoc3RyZXNzIC8gYWxsb3dhYmxlKSAqIDEwMCk7DQogICAgICAgIGNvbnN0IGN4ID0gMTQwLCBjeSA9IDEyMCwgciA9IDgwOw0KICAgICAgICBjb25zdCBzdGFydEFuZ2xlID0gTWF0aC5QSTsNCiAgICAgICAgY29uc3Qgc3dlZXAgPSBNYXRoLlBJOw0KDQogICAgICAgIGxldCBodG1sID0gJyc7DQoNCiAgICAgICAgaHRtbCArPSBhcmNQYXRoKGN4LCBjeSwgciwgc3RhcnRBbmdsZSwgc3RhcnRBbmdsZSArIHN3ZWVwLCAnI2RkZTNlYScsIDE0KTsNCiAgICAgICAgaHRtbCArPSBhcmNQYXRoKGN4LCBjeSwgciwgc3RhcnRBbmdsZSwgc3RhcnRBbmdsZSArIHN3ZWVwICogMC42LCAnIzI3YWU2MCcsIDE0KTsNCiAgICAgICAgaHRtbCArPSBhcmNQYXRoKGN4LCBjeSwgciwgc3RhcnRBbmdsZSArIHN3ZWVwICogMC42LCBzdGFydEFuZ2xlICsgc3dlZXAgKiAwLjg1LCAnI2YzOWMxMicsIDE0KTsNCiAgICAgICAgaHRtbCArPSBhcmNQYXRoKGN4LCBjeSwgciwgc3RhcnRBbmdsZSArIHN3ZWVwICogMC44NSwgc3RhcnRBbmdsZSArIHN3ZWVwLCAnI2U3NGMzYycsIDE0KTsNCg0KICAgICAgICBjb25zdCBuZWVkbGVBbmdsZSA9IHN0YXJ0QW5nbGUgKyBzd2VlcCAqIChwY3QgLyAxMDApOw0KICAgICAgICBjb25zdCBueCA9IGN4ICsgKHIgLSAxMCkgKiBNYXRoLmNvcyhuZWVkbGVBbmdsZSk7DQogICAgICAgIGNvbnN0IG55ID0gY3kgKyAociAtIDEwKSAqIE1hdGguc2luKG5lZWRsZUFuZ2xlKTsNCiAgICAgICAgaHRtbCArPSBgPGxpbmUgeDE9IiR7Y3h9IiB5MT0iJHtjeX0iIHgyPSIke254LnRvRml4ZWQoMSl9IiB5Mj0iJHtueS50b0ZpeGVkKDEpfSIgc3Ryb2tlPSIjMmMzZTUwIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+YDsNCiAgICAgICAgaHRtbCArPSBgPGNpcmNsZSBjeD0iJHtjeH0iIGN5PSIke2N5fSIgcj0iNSIgZmlsbD0iIzJjM2U1MCIvPmA7DQoNCiAgICAgICAgaHRtbCArPSBgPHRleHQgeD0iJHtjeH0iIHk9IiR7Y3kgKyAzMH0iIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSJib2xkIiBmaWxsPSIjMmMzZTUwIiBmb250LWZhbWlseT0iU2Vnb2UgVUksc2Fucy1zZXJpZiI+JHtzdHJlc3MudG9GaXhlZCgxKX0gTVBhPC90ZXh0PmA7DQoNCiAgICAgICAgc3ZnLmlubmVySFRNTCA9IGh0bWw7DQogICAgICAgIGVsKCdnYXVnZUNhcHRpb24nKS50ZXh0Q29udGVudCA9DQogICAgICAgICAgICBgJHtwY3QudG9GaXhlZCgwKX0lIG9mIGFsbG93YWJsZSBzdHJlc3MgKCR7YWxsb3dhYmxlLnRvRml4ZWQoMCl9IE1QYSlgOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGFyY1BhdGgoY3gsIGN5LCByLCBzdGFydEEsIGVuZEEsIGNvbG9yLCB3aWR0aCkgew0KICAgICAgICBjb25zdCB4MSA9IGN4ICsgciAqIE1hdGguY29zKHN0YXJ0QSk7DQogICAgICAgIGNvbnN0IHkxID0gY3kgKyByICogTWF0aC5zaW4oc3RhcnRBKTsNCiAgICAgICAgY29uc3QgeDIgPSBjeCArIHIgKiBNYXRoLmNvcyhlbmRBKTsNCiAgICAgICAgY29uc3QgeTIgPSBjeSArIHIgKiBNYXRoLnNpbihlbmRBKTsNCiAgICAgICAgY29uc3QgbGFyZ2UgPSAoZW5kQSAtIHN0YXJ0QSkgPiBNYXRoLlBJID8gMSA6IDA7DQogICAgICAgIHJldHVybiBgPHBhdGggZD0iTSR7eDEudG9GaXhlZCgxKX0sJHt5MS50b0ZpeGVkKDEpfSBBJHtyfSwke3J9IDAgJHtsYXJnZX0gMSAke3gyLnRvRml4ZWQoMSl9LCR7eTIudG9GaXhlZCgxKX0iIGZpbGw9Im5vbmUiIHN0cm9rZT0iJHtjb2xvcn0iIHN0cm9rZS13aWR0aD0iJHt3aWR0aH0iIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPmA7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZHJhd1Jpc2tJbmRpY2F0b3Iocmlza0xldmVsLCBzdGF0dXMpIHsNCiAgICAgICAgY29uc3QgZmlsbCA9IGVsKCdyaXNrRmlsbCcpOw0KICAgICAgICBjb25zdCB0ZXh0ID0gZWwoJ3Jpc2tUZXh0Jyk7DQogICAgICAgIGNvbnN0IHBjdCA9IE1hdGgubWluKDk2LCBNYXRoLm1heCgyLCByaXNrTGV2ZWwgKiAxMDApKTsNCiAgICAgICAgZmlsbC5zdHlsZS5sZWZ0ID0gcGN0ICsgJyUnOw0KDQogICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gew0KICAgICAgICAgICAgc2FmZTogJ0JvbHQgcHJlbG9hZCBpcyBzdWZmaWNpZW50IGZvciBzZWFsaW5nLiBDb25uZWN0aW9uIGFwcGVhcnMgcmVsaWFibGUuJywNCiAgICAgICAgICAgIHdhcm5pbmc6ICdCb2x0IHByZWxvYWQgbWFyZ2luIGlzIGxpbWl0ZWQuIFJldmlldyBib2x0IHNpemUgYW5kIHF1YW50aXR5LicsDQogICAgICAgICAgICBjcml0aWNhbDogJ1Jpc2sgb2YgZ2Fza2V0IGxlYWthZ2Ugb3IgYm9sdCBmYWlsdXJlLiBSZWRlc2lnbiByZWNvbW1lbmRlZC4nDQogICAgICAgIH07DQogICAgICAgIHRleHQudGV4dENvbnRlbnQgPSBtZXNzYWdlc1tzdGF0dXNdIHx8ICcnOw0KICAgICAgICB0ZXh0LnN0eWxlLmNvbG9yID0gc3RhdHVzID09PSAnc2FmZScgPyAnIzI3YWU2MCcgOiBzdGF0dXMgPT09ICd3YXJuaW5nJyA\/ICcjZjM5YzEyJyA6ICcjZTc0YzNjJzsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiByZW5kZXJWaXN1YWxpemF0aW9ucyhyZXN1bHQsIGlucHV0cykgew0KICAgICAgICBkcmF3Qm9sdENpcmNsZSgNCiAgICAgICAgICAgIGVsKCdib2x0Q2lyY2xlU3ZnJyksDQogICAgICAgICAgICByZXN1bHQuYm9sdFF0eSwNCiAgICAgICAgICAgIGlucHV0cy5mbGFuZ2VPRCwNCiAgICAgICAgICAgIGlucHV0cy5ib2x0Q2lyY2xlLA0KICAgICAgICAgICAgaW5wdXRzLmlubmVyRGlhbWV0ZXINCiAgICAgICAgKTsNCiAgICAgICAgZHJhd1ByZXNzdXJlRm9yY2UoZWwoJ3ByZXNzdXJlU3ZnJyksIHJlc3VsdC5GcCk7DQogICAgICAgIGRyYXdTdHJlc3NHYXVnZSgNCiAgICAgICAgICAgIGVsKCdzdHJlc3NHYXVnZVN2ZycpLA0KICAgICAgICAgICAgcmVzdWx0LmJvbHRTdHJlc3MsDQogICAgICAgICAgICBpbnB1dHMuYWxsb3dhYmxlU3RyZXNzDQogICAgICAgICk7DQogICAgICAgIGRyYXdSaXNrSW5kaWNhdG9yKHJlc3VsdC5yaXNrTGV2ZWwsIHJlc3VsdC5zdGF0dXNDbGFzcyk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gaGFuZGxlQ2FsY3VsYXRlKGUpIHsNCiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICBjb25zdCBpbnB1dHMgPSByZWFkSW5wdXRzKCk7DQogICAgICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlKGlucHV0cyk7DQoNCiAgICAgICAgaWYgKGVycm9ycy5sZW5ndGgpIHsNCiAgICAgICAgICAgIHNob3dFcnJvcnMoZXJyb3JzKTsNCiAgICAgICAgICAgIHJlc3VsdHNQYW5lbC5zZXRBdHRyaWJ1dGUoJ2hpZGRlbicsICcnKTsNCiAgICAgICAgICAgIHJlc3VsdHNQYW5lbC5jbGFzc0xpc3QucmVtb3ZlKCdmYmMtc2hvdycpOw0KICAgICAgICAgICAgcmVzdWx0c1BhbmVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGUoaW5wdXRzKTsNCiAgICAgICAgZGlzcGxheVJlc3VsdHMocmVzdWx0KTsNCiAgICAgICAgcmVuZGVyVmlzdWFsaXphdGlvbnMocmVzdWx0LCBpbnB1dHMpOw0KICAgICAgICBzaG93RXJyb3JzKFtdLCByZXN1bHQud2FybmluZ3MpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHVwZGF0ZVVuaXRMYWJlbHMoKSB7DQogICAgICAgIGNvbnN0IGx1ID0gZWwoJ2xlbmd0aFVuaXQnKS52YWx1ZTsNCiAgICAgICAgZWwoJ2xlbmd0aFVuaXRMYWJlbCcpLnRleHRDb250ZW50ID0gbHU7DQogICAgICAgIGVsKCdsZW5ndGhVbml0TGFiZWwyJykudGV4dENvbnRlbnQgPSBsdTsNCg0KICAgICAgICBjb25zdCBzdSA9IGVsKCdzdHJlc3NVbml0JykudmFsdWU7DQogICAgICAgIGVsKCdzdHJlc3NVbml0TGFiZWwnKS50ZXh0Q29udGVudCA9IHN1Ow0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGhhbmRsZUdhc2tldENoYW5nZSgpIHsNCiAgICAgICAgY29uc3QgdHlwZSA9IGVsKCdnYXNrZXRUeXBlJykudmFsdWU7DQogICAgICAgIGlmICh0eXBlICE9PSAnY3VzdG9tJykgew0KICAgICAgICAgICAgZWwoJ2dhc2tldFN0cmVzcycpLnZhbHVlID0gR0FTS0VUX0RFRkFVTFRTW3R5cGVdOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgZnVuY3Rpb24gaGFuZGxlQm9sdEdyYWRlQ2hhbmdlKCkgew0KICAgICAgICBjb25zdCBncmFkZSA9IGVsKCdib2x0R3JhZGUnKS52YWx1ZTsNCiAgICAgICAgaWYgKGdyYWRlICE9PSAnY3VzdG9tJykgew0KICAgICAgICAgICAgY29uc3QgZCA9IEJPTFRfR1JBREVfREVGQVVMVFNbZ3JhZGVdOw0KICAgICAgICAgICAgZWwoJ3RlbnNpbGVTdHJlbmd0aCcpLnZhbHVlID0gZC50ZW5zaWxlOw0KICAgICAgICAgICAgZWwoJ2FsbG93YWJsZVN0cmVzcycpLnZhbHVlID0gZC5hbGxvd2FibGU7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBmdW5jdGlvbiBoYW5kbGVMZW5ndGhVbml0Q2hhbmdlKCkgew0KICAgICAgICBjb25zdCBuZXdVbml0ID0gZWwoJ2xlbmd0aFVuaXQnKS52YWx1ZTsNCiAgICAgICAgY29uc3Qgb2xkVW5pdCA9IG5ld1VuaXQgPT09ICdtbScgPyAnaW5jaCcgOiAnbW0nOw0KICAgICAgICBbJ2ZsYW5nZU9EJywgJ2JvbHRDaXJjbGUnLCAnaW5uZXJEaWFtZXRlciddLmZvckVhY2goaWQgPT4gew0KICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBlbChpZCk7DQogICAgICAgICAgICBjb25zdCBtbVZhbCA9IHRvTW0ocGFyc2VGbG9hdChpbnB1dC52YWx1ZSkgfHwgMCwgb2xkVW5pdCk7DQogICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHBhcnNlRmxvYXQoZnJvbU1tKG1tVmFsLCBuZXdVbml0KS50b0ZpeGVkKG5ld1VuaXQgPT09ICdtbScgPyAxIDogMykpOw0KICAgICAgICB9KTsNCiAgICAgICAgdXBkYXRlVW5pdExhYmVscygpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmVzc1VuaXRDaGFuZ2UoKSB7DQogICAgICAgIGNvbnN0IG5ld1VuaXQgPSBlbCgnc3RyZXNzVW5pdCcpLnZhbHVlOw0KICAgICAgICBjb25zdCBvbGRVbml0ID0gbmV3VW5pdCA9PT0gJ01QYScgPyAncHNpJyA6ICdNUGEnOw0KICAgICAgICBbJ3RlbnNpbGVTdHJlbmd0aCcsICdhbGxvd2FibGVTdHJlc3MnXS5mb3JFYWNoKGlkID0+IHsNCiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gZWwoaWQpOw0KICAgICAgICAgICAgY29uc3QgbXBhVmFsID0gdG9NcGEocGFyc2VGbG9hdChpbnB1dC52YWx1ZSkgfHwgMCwgb2xkVW5pdCk7DQogICAgICAgICAgICBpbnB1dC52YWx1ZSA9IG5ld1VuaXQgPT09ICdNUGEnDQogICAgICAgICAgICAgICAgPyBtcGFWYWwudG9GaXhlZCgwKQ0KICAgICAgICAgICAgICAgIDogKG1wYVZhbCAvIDAuMDA2ODk0NzYpLnRvRml4ZWQoMCk7DQogICAgICAgIH0pOw0KICAgICAgICB1cGRhdGVVbml0TGFiZWxzKCk7DQogICAgfQ0KDQogICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBoYW5kbGVDYWxjdWxhdGUpOw0KICAgIGVsKCdnYXNrZXRUeXBlJykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgaGFuZGxlR2Fza2V0Q2hhbmdlKTsNCiAgICBlbCgnYm9sdEdyYWRlJykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgaGFuZGxlQm9sdEdyYWRlQ2hhbmdlKTsNCiAgICBlbCgnbGVuZ3RoVW5pdCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGhhbmRsZUxlbmd0aFVuaXRDaGFuZ2UpOw0KICAgIGVsKCdzdHJlc3NVbml0JykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgaGFuZGxlU3RyZXNzVW5pdENoYW5nZSk7DQoNCiAgICB1cGRhdGVVbml0TGFiZWxzKCk7DQogICAgfQ0KDQogICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykgew0KICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgaW5pdENhbGN1bGF0b3IpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIGluaXRDYWxjdWxhdG9yKCk7DQogICAgfQ0KfSkoKTsNCg==\")))();\n  } catch (err) {\n    console.error(\"Flange Bolt Calculator error:\", err);\n  }\n})();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>The Flange Bolt Quantity and Size Calculator is a professional engineering tool designed to help users determine the required number, size, and specifications of bolts&#8230;<\/p>","protected":false},"author":2,"featured_media":24705,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"pmpro_default_level":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[8520],"tags":[8618,8598,8619,8617],"class_list":["post-24704","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mechanical-basic-component-design","tag-bolt-selection","tag-fastener-tools","tag-flange-bolts","tag-flange-design","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/08\/Flange-Bolt-Quantity-and-Size-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/posts\/24704","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/comments?post=24704"}],"version-history":[{"count":0,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/posts\/24704\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/media\/24705"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/media?parent=24704"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/categories?post=24704"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/tags?post=24704"}],"curies":[{"name":"WP","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}