{"id":24803,"date":"2026-09-02T07:00:09","date_gmt":"2026-09-02T07:00:09","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24803"},"modified":"2026-09-02T07:05:48","modified_gmt":"2026-09-02T07:05:48","slug":"bending-stress-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/pt\/bending-stress-calculator\/","title":{"rendered":"Bending Stress Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Bending Stress Calculator<\/strong> is a practical engineering tool designed to calculate bending stress, section modulus, bending moment, and allowable bending capacity for beams and structural components. By entering load conditions, beam dimensions, cross-section geometry, and material properties, users can quickly evaluate bending strength and safety. The Bending Stress Calculator is useful for mechanical design, structural analysis, beam sizing, and material selection, helping engineers identify potential bending failures and optimize component dimensions for reliable performance.<\/p>\n\n\n\n<!-- Bending Stress Calculator - WordPress Embed -->\n<!-- Paste into Custom HTML block. All CSS\/JS scoped to #bsc-calculator \u2014 will not affect other page content. -->\n<style>\n\/**\n * Bending Stress Calculator \u2014 WordPress-safe scoped styles\n * Every rule is scoped under #bsc-calculator.\n * Will NOT affect theme header, footer, sidebar, menus, or other page content.\n * No html, body, :root, or unscoped universal selectors.\n *\/\n\n.entry-content #bsc-calculator.bsc-root,\n.wp-block-html #bsc-calculator.bsc-root,\n.elementor-widget-container #bsc-calculator.bsc-root,\n#bsc-calculator.bsc-root,\n.entry-content #bsc-calculator.bsc-root *,\n.wp-block-html #bsc-calculator.bsc-root *,\n.elementor-widget-container #bsc-calculator.bsc-root *,\n#bsc-calculator.bsc-root *,\n.entry-content #bsc-calculator.bsc-root *::before,\n.wp-block-html #bsc-calculator.bsc-root *::before,\n.elementor-widget-container #bsc-calculator.bsc-root *::before,\n#bsc-calculator.bsc-root *::before,\n.entry-content #bsc-calculator.bsc-root *::after,\n.wp-block-html #bsc-calculator.bsc-root *::after,\n.elementor-widget-container #bsc-calculator.bsc-root *::after,\n#bsc-calculator.bsc-root *::after {\n    box-sizing: border-box !important;\n}\n\n.entry-content #bsc-calculator.bsc-root,\n.wp-block-html #bsc-calculator.bsc-root,\n.elementor-widget-container #bsc-calculator.bsc-root,\n#bsc-calculator.bsc-root {\n    --bsc-primary: #1a5276;\n    --bsc-primary-light: #2471a3;\n    --bsc-primary-dark: #0e3d5c;\n    --bsc-safe: #27ae60;\n    --bsc-caution: #f39c12;\n    --bsc-unsafe: #e74c3c;\n    --bsc-bg: #ffffff;\n    --bsc-card-bg: #ffffff;\n    --bsc-text: #2c3e50;\n    --bsc-text-muted: #7f8c8d;\n    --bsc-border: #dce4ec;\n    --bsc-shadow: 0 2px 8px rgba(26, 82, 118, 0.08);\n    --bsc-radius: 8px;\n    --bsc-radius-lg: 12px;\n    --bsc-font: 'Segoe UI', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;\n    --bsc-mono: Consolas, 'Courier New', monospace;\n\n    all: revert;\n    box-sizing: border-box !important;\n    display: block !important;\n    width: 100% !important;\n    max-width: 100% !important;\n    font-family: var(--bsc-font) !important;\n    font-size: 15px !important;\n    line-height: 1.6 !important;\n    color: var(--bsc-text) !important;\n    background: transparent !important;\n    border: none !important;\n    border-radius: 0 !important;\n    padding: 0 !important;\n    margin: 0 auto !important;\n    text-align: left !important;\n    position: relative !important;\n    isolation: isolate !important;\n    contain: layout style paint !important;\n    float: none !important;\n    clear: both !important;\n    z-index: auto !important;\n    letter-spacing: normal !important;\n    text-transform: none !important;\n    box-shadow: none !important;\n}\n\n.entry-content #bsc-calculator.bsc-root .bsc-wrap,\n.wp-block-html #bsc-calculator.bsc-root .bsc-wrap,\n.elementor-widget-container #bsc-calculator.bsc-root .bsc-wrap,\n#bsc-calculator.bsc-root .bsc-wrap {\n    background: var(--bsc-bg) !important;\n    border-radius: var(--bsc-radius-lg) !important;\n    padding: 8px !important;\n}\n\n#bsc-calculator.bsc-root [hidden] {\n    display: none !important;\n}\n\n#bsc-calculator.bsc-root h1,\n#bsc-calculator.bsc-root h2,\n#bsc-calculator.bsc-root h3,\n#bsc-calculator.bsc-root h4,\n#bsc-calculator.bsc-root p,\n#bsc-calculator.bsc-root ul,\n#bsc-calculator.bsc-root ol,\n#bsc-calculator.bsc-root li,\n#bsc-calculator.bsc-root section,\n#bsc-calculator.bsc-root div,\n#bsc-calculator.bsc-root span,\n#bsc-calculator.bsc-root strong,\n#bsc-calculator.bsc-root em,\n#bsc-calculator.bsc-root summary,\n#bsc-calculator.bsc-root details,\n#bsc-calculator.bsc-root footer {\n    margin: 0 !important;\n    padding: 0 !important;\n    border: none !important;\n    box-shadow: none !important;\n    font-family: inherit !important;\n    font-style: inherit !important;\n    line-height: inherit !important;\n    letter-spacing: normal !important;\n    text-transform: none !important;\n    text-decoration: none !important;\n    float: none !important;\n    background: none !important;\n}\n\n#bsc-calculator.bsc-root button,\n#bsc-calculator.bsc-root input,\n#bsc-calculator.bsc-root select,\n#bsc-calculator.bsc-root label,\n#bsc-calculator.bsc-root legend {\n    font-family: var(--bsc-font) !important;\n    color: inherit !important;\n    margin: 0 !important;\n    max-width: none !important;\n    min-width: 0 !important;\n    float: none !important;\n    text-transform: none !important;\n    letter-spacing: normal !important;\n    box-shadow: none !important;\n}\n\n#bsc-calculator.bsc-root ul,\n#bsc-calculator.bsc-root ol {\n    list-style: none !important;\n}\n\n#bsc-calculator.bsc-root button {\n    cursor: pointer !important;\n    background: none !important;\n    border: none !important;\n    padding: 0 !important;\n    appearance: none !important;\n    -webkit-appearance: none !important;\n}\n\n#bsc-calculator.bsc-root svg {\n    display: block !important;\n    max-width: 100% !important;\n    height: auto !important;\n    float: none !important;\n}\n\n#bsc-calculator.bsc-root *,\n#bsc-calculator.bsc-root *::before,\n#bsc-calculator.bsc-root *::after {\n    box-sizing: border-box !important;\n}\n\n#bsc-calculator.bsc-root .bsc-wrap {\n    max-width: 1100px !important;\n    margin: 0 auto !important;\n    padding: 12px 8px !important;\n    width: 100% !important;\n}\n\n#bsc-calculator.bsc-root .bsc-layout {\n    display: flex !important;\n    flex-direction: column !important;\n    gap: 24px !important;\n    width: 100% !important;\n}\n\n#bsc-calculator.bsc-root .bsc-input,\n#bsc-calculator.bsc-root .bsc-output {\n    width: 100% !important;\n    display: block !important;\n    float: none !important;\n}\n\n#bsc-calculator.bsc-root .bsc-card {\n    display: block !important;\n    background: var(--bsc-card-bg) !important;\n    border-radius: var(--bsc-radius-lg) !important;\n    padding: 20px 24px !important;\n    box-shadow: var(--bsc-shadow) !important;\n    border: 1px solid var(--bsc-border) !important;\n    width: 100% !important;\n    margin: 0 !important;\n}\n\n#bsc-calculator.bsc-root .bsc-card > h2 {\n    font-size: 1.1rem !important;\n    color: var(--bsc-primary) !important;\n    margin: 0 0 16px !important;\n    padding: 0 0 8px !important;\n    border: none !important;\n    border-bottom: 2px solid var(--bsc-border) !important;\n    background: none !important;\n}\n\n#bsc-calculator.bsc-root .bsc-section + .bsc-section {\n    margin-top: 24px !important;\n    padding-top: 20px !important;\n    border-top: 1px solid var(--bsc-border) !important;\n}\n\n#bsc-calculator.bsc-root .bsc-section-title {\n    font-size: 1.05rem !important;\n    color: var(--bsc-primary) !important;\n    margin: 0 0 14px !important;\n    padding: 0 0 6px !important;\n    border: none !important;\n    border-bottom: 2px solid var(--bsc-border) !important;\n    display: flex !important;\n    align-items: center !important;\n    gap: 8px !important;\n    font-weight: 600 !important;\n    background: none !important;\n}\n\n#bsc-calculator.bsc-root .bsc-grid {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 14px !important;\n    width: 100% !important;\n}\n\n#bsc-calculator.bsc-root .bsc-field {\n    display: flex !important;\n    flex-direction: column !important;\n    gap: 4px !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    width: 100% !important;\n    min-width: 0 !important;\n}\n\n#bsc-calculator.bsc-root .bsc-field.bsc-span-full {\n    grid-column: 1 \/ -1 !important;\n}\n\n#bsc-calculator.bsc-root .bsc-field > label {\n    font-size: 0.82rem !important;\n    font-weight: 600 !important;\n    color: var(--bsc-text) !important;\n    display: flex !important;\n    align-items: center !important;\n    gap: 4px !important;\n    margin: 0 0 4px !important;\n    padding: 0 !important;\n    width: 100% !important;\n}\n\n#bsc-calculator.bsc-root .bsc-field label input[type=\"checkbox\"] {\n    width: auto !important;\n    min-height: 0 !important;\n    margin: 0 6px 0 0 !important;\n    accent-color: var(--bsc-primary);\n}\n\n#bsc-calculator.bsc-root .bsc-field input,\n#bsc-calculator.bsc-root .bsc-field select {\n    display: block !important;\n    width: 100% !important;\n    max-width: 100% !important;\n    margin: 0 !important;\n    padding: 9px 12px !important;\n    border: 1px solid var(--bsc-border) !important;\n    border-radius: var(--bsc-radius) !important;\n    font-size: 0.95rem !important;\n    font-family: var(--bsc-font) !important;\n    background: #fafbfc !important;\n    color: var(--bsc-text) !important;\n    line-height: 1.4 !important;\n    height: auto !important;\n    min-height: 38px !important;\n    box-shadow: none !important;\n    outline: none !important;\n    -webkit-appearance: none !important;\n    appearance: none !important;\n}\n\n#bsc-calculator.bsc-root .bsc-field select {\n    background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%232c3e50' d='M1 1l5 5 5-5'\/%3E%3C\/svg%3E\") !important;\n    background-repeat: no-repeat !important;\n    background-position: right 12px center !important;\n    padding-right: 32px !important;\n}\n\n#bsc-calculator.bsc-root .bsc-field input:focus,\n#bsc-calculator.bsc-root .bsc-field select:focus {\n    border-color: var(--bsc-primary-light) !important;\n    box-shadow: 0 0 0 3px rgba(36, 113, 163, 0.15) !important;\n    background-color: #fff !important;\n}\n\n#bsc-calculator.bsc-root .bsc-field input::placeholder {\n    color: #b0bec5 !important;\n    opacity: 1 !important;\n}\n\n#bsc-calculator.bsc-root .bsc-hidden {\n    display: none !important;\n}\n\n#bsc-calculator.bsc-root .bsc-tip {\n    display: inline-flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    width: 16px !important;\n    height: 16px !important;\n    border-radius: 50% !important;\n    background: var(--bsc-primary-light) !important;\n    color: #fff !important;\n    font-size: 0.65rem !important;\n    font-weight: 700 !important;\n    cursor: help !important;\n    position: relative !important;\n    flex-shrink: 0 !important;\n    line-height: 1 !important;\n}\n\n#bsc-calculator.bsc-root .bsc-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(--bsc-primary-dark);\n    color: #fff;\n    padding: 6px 10px;\n    border-radius: 6px;\n    font-size: 0.75rem;\n    font-weight: 400;\n    white-space: normal;\n    width: max-content;\n    max-width: 240px;\n    opacity: 0;\n    pointer-events: none;\n    transition: opacity 0.2s;\n    z-index: 100;\n    line-height: 1.4;\n}\n\n#bsc-calculator.bsc-root .bsc-tip:hover::after {\n    opacity: 1;\n}\n\n#bsc-calculator.bsc-root .bsc-actions {\n    display: flex !important;\n    justify-content: center !important;\n    align-items: center !important;\n    flex-wrap: wrap !important;\n    gap: 12px !important;\n    margin-top: 24px !important;\n    padding-top: 20px !important;\n    border-top: 1px solid var(--bsc-border) !important;\n    width: 100% !important;\n}\n\n#bsc-calculator.bsc-root .bsc-btn {\n    display: inline-block !important;\n    width: auto !important;\n    max-width: none !important;\n    padding: 10px 32px !important;\n    min-width: 140px !important;\n    border: none !important;\n    border-radius: var(--bsc-radius) !important;\n    font-size: 1rem !important;\n    font-weight: 600 !important;\n    cursor: pointer !important;\n    font-family: var(--bsc-font) !important;\n    line-height: 1.4 !important;\n    text-align: center !important;\n    text-decoration: none !important;\n    text-transform: none !important;\n    letter-spacing: normal !important;\n    transition: transform 0.15s, box-shadow 0.15s, background 0.2s;\n}\n\n#bsc-calculator.bsc-root .bsc-btn-primary {\n    background: linear-gradient(135deg, var(--bsc-primary) 0%, var(--bsc-primary-light) 100%) !important;\n    color: #fff !important;\n    box-shadow: 0 3px 12px rgba(26, 82, 118, 0.3) !important;\n}\n\n#bsc-calculator.bsc-root .bsc-btn-primary:hover {\n    background: linear-gradient(135deg, var(--bsc-primary-light) 0%, var(--bsc-primary) 100%) !important;\n    color: #fff !important;\n    transform: translateY(-1px);\n}\n\n#bsc-calculator.bsc-root .bsc-btn-secondary {\n    background: #ecf0f1 !important;\n    color: var(--bsc-text) !important;\n    border: 1px solid var(--bsc-border) !important;\n}\n\n#bsc-calculator.bsc-root .bsc-btn-secondary:hover {\n    background: #dfe6e9 !important;\n}\n\n#bsc-calculator.bsc-root .bsc-viz-row {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 16px !important;\n    margin-bottom: 20px !important;\n    width: 100% !important;\n}\n\n#bsc-calculator.bsc-root .bsc-viz-card {\n    background: #fafbfc !important;\n    border: 1px solid var(--bsc-border) !important;\n    border-radius: var(--bsc-radius) !important;\n    padding: 14px !important;\n}\n\n#bsc-calculator.bsc-root .bsc-viz-card h4 {\n    font-size: 0.85rem !important;\n    color: var(--bsc-primary) !important;\n    margin: 0 0 10px !important;\n    font-weight: 600 !important;\n}\n\n#bsc-calculator.bsc-root .bsc-illustration {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    min-height: 120px !important;\n}\n\n#bsc-calculator.bsc-root .bsc-illustration svg {\n    max-width: 100% !important;\n    height: auto !important;\n}\n\n#bsc-calculator.bsc-root .bsc-util-bar-wrap {\n    display: flex !important;\n    align-items: center !important;\n    gap: 12px !important;\n}\n\n#bsc-calculator.bsc-root .bsc-util-bar {\n    flex: 1 !important;\n    height: 22px !important;\n    background: #ecf0f1 !important;\n    border-radius: 11px !important;\n    overflow: hidden !important;\n    position: relative !important;\n}\n\n#bsc-calculator.bsc-root .bsc-util-fill {\n    height: 100% !important;\n    width: 0 !important;\n    background: var(--bsc-safe) !important;\n    border-radius: 11px !important;\n    transition: width 0.4s ease, background 0.3s !important;\n}\n\n#bsc-calculator.bsc-root .bsc-util-fill.bsc-caution {\n    background: var(--bsc-caution) !important;\n}\n\n#bsc-calculator.bsc-root .bsc-util-fill.bsc-unsafe {\n    background: var(--bsc-unsafe) !important;\n}\n\n#bsc-calculator.bsc-root .bsc-util-text {\n    font-size: 1.1rem !important;\n    font-weight: 700 !important;\n    font-family: var(--bsc-mono) !important;\n    min-width: 52px !important;\n    text-align: right !important;\n}\n\n#bsc-calculator.bsc-root .bsc-util-zones {\n    display: flex !important;\n    justify-content: space-between !important;\n    margin-top: 8px !important;\n    font-size: 0.68rem !important;\n    color: var(--bsc-text-muted) !important;\n}\n\n#bsc-calculator.bsc-root .bsc-zone-safe { color: var(--bsc-safe) !important; }\n#bsc-calculator.bsc-root .bsc-zone-caution { color: var(--bsc-caution) !important; }\n#bsc-calculator.bsc-root .bsc-zone-unsafe { color: var(--bsc-unsafe) !important; }\n\n#bsc-calculator.bsc-root .bsc-status-banner {\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    gap: 10px !important;\n    padding: 14px 20px !important;\n    border-radius: var(--bsc-radius) !important;\n    margin-bottom: 20px !important;\n    font-size: 1.1rem !important;\n    font-weight: 700 !important;\n}\n\n#bsc-calculator.bsc-root .bsc-status-banner.bsc-safe {\n    background: #d5f5e3 !important;\n    color: #1e8449 !important;\n    border: 1px solid var(--bsc-safe) !important;\n}\n\n#bsc-calculator.bsc-root .bsc-status-banner.bsc-caution {\n    background: #fdebd0 !important;\n    color: #9a7d0a !important;\n    border: 1px solid var(--bsc-caution) !important;\n}\n\n#bsc-calculator.bsc-root .bsc-status-banner.bsc-unsafe {\n    background: #fadbd8 !important;\n    color: #922b21 !important;\n    border: 1px solid var(--bsc-unsafe) !important;\n}\n\n#bsc-calculator.bsc-root .bsc-status-icon {\n    font-size: 1.4rem !important;\n}\n\n#bsc-calculator.bsc-root .bsc-results-grid {\n    display: grid !important;\n    grid-template-columns: 1fr 1fr !important;\n    gap: 10px !important;\n    width: 100% !important;\n}\n\n#bsc-calculator.bsc-root .bsc-result {\n    display: flex !important;\n    flex-direction: column !important;\n    padding: 10px 14px !important;\n    background: #fafbfc !important;\n    border-radius: var(--bsc-radius) !important;\n    border: 1px solid var(--bsc-border) !important;\n}\n\n#bsc-calculator.bsc-root .bsc-result.bsc-result-hi {\n    grid-column: 1 \/ -1 !important;\n    background: linear-gradient(135deg, #eaf2f8 0%, #d4e6f1 100%) !important;\n    border-color: var(--bsc-primary-light) !important;\n}\n\n#bsc-calculator.bsc-root .bsc-result-label {\n    font-size: 0.75rem !important;\n    color: var(--bsc-text-muted) !important;\n    font-weight: 500 !important;\n    text-transform: uppercase !important;\n    letter-spacing: 0.03em !important;\n}\n\n#bsc-calculator.bsc-root .bsc-result-value {\n    font-size: 1.05rem !important;\n    font-weight: 700 !important;\n    color: var(--bsc-primary-dark) !important;\n    font-family: var(--bsc-mono) !important;\n    margin-top: 2px !important;\n}\n\n#bsc-calculator.bsc-root .bsc-result-value.bsc-safe { color: var(--bsc-safe) !important; }\n#bsc-calculator.bsc-root .bsc-result-value.bsc-caution { color: var(--bsc-caution) !important; }\n#bsc-calculator.bsc-root .bsc-result-value.bsc-unsafe { color: var(--bsc-unsafe) !important; }\n\n#bsc-calculator.bsc-root .bsc-warnings {\n    margin-bottom: 14px !important;\n}\n\n#bsc-calculator.bsc-root .bsc-warning {\n    padding: 10px 14px !important;\n    border-radius: var(--bsc-radius) !important;\n    margin-bottom: 8px !important;\n    font-size: 0.88rem !important;\n    display: flex !important;\n    align-items: flex-start !important;\n    gap: 8px !important;\n}\n\n#bsc-calculator.bsc-root .bsc-warning-error {\n    background: #fadbd8 !important;\n    color: #922b21 !important;\n    border-left: 4px solid var(--bsc-unsafe) !important;\n}\n\n#bsc-calculator.bsc-root .bsc-warning-warn {\n    background: #fdebd0 !important;\n    color: #7d6608 !important;\n    border-left: 4px solid var(--bsc-caution) !important;\n}\n\n#bsc-calculator.bsc-root .bsc-warning-info {\n    background: #d6eaf8 !important;\n    color: #1a5276 !important;\n    border-left: 4px solid var(--bsc-primary-light) !important;\n}\n\n#bsc-calculator.bsc-root .bsc-recommendations {\n    margin-top: 20px !important;\n    padding: 16px !important;\n    background: #f8f9fa !important;\n    border-radius: var(--bsc-radius) !important;\n    border: 1px solid var(--bsc-border) !important;\n}\n\n#bsc-calculator.bsc-root .bsc-recommendations h4 {\n    font-size: 0.9rem !important;\n    color: var(--bsc-primary) !important;\n    margin: 0 0 10px !important;\n    font-weight: 600 !important;\n}\n\n#bsc-calculator.bsc-root .bsc-recommendations ul {\n    list-style: disc !important;\n    padding-left: 20px !important;\n}\n\n#bsc-calculator.bsc-root .bsc-recommendations li {\n    font-size: 0.88rem !important;\n    color: var(--bsc-text) !important;\n    margin-bottom: 6px !important;\n    line-height: 1.5 !important;\n}\n\n@media (max-width: 768px) {\n    #bsc-calculator.bsc-root .bsc-grid,\n    #bsc-calculator.bsc-root .bsc-results-grid,\n    #bsc-calculator.bsc-root .bsc-viz-row {\n        grid-template-columns: 1fr !important;\n    }\n\n    #bsc-calculator.bsc-root .bsc-card {\n        padding: 16px !important;\n    }\n}\n\n@media (max-width: 480px) {\n    #bsc-calculator.bsc-root .bsc-btn {\n        width: 100% !important;\n    }\n}\n\n<\/style>\n\n<div id=\"bsc-calculator\" class=\"bsc-root\">\n    <div class=\"bsc-wrap\">\n        <div class=\"bsc-layout\">\n            <div class=\"bsc-input\">\n                <section class=\"bsc-card bsc-inputs\">\n                    <div class=\"bsc-section\">\n                        <h3 class=\"bsc-section-title\">General Settings<\/h3>\n                        <div class=\"bsc-grid\">\n                            <div class=\"bsc-field\">\n                                <label for=\"bsc-unitSystem\">Unit System<\/label>\n                                <select id=\"bsc-unitSystem\">\n                                    <option value=\"metric\">Metric (MPa, kN, mm)<\/option>\n                                    <option value=\"imperial\">Imperial (ksi, lbf, in)<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"bsc-field\">\n                                <label for=\"bsc-calcMode\">Calculation Mode\n                                    <span class=\"bsc-tip\" data-tip=\"Select the primary quantity to evaluate\">?<\/span>\n                                <\/label>\n                                <select id=\"bsc-calcMode\">\n                                    <option value=\"stressCheck\" selected>Bending Stress Check<\/option>\n                                    <option value=\"sectionModulus\">Section Modulus Calculation<\/option>\n                                    <option value=\"allowableMoment\">Allowable Bending Moment<\/option>\n                                    <option value=\"requiredModulus\">Required Section Modulus<\/option>\n                                    <option value=\"requiredSize\">Required Section Size<\/option>\n                                    <option value=\"safetyFactor\">Safety Factor Calculation<\/option>\n                                    <option value=\"beamLoad\">Beam Load to Bending Stress<\/option>\n                                <\/select>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"bsc-section\" id=\"bsc-beamSection\">\n                        <h3 class=\"bsc-section-title\">Beam Loading &amp; Support<\/h3>\n                        <div class=\"bsc-grid\">\n                            <div class=\"bsc-field\">\n                                <label for=\"bsc-beamType\">Beam Type\n                                    <span class=\"bsc-tip\" data-tip=\"Support condition for standard beam formulas\">?<\/span>\n                                <\/label>\n                                <select id=\"bsc-beamType\">\n                                    <option value=\"simply_supported\" selected>Simply Supported<\/option>\n                                    <option value=\"cantilever\">Cantilever<\/option>\n                                    <option value=\"direct_moment\">Direct Moment Input<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"bsc-field bsc-beam-field\" data-beams=\"simply_supported,cantilever\">\n                                <label for=\"bsc-loadType\">Load Type<\/label>\n                                <select id=\"bsc-loadType\">\n                                    <option value=\"point\" selected>Point Load<\/option>\n                                    <option value=\"udl\">Uniformly Distributed Load<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"bsc-field bsc-beam-field\" data-beams=\"simply_supported,cantilever\" data-loads=\"point\">\n                                <label for=\"bsc-pointLoad\">Applied Point Load (<span class=\"bsc-u-force\">kN<\/span>)<\/label>\n                                <input type=\"number\" id=\"bsc-pointLoad\" value=\"10\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-beam-field bsc-hidden\" data-beams=\"simply_supported,cantilever\" data-loads=\"udl\">\n                                <label for=\"bsc-uniformLoad\">Uniform Load (<span class=\"bsc-u-udl\">kN\/m<\/span>)<\/label>\n                                <input type=\"number\" id=\"bsc-uniformLoad\" value=\"5\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-beam-field\" data-beams=\"simply_supported,cantilever\">\n                                <label for=\"bsc-beamLength\">Beam Length (<span class=\"bsc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"bsc-beamLength\" value=\"2000\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-beam-field bsc-hidden\" data-beams=\"direct_moment\">\n                                <label for=\"bsc-directMoment\">Applied Bending Moment (<span class=\"bsc-u-moment\">kN\u00b7m<\/span>)\n                                    <span class=\"bsc-tip\" data-tip=\"Enter a known bending moment directly\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"bsc-directMoment\" value=\"5\" min=\"0\" step=\"any\">\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"bsc-section\" id=\"bsc-geometrySection\">\n                        <h3 class=\"bsc-section-title\">Cross-Section Geometry<\/h3>\n                        <div class=\"bsc-grid\">\n                            <div class=\"bsc-field bsc-span-full\">\n                                <label for=\"bsc-sectionType\">Cross-Section Type<\/label>\n                                <select id=\"bsc-sectionType\">\n                                    <option value=\"rectangle\" selected>Rectangle<\/option>\n                                    <option value=\"solid_round\">Solid Round<\/option>\n                                    <option value=\"hollow_round\">Hollow Round<\/option>\n                                    <option value=\"hollow_rectangle\">Hollow Rectangle<\/option>\n                                    <option value=\"ibeam\">I-Beam \/ Custom Properties<\/option>\n                                    <option value=\"custom\">Custom (I, Z, c)<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"bsc-field bsc-geom-field\" data-sections=\"rectangle\">\n                                <label for=\"bsc-width\">Width b (<span class=\"bsc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"bsc-width\" value=\"50\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-geom-field\" data-sections=\"rectangle\">\n                                <label for=\"bsc-height\">Height h (<span class=\"bsc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"bsc-height\" value=\"100\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-geom-field bsc-hidden\" data-sections=\"solid_round\">\n                                <label for=\"bsc-diameter\">Diameter d (<span class=\"bsc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"bsc-diameter\" value=\"40\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-geom-field bsc-hidden\" data-sections=\"hollow_round\">\n                                <label for=\"bsc-outerDiameter\">Outer Diameter D (<span class=\"bsc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"bsc-outerDiameter\" value=\"60\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-geom-field bsc-hidden\" data-sections=\"hollow_round\">\n                                <label for=\"bsc-innerDiameter\">Inner Diameter d (<span class=\"bsc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"bsc-innerDiameter\" value=\"40\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-geom-field bsc-hidden\" data-sections=\"hollow_rectangle\">\n                                <label for=\"bsc-outerWidth\">Outer Width B (<span class=\"bsc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"bsc-outerWidth\" value=\"80\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-geom-field bsc-hidden\" data-sections=\"hollow_rectangle\">\n                                <label for=\"bsc-outerHeight\">Outer Height H (<span class=\"bsc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"bsc-outerHeight\" value=\"120\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-geom-field bsc-hidden\" data-sections=\"hollow_rectangle\">\n                                <label for=\"bsc-innerWidth\">Inner Width b (<span class=\"bsc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"bsc-innerWidth\" value=\"60\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-geom-field bsc-hidden\" data-sections=\"hollow_rectangle\">\n                                <label for=\"bsc-innerHeight\">Inner Height h (<span class=\"bsc-u-length\">mm<\/span>)<\/label>\n                                <input type=\"number\" id=\"bsc-innerHeight\" value=\"80\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-geom-field bsc-hidden\" data-sections=\"ibeam,custom\">\n                                <label for=\"bsc-customI\">Second Moment of Area I (<span class=\"bsc-u-inertia\">mm\u2074<\/span>)\n                                    <span class=\"bsc-tip\" data-tip=\"Second moment of area about the bending axis\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"bsc-customI\" value=\"\" min=\"0\" step=\"any\" placeholder=\"Enter I\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-geom-field bsc-hidden\" data-sections=\"ibeam,custom\">\n                                <label for=\"bsc-customZ\">Section Modulus Z (<span class=\"bsc-u-modulus\">mm\u00b3<\/span>)\n                                    <span class=\"bsc-tip\" data-tip=\"Z = I \/ c. Can be entered directly for I-beams\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"bsc-customZ\" value=\"\" min=\"0\" step=\"any\" placeholder=\"Enter Z\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-geom-field bsc-hidden\" data-sections=\"ibeam,custom\">\n                                <label for=\"bsc-fiberDistance\">Distance to Extreme Fiber c (<span class=\"bsc-u-length\">mm<\/span>)\n                                    <span class=\"bsc-tip\" data-tip=\"Distance from neutral axis to outermost fiber\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"bsc-fiberDistance\" value=\"\" min=\"0\" step=\"any\" placeholder=\"Enter c\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-hidden bsc-size-field\" id=\"bsc-sizeSolveGroup\" data-modes=\"requiredSize\">\n                                <label for=\"bsc-sizeSolve\">Solve For (Required Size)<\/label>\n                                <select id=\"bsc-sizeSolve\">\n                                    <option value=\"height\" selected>Rectangular Height h (width known)<\/option>\n                                    <option value=\"width\">Rectangular Width b (height known)<\/option>\n                                    <option value=\"diameter\">Solid Round Diameter d<\/option>\n                                <\/select>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"bsc-section\" id=\"bsc-materialSection\">\n                        <h3 class=\"bsc-section-title\">Material Properties<\/h3>\n                        <div class=\"bsc-grid\">\n                            <div class=\"bsc-field bsc-span-full\">\n                                <label for=\"bsc-material\">Material Preset<\/label>\n                                <select id=\"bsc-material\">\n                                    <option value=\"structural_steel\" selected>Structural Steel<\/option>\n                                    <option value=\"carbon_steel\">Carbon Steel<\/option>\n                                    <option value=\"stainless_steel\">Stainless Steel<\/option>\n                                    <option value=\"aluminum\">Aluminum Alloy<\/option>\n                                    <option value=\"titanium\">Titanium Alloy<\/option>\n                                    <option value=\"cast_iron\">Cast Iron<\/option>\n                                    <option value=\"brass\">Brass<\/option>\n                                    <option value=\"plastic\">Engineering Plastic<\/option>\n                                    <option value=\"custom\">Custom Material<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"bsc-field bsc-mat-field\" data-modes=\"stressCheck,allowableMoment,requiredModulus,requiredSize,safetyFactor,beamLoad\">\n                                <label for=\"bsc-strengthBasis\">Allowable Stress Basis<\/label>\n                                <select id=\"bsc-strengthBasis\">\n                                    <option value=\"yield\" selected>Yield Strength (Sy) \u2014 recommended for ductile materials<\/option>\n                                    <option value=\"ultimate\">Ultimate Strength (Sut)<\/option>\n                                    <option value=\"direct\">Direct Allowable Stress Input<\/option>\n                                <\/select>\n                            <\/div>\n                            <div class=\"bsc-field bsc-mat-field\" data-modes=\"stressCheck,allowableMoment,requiredModulus,requiredSize,safetyFactor,beamLoad\" data-basis=\"yield,ultimate\">\n                                <label for=\"bsc-yieldStrength\">Yield Strength Sy (<span class=\"bsc-u-stress\">MPa<\/span>)<\/label>\n                                <input type=\"number\" id=\"bsc-yieldStrength\" value=\"355\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-mat-field bsc-hidden\" data-modes=\"stressCheck,allowableMoment,requiredModulus,requiredSize,safetyFactor,beamLoad\" data-basis=\"ultimate\">\n                                <label for=\"bsc-ultimateStrength\">Ultimate Strength Sut (<span class=\"bsc-u-stress\">MPa<\/span>)<\/label>\n                                <input type=\"number\" id=\"bsc-ultimateStrength\" value=\"510\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-mat-field bsc-hidden\" data-modes=\"stressCheck,allowableMoment,requiredModulus,requiredSize,safetyFactor,beamLoad\" data-basis=\"direct\">\n                                <label for=\"bsc-allowableStress\">Allowable Bending Stress (<span class=\"bsc-u-stress\">MPa<\/span>)<\/label>\n                                <input type=\"number\" id=\"bsc-allowableStress\" value=\"177.5\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-mat-field\" data-modes=\"stressCheck,allowableMoment,requiredModulus,requiredSize,safetyFactor,beamLoad\" data-basis=\"yield,ultimate\">\n                                <label for=\"bsc-safetyFactor\">Design Safety Factor (SF)\n                                    <span class=\"bsc-tip\" data-tip=\"\u03c3allow = Sref \/ SF. Default: 2.0\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"bsc-safetyFactor\" value=\"2.0\" min=\"0.01\" step=\"any\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-mat-field\" data-modes=\"stressCheck,safetyFactor,beamLoad\">\n                                <label for=\"bsc-stressConcentration\">Stress Concentration Factor Kt\n                                    <span class=\"bsc-tip\" data-tip=\"\u03c3local = Kt \u00d7 \u03c3nominal. Default: 1.0\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"bsc-stressConcentration\" value=\"1.0\" min=\"1\" step=\"any\">\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"bsc-section\" id=\"bsc-deflectionSection\">\n                        <h3 class=\"bsc-section-title\">Optional Deflection Check<\/h3>\n                        <div class=\"bsc-grid\">\n                            <div class=\"bsc-field bsc-span-full\">\n                                <label>\n                                    <input type=\"checkbox\" id=\"bsc-enableDeflection\"> Enable Beam Deflection Calculation\n                                    <span class=\"bsc-tip\" data-tip=\"Requires Young's modulus E. Deflection is separate from bending strength.\">?<\/span>\n                                <\/label>\n                            <\/div>\n                            <div class=\"bsc-field bsc-defl-field bsc-hidden\">\n                                <label for=\"bsc-youngsModulus\">Young&#8217;s Modulus E (<span class=\"bsc-u-modulusE\">GPa<\/span>)<\/label>\n                                <input type=\"number\" id=\"bsc-youngsModulus\" value=\"200\" min=\"0\" step=\"any\">\n                            <\/div>\n                            <div class=\"bsc-field bsc-defl-field bsc-hidden\">\n                                <label for=\"bsc-deflectionLimit\">Deflection Limit (<span class=\"bsc-u-length\">mm<\/span>)\n                                    <span class=\"bsc-tip\" data-tip=\"Optional serviceability limit. Warns if exceeded.\">?<\/span>\n                                <\/label>\n                                <input type=\"number\" id=\"bsc-deflectionLimit\" value=\"\" min=\"0\" step=\"any\" placeholder=\"Optional\">\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"bsc-actions\">\n                        <button type=\"button\" id=\"bsc-calculateBtn\" class=\"bsc-btn bsc-btn-primary\">Calculate<\/button>\n                    <\/div>\n                <\/section>\n            <\/div>\n\n            <div class=\"bsc-output bsc-hidden\" id=\"bsc-resultsPanel\">\n                <section class=\"bsc-card bsc-results\">\n                    <div id=\"bsc-statusBanner\" class=\"bsc-status-banner bsc-safe\">\n                        <span class=\"bsc-status-icon\">\u2713<\/span>\n                        <span id=\"bsc-statusText\">Safe<\/span>\n                    <\/div>\n\n                    <div id=\"bsc-warnings\" class=\"bsc-warnings\" hidden><\/div>\n\n                    <div class=\"bsc-viz-row\">\n                        <div class=\"bsc-viz-card\">\n                            <h4>Beam &amp; Loading<\/h4>\n                            <div class=\"bsc-illustration\" id=\"bsc-beamViz\"><\/div>\n                        <\/div>\n                        <div class=\"bsc-viz-card\">\n                            <h4>Cross-Section &amp; Neutral Axis<\/h4>\n                            <div class=\"bsc-illustration\" id=\"bsc-sectionViz\"><\/div>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"bsc-viz-row\">\n                        <div class=\"bsc-viz-card\">\n                            <h4>Bending Stress Distribution<\/h4>\n                            <div class=\"bsc-illustration\" id=\"bsc-stressViz\"><\/div>\n                        <\/div>\n                        <div class=\"bsc-viz-card\">\n                            <h4>Bending Utilization<\/h4>\n                            <div class=\"bsc-util-bar-wrap\">\n                                <div class=\"bsc-util-bar\"><div class=\"bsc-util-fill\" id=\"bsc-bendUtilFill\"><\/div><\/div>\n                                <span class=\"bsc-util-text\" id=\"bsc-bendUtilText\">0%<\/span>\n                            <\/div>\n                            <div class=\"bsc-util-zones\">\n                                <span class=\"bsc-zone-safe\">Safe &lt;80%<\/span>\n                                <span class=\"bsc-zone-caution\">Caution 80\u2013100%<\/span>\n                                <span class=\"bsc-zone-unsafe\">Unsafe &gt;100%<\/span>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n\n                    <h2>Calculation Results<\/h2>\n                    <div class=\"bsc-results-grid\">\n                        <div class=\"bsc-result\" id=\"bsc-resItemMoment\"><span class=\"bsc-result-label\">Maximum Bending Moment<\/span><span class=\"bsc-result-value\" id=\"bsc-resMoment\">&#8211;<\/span><\/div>\n                        <div class=\"bsc-result\" id=\"bsc-resItemI\"><span class=\"bsc-result-label\">Second Moment of Area (I)<\/span><span class=\"bsc-result-value\" id=\"bsc-resI\">&#8211;<\/span><\/div>\n                        <div class=\"bsc-result\" id=\"bsc-resItemZ\"><span class=\"bsc-result-label\">Section Modulus (Z)<\/span><span class=\"bsc-result-value\" id=\"bsc-resZ\">&#8211;<\/span><\/div>\n                        <div class=\"bsc-result\" id=\"bsc-resItemStress\"><span class=\"bsc-result-label\">Maximum Bending Stress<\/span><span class=\"bsc-result-value\" id=\"bsc-resStress\">&#8211;<\/span><\/div>\n                        <div class=\"bsc-result bsc-hidden\" id=\"bsc-resItemLocalStress\"><span class=\"bsc-result-label\">Local Bending Stress (Kt)<\/span><span class=\"bsc-result-value\" id=\"bsc-resLocalStress\">&#8211;<\/span><\/div>\n                        <div class=\"bsc-result bsc-hidden\" id=\"bsc-resItemAllowStress\"><span class=\"bsc-result-label\">Allowable Bending Stress<\/span><span class=\"bsc-result-value\" id=\"bsc-resAllowStress\">&#8211;<\/span><\/div>\n                        <div class=\"bsc-result bsc-hidden\" id=\"bsc-resItemAllowMoment\"><span class=\"bsc-result-label\">Allowable Bending Moment<\/span><span class=\"bsc-result-value\" id=\"bsc-resAllowMoment\">&#8211;<\/span><\/div>\n                        <div class=\"bsc-result bsc-hidden\" id=\"bsc-resItemReqZ\"><span class=\"bsc-result-label\">Required Section Modulus<\/span><span class=\"bsc-result-value\" id=\"bsc-resReqZ\">&#8211;<\/span><\/div>\n                        <div class=\"bsc-result bsc-hidden\" id=\"bsc-resItemReqSize\"><span class=\"bsc-result-label\">Required Section Size<\/span><span class=\"bsc-result-value\" id=\"bsc-resReqSize\">&#8211;<\/span><\/div>\n                        <div class=\"bsc-result bsc-hidden\" id=\"bsc-resItemSF\"><span class=\"bsc-result-label\">Actual Safety Factor<\/span><span class=\"bsc-result-value\" id=\"bsc-resSF\">&#8211;<\/span><\/div>\n                        <div class=\"bsc-result bsc-hidden\" id=\"bsc-resItemUtil\"><span class=\"bsc-result-label\">Bending Stress Utilization<\/span><span class=\"bsc-result-value\" id=\"bsc-resUtil\">&#8211;<\/span><\/div>\n                        <div class=\"bsc-result bsc-hidden\" id=\"bsc-resItemStressReserve\"><span class=\"bsc-result-label\">Stress Reserve<\/span><span class=\"bsc-result-value\" id=\"bsc-resStressReserve\">&#8211;<\/span><\/div>\n                        <div class=\"bsc-result bsc-hidden\" id=\"bsc-resItemMomentReserve\"><span class=\"bsc-result-label\">Moment Reserve<\/span><span class=\"bsc-result-value\" id=\"bsc-resMomentReserve\">&#8211;<\/span><\/div>\n                        <div class=\"bsc-result bsc-hidden\" id=\"bsc-resItemDeflection\"><span class=\"bsc-result-label\">Maximum Deflection<\/span><span class=\"bsc-result-value\" id=\"bsc-resDeflection\">&#8211;<\/span><\/div>\n                        <div class=\"bsc-result bsc-result-hi\"><span class=\"bsc-result-label\">Design Status<\/span><span class=\"bsc-result-value\" id=\"bsc-resDesignStatus\">&#8211;<\/span><\/div>\n                    <\/div>\n\n                    <div class=\"bsc-recommendations\" id=\"bsc-recommendations\" hidden>\n                        <h4>Engineering Recommendations<\/h4>\n                        <ul id=\"bsc-recommendationsList\"><\/ul>\n                    <\/div>\n                <\/section>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script type=\"text\/javascript\">\n(function(){\n  var b=\"LyoqDQogKiBCZW5kaW5nIFN0cmVzcyBDYWxjdWxhdG9yDQogKiBDb3JlIGNhbGN1bGF0aW9uIGVuZ2luZSwgVUkgbG9naWMsIGFuZCB2aXN1YWxpemF0aW9ucw0KICovDQoNCihmdW5jdGlvbiAoKSB7DQogICAgJ3VzZSBzdHJpY3QnOw0KDQogICAgY29uc3QgTUFURVJJQUxTID0gew0KICAgICAgICBzdHJ1Y3R1cmFsX3N0ZWVsOiB7IG5hbWU6ICdTdHJ1Y3R1cmFsIFN0ZWVsJywgc3k6IDM1NSwgc3V0OiA1MTAsIEU6IDIwMDAwMCB9LA0KICAgICAgICBjYXJib25fc3RlZWw6ICAgICB7IG5hbWU6ICdDYXJib24gU3RlZWwnLCAgICAgc3k6IDI1MCwgc3V0OiA0MDAsIEU6IDIwMDAwMCB9LA0KICAgICAgICBzdGFpbmxlc3Nfc3RlZWw6ICB7IG5hbWU6ICdTdGFpbmxlc3MgU3RlZWwnLCAgc3k6IDIwNSwgc3V0OiA1MTUsIEU6IDE5MzAwMCB9LA0KICAgICAgICBhbHVtaW51bTogICAgICAgICB7IG5hbWU6ICdBbHVtaW51bSBBbGxveScsICAgc3k6IDI3NSwgc3V0OiAzMTAsIEU6IDcwMDAwIH0sDQogICAgICAgIHRpdGFuaXVtOiAgICAgICAgIHsgbmFtZTogJ1RpdGFuaXVtIEFsbG95JywgICBzeTogODgwLCBzdXQ6IDk1MCwgRTogMTE0MDAwIH0sDQogICAgICAgIGNhc3RfaXJvbjogICAgICAgIHsgbmFtZTogJ0Nhc3QgSXJvbicsICAgICAgICBzeTogMTMwLCBzdXQ6IDI2MCwgRTogMTEwMDAwIH0sDQogICAgICAgIGJyYXNzOiAgICAgICAgICAgIHsgbmFtZTogJ0JyYXNzJywgICAgICAgICAgICBzeTogMTI0LCBzdXQ6IDMxMCwgRTogOTcwMDAgfSwNCiAgICAgICAgcGxhc3RpYzogICAgICAgICAgeyBuYW1lOiAnRW5naW5lZXJpbmcgUGxhc3RpYycsIHN5OiA1MCwgc3V0OiA4MCwgRTogMzAwMCB9LA0KICAgICAgICBjdXN0b206ICAgICAgICAgICB7IG5hbWU6ICdDdXN0b20gTWF0ZXJpYWwnLCAgc3k6IDAsIHN1dDogMCwgRTogMCB9DQogICAgfTsNCg0KICAgIGNvbnN0IFVOSVRTID0gew0KICAgICAgICBtZXRyaWM6IHsNCiAgICAgICAgICAgIHN0cmVzczogJ01QYScsIGZvcmNlOiAna04nLCBsZW5ndGg6ICdtbScsIHVkbDogJ2tOL20nLCBtb21lbnQ6ICdrTlx1MDBCN20nLA0KICAgICAgICAgICAgaW5lcnRpYTogJ21tXHUyMDc0JywgbW9kdWx1czogJ21tXHUwMEIzJywgbW9kdWx1c0U6ICdHUGEnLCBkZWZsZWN0aW9uOiAnbW0nLA0KICAgICAgICAgICAgc3RyZXNzRnJvbUlucHV0OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdjsgfSwNCiAgICAgICAgICAgIHN0cmVzc1RvRGlzcGxheTogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHY7IH0sDQogICAgICAgICAgICBmb3JjZUZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiAxMDAwOyB9LA0KICAgICAgICAgICAgZm9yY2VUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gMTAwMDsgfSwNCiAgICAgICAgICAgIGxlbmd0aEZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHY7IH0sDQogICAgICAgICAgICBsZW5ndGhUb0Rpc3BsYXk6IGZ1bmN0aW9u\"+\"ICh2KSB7IHJldHVybiB2OyB9LA0KICAgICAgICAgICAgdWRsRnJvbUlucHV0OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdjsgfSwNCiAgICAgICAgICAgIHVkbFRvRGlzcGxheTogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHY7IH0sDQogICAgICAgICAgICBtb21lbnRGcm9tSW5wdXQ6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2ICogMWU2OyB9LA0KICAgICAgICAgICAgbW9tZW50VG9EaXNwbGF5OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAvIDFlNjsgfSwNCiAgICAgICAgICAgIGluZXJ0aWFGcm9tSW5wdXQ6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2OyB9LA0KICAgICAgICAgICAgaW5lcnRpYVRvRGlzcGxheTogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHY7IH0sDQogICAgICAgICAgICBzZWN0aW9uTW9kRnJvbUlucHV0OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdjsgfSwNCiAgICAgICAgICAgIHNlY3Rpb25Nb2RUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2OyB9LA0KICAgICAgICAgICAgbW9kdWx1c0VGcm9tSW5wdXQ6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2ICogMTAwMDsgfSwNCiAgICAgICAgICAgIG1vZHVsdXNFVG9EaXNwbGF5OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAvIDEwMDA7IH0sDQogICAgICAgICAgICBkZWZsZWN0aW9uRnJvbUlucHV0OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdjsgfSwNCiAgICAgICAgICAgIGRlZmxlY3Rpb25Ub0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2OyB9DQogICAgICAgIH0sDQogICAgICAgIGltcGVyaWFsOiB7DQogICAgICAgICAgICBzdHJlc3M6ICdrc2knLCBmb3JjZTogJ2xiZicsIGxlbmd0aDogJ2luJywgdWRsOiAnbGJmL2Z0JywgbW9tZW50OiAnbGJmXHUwMEI3ZnQnLA0KICAgICAgICAgICAgaW5lcnRpYTogJ2luXHUyMDc0JywgbW9kdWx1czogJ2luXHUwMEIzJywgbW9kdWx1c0U6ICdrc2knLCBkZWZsZWN0aW9uOiAnaW4nLA0KICAgICAgICAgICAgc3RyZXNzRnJvbUlucHV0OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAqIDYuODk0NzY7IH0sDQogICAgICAgICAgICBzdHJlc3NUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gNi44OTQ3NjsgfSwNCiAgICAgICAgICAgIGZvcmNlRnJvbUlucHV0OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAqIDQuNDQ4MjI7IH0sDQogICAgICAgICAgICBmb3JjZVRvRGlzcGxheTogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgLyA0LjQ0ODIyOyB9LA0KICAgICAgICAgICAgbGVuZ3RoRnJvbUlucHV0OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAqIDI1LjQ7IH0sDQogICAgICAgICAgICBsZW5ndGhUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gMjUuNDsgfSwNCiAgICAgICAgICAgIHVkbEZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiA0LjQ0ODIyIC8gMzA0Ljg7IH0sDQogICAgICAgICAgICB1ZGxUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2ICog\"+\"MzA0LjggLyA0LjQ0ODIyOyB9LA0KICAgICAgICAgICAgbW9tZW50RnJvbUlucHV0OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAqIDEzNTUuODI7IH0sDQogICAgICAgICAgICBtb21lbnRUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gMTM1NS44MjsgfSwNCiAgICAgICAgICAgIGluZXJ0aWFGcm9tSW5wdXQ6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2ICogTWF0aC5wb3coMjUuNCwgNCk7IH0sDQogICAgICAgICAgICBpbmVydGlhVG9EaXNwbGF5OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAvIE1hdGgucG93KDI1LjQsIDQpOyB9LA0KICAgICAgICAgICAgc2VjdGlvbk1vZEZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiBNYXRoLnBvdygyNS40LCAzKTsgfSwNCiAgICAgICAgICAgIHNlY3Rpb25Nb2RUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gTWF0aC5wb3coMjUuNCwgMyk7IH0sDQogICAgICAgICAgICBtb2R1bHVzRUZyb21JbnB1dDogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgKiA2Ljg5NDc2OyB9LA0KICAgICAgICAgICAgbW9kdWx1c0VUb0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gNi44OTQ3NjsgfSwNCiAgICAgICAgICAgIGRlZmxlY3Rpb25Gcm9tSW5wdXQ6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2ICogMjUuNDsgfSwNCiAgICAgICAgICAgIGRlZmxlY3Rpb25Ub0Rpc3BsYXk6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2IC8gMjUuNDsgfQ0KICAgICAgICB9DQogICAgfTsNCg0KICAgIGxldCByb290ID0gbnVsbDsNCiAgICBjb25zdCBlbHMgPSB7fTsNCg0KICAgIGZ1bmN0aW9uICQoaWQpIHsNCiAgICAgICAgcmV0dXJuIHJvb3QgPyByb290LnF1ZXJ5U2VsZWN0b3IoJyNic2MtJyArIGlkKSA6IG51bGw7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gcXNhKHNlbGVjdG9yKSB7DQogICAgICAgIHJldHVybiByb290ID8gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSA6IFtdOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNhY2hlRWxlbWVudHMoKSB7DQogICAgICAgIGlmICghcm9vdCkgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdic2MtY2FsY3VsYXRvcicpOw0KICAgICAgICBpZiAoIXJvb3QpIHJldHVybiBmYWxzZTsNCg0KICAgICAgICBjb25zdCBpZHMgPSBbDQogICAgICAgICAgICAndW5pdFN5c3RlbScsICdjYWxjTW9kZScsICdiZWFtVHlwZScsICdsb2FkVHlwZScsICdwb2ludExvYWQnLCAndW5pZm9ybUxvYWQnLA0KICAgICAgICAgICAgJ2JlYW1MZW5ndGgnLCAnZGlyZWN0TW9tZW50JywgJ3NlY3Rpb25UeXBlJywgJ3dpZHRoJywgJ2hlaWdodCcsICdkaWFtZXRlcicsDQogICAgICAgICAgICAnb3V0ZXJEaWFtZXRlcicsICdpbm5lckRpYW1ldGVyJywgJ291dGVyV2lkdGgnLCAnb3V0ZXJIZWlnaHQnLCAnaW5uZXJXaWR0aCcsICdpbm5lckhlaWdodCcsDQogICAgICAgICAgICAnY3VzdG9tSScsICdjdXN0b21aJywgJ2Zp\"+\"YmVyRGlzdGFuY2UnLCAnc2l6ZVNvbHZlJywgJ3NpemVTb2x2ZUdyb3VwJywNCiAgICAgICAgICAgICdtYXRlcmlhbCcsICdzdHJlbmd0aEJhc2lzJywgJ3lpZWxkU3RyZW5ndGgnLCAndWx0aW1hdGVTdHJlbmd0aCcsICdhbGxvd2FibGVTdHJlc3MnLA0KICAgICAgICAgICAgJ3NhZmV0eUZhY3RvcicsICdzdHJlc3NDb25jZW50cmF0aW9uJywgJ2VuYWJsZURlZmxlY3Rpb24nLCAneW91bmdzTW9kdWx1cycsICdkZWZsZWN0aW9uTGltaXQnLA0KICAgICAgICAgICAgJ2NhbGN1bGF0ZUJ0bicsICd3YXJuaW5ncycsICdyZXN1bHRzUGFuZWwnLCAnc3RhdHVzQmFubmVyJywgJ3N0YXR1c1RleHQnLA0KICAgICAgICAgICAgJ2JlYW1WaXonLCAnc2VjdGlvblZpeicsICdzdHJlc3NWaXonLCAnYmVuZFV0aWxGaWxsJywgJ2JlbmRVdGlsVGV4dCcsDQogICAgICAgICAgICAncmVzTW9tZW50JywgJ3Jlc0knLCAncmVzWicsICdyZXNTdHJlc3MnLCAncmVzTG9jYWxTdHJlc3MnLCAncmVzQWxsb3dTdHJlc3MnLA0KICAgICAgICAgICAgJ3Jlc0FsbG93TW9tZW50JywgJ3Jlc1JlcVonLCAncmVzUmVxU2l6ZScsICdyZXNTRicsICdyZXNVdGlsJywgJ3Jlc1N0cmVzc1Jlc2VydmUnLA0KICAgICAgICAgICAgJ3Jlc01vbWVudFJlc2VydmUnLCAncmVzRGVmbGVjdGlvbicsICdyZXNEZXNpZ25TdGF0dXMnLA0KICAgICAgICAgICAgJ3Jlc0l0ZW1Nb21lbnQnLCAncmVzSXRlbUknLCAncmVzSXRlbVonLCAncmVzSXRlbVN0cmVzcycsICdyZXNJdGVtTG9jYWxTdHJlc3MnLA0KICAgICAgICAgICAgJ3Jlc0l0ZW1BbGxvd1N0cmVzcycsICdyZXNJdGVtQWxsb3dNb21lbnQnLCAncmVzSXRlbVJlcVonLCAncmVzSXRlbVJlcVNpemUnLA0KICAgICAgICAgICAgJ3Jlc0l0ZW1TRicsICdyZXNJdGVtVXRpbCcsICdyZXNJdGVtU3RyZXNzUmVzZXJ2ZScsICdyZXNJdGVtTW9tZW50UmVzZXJ2ZScsICdyZXNJdGVtRGVmbGVjdGlvbicsDQogICAgICAgICAgICAncmVjb21tZW5kYXRpb25zJywgJ3JlY29tbWVuZGF0aW9uc0xpc3QnDQogICAgICAgIF07DQogICAgICAgIGlkcy5mb3JFYWNoKGZ1bmN0aW9uIChpZCkgeyBlbHNbaWRdID0gJChpZCk7IH0pOw0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBudW0oaWQpIHsNCiAgICAgICAgY29uc3QgZWwgPSBlbHNbaWRdOw0KICAgICAgICBpZiAoIWVsKSByZXR1cm4gMDsNCiAgICAgICAgaWYgKGVsLnR5cGUgPT09ICdjaGVja2JveCcpIHJldHVybiBlbC5jaGVja2VkID8gMSA6IDA7DQogICAgICAgIGNvbnN0IHYgPSBwYXJzZUZsb2F0KGVsLnZhbHVlKTsNCiAgICAgICAgcmV0dXJuIGlzTmFOKHYpID8gMCA6IHY7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gaXNDaGVja2VkKGlkKSB7DQogICAgICAgIGNvbnN0IGVsID0gZWxzW2lkXTsNCiAgICAgICAgcmV0dXJuIGVsID8gZWwuY2hlY2tlZCA6IGZhbHNlOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGZtdCh2YWwsIGRlY2ltYWxzKSB7DQog\"+\"ICAgICAgIGRlY2ltYWxzID0gZGVjaW1hbHMgPT09IHVuZGVmaW5lZCA\/IDIgOiBkZWNpbWFsczsNCiAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCB8fCAhaXNGaW5pdGUodmFsKSkgcmV0dXJuICctJzsNCiAgICAgICAgaWYgKE1hdGguYWJzKHZhbCkgPj0gMWU5IHx8IChNYXRoLmFicyh2YWwpIDwgMC4wMDEgJiYgdmFsICE9PSAwKSkgcmV0dXJuIHZhbC50b0V4cG9uZW50aWFsKDMpOw0KICAgICAgICByZXR1cm4gdmFsLnRvRml4ZWQoZGVjaW1hbHMpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGdldFVuaXRzKCkgew0KICAgICAgICByZXR1cm4gVU5JVFNbZWxzLnVuaXRTeXN0ZW0udmFsdWVdIHx8IFVOSVRTLm1ldHJpYzsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiB1cGRhdGVVbml0TGFiZWxzKCkgew0KICAgICAgICBjb25zdCB1ID0gZ2V0VW5pdHMoKTsNCiAgICAgICAgcXNhKCcuYnNjLXUtc3RyZXNzJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgZWwudGV4dENvbnRlbnQgPSB1LnN0cmVzczsgfSk7DQogICAgICAgIHFzYSgnLmJzYy11LWZvcmNlJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgZWwudGV4dENvbnRlbnQgPSB1LmZvcmNlOyB9KTsNCiAgICAgICAgcXNhKCcuYnNjLXUtbGVuZ3RoJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgZWwudGV4dENvbnRlbnQgPSB1Lmxlbmd0aDsgfSk7DQogICAgICAgIHFzYSgnLmJzYy11LXVkbCcpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IGVsLnRleHRDb250ZW50ID0gdS51ZGw7IH0pOw0KICAgICAgICBxc2EoJy5ic2MtdS1tb21lbnQnKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyBlbC50ZXh0Q29udGVudCA9IHUubW9tZW50OyB9KTsNCiAgICAgICAgcXNhKCcuYnNjLXUtaW5lcnRpYScpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IGVsLnRleHRDb250ZW50ID0gdS5pbmVydGlhOyB9KTsNCiAgICAgICAgcXNhKCcuYnNjLXUtbW9kdWx1cycpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IGVsLnRleHRDb250ZW50ID0gdS5tb2R1bHVzOyB9KTsNCiAgICAgICAgcXNhKCcuYnNjLXUtbW9kdWx1c0UnKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyBlbC50ZXh0Q29udGVudCA9IHUubW9kdWx1c0U7IH0pOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNhbGNTZWN0aW9uUHJvcGVydGllcygpIHsNCiAgICAgICAgY29uc3QgdSA9IGdldFVuaXRzKCk7DQogICAgICAgIGNvbnN0IHR5cGUgPSBlbHMuc2VjdGlvblR5cGUudmFsdWU7DQogICAgICAgIGxldCBJID0gMCwgWiA9IDAsIGMgPSAwOw0KDQogICAgICAgIGlmICh0eXBlID09PSAncmVjdGFuZ2xlJykgew0KICAgICAgICAgICAgY29uc3QgYiA9IHUubGVuZ3RoRnJvbUlucHV0KG51bSgnd2lkdGgnKSk7DQogICAgICAgICAgICBjb25zdCBoID0gdS5sZW5ndGhGcm9tSW5wdXQobnVtKCdoZWlnaHQnKSk7DQogICAgICAgICAgICBJID0gYiAqIE1hdGgucG93KGgsIDMpIC8gMTI7DQogICAgICAgICAgICBaID0g\"+\"YiAqIE1hdGgucG93KGgsIDIpIC8gNjsNCiAgICAgICAgICAgIGMgPSBoIC8gMjsNCiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnc29saWRfcm91bmQnKSB7DQogICAgICAgICAgICBjb25zdCBkID0gdS5sZW5ndGhGcm9tSW5wdXQobnVtKCdkaWFtZXRlcicpKTsNCiAgICAgICAgICAgIEkgPSBNYXRoLlBJICogTWF0aC5wb3coZCwgNCkgLyA2NDsNCiAgICAgICAgICAgIFogPSBNYXRoLlBJICogTWF0aC5wb3coZCwgMykgLyAzMjsNCiAgICAgICAgICAgIGMgPSBkIC8gMjsNCiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnaG9sbG93X3JvdW5kJykgew0KICAgICAgICAgICAgY29uc3QgRCA9IHUubGVuZ3RoRnJvbUlucHV0KG51bSgnb3V0ZXJEaWFtZXRlcicpKTsNCiAgICAgICAgICAgIGNvbnN0IGQgPSB1Lmxlbmd0aEZyb21JbnB1dChudW0oJ2lubmVyRGlhbWV0ZXInKSk7DQogICAgICAgICAgICBJID0gTWF0aC5QSSAqIChNYXRoLnBvdyhELCA0KSAtIE1hdGgucG93KGQsIDQpKSAvIDY0Ow0KICAgICAgICAgICAgYyA9IEQgLyAyOw0KICAgICAgICAgICAgWiA9IGMgPiAwID8gSSAvIGMgOiAwOw0KICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdob2xsb3dfcmVjdGFuZ2xlJykgew0KICAgICAgICAgICAgY29uc3QgQiA9IHUubGVuZ3RoRnJvbUlucHV0KG51bSgnb3V0ZXJXaWR0aCcpKTsNCiAgICAgICAgICAgIGNvbnN0IEggPSB1Lmxlbmd0aEZyb21JbnB1dChudW0oJ291dGVySGVpZ2h0JykpOw0KICAgICAgICAgICAgY29uc3QgYiA9IHUubGVuZ3RoRnJvbUlucHV0KG51bSgnaW5uZXJXaWR0aCcpKTsNCiAgICAgICAgICAgIGNvbnN0IGggPSB1Lmxlbmd0aEZyb21JbnB1dChudW0oJ2lubmVySGVpZ2h0JykpOw0KICAgICAgICAgICAgSSA9IChCICogTWF0aC5wb3coSCwgMykgLSBiICogTWF0aC5wb3coaCwgMykpIC8gMTI7DQogICAgICAgICAgICBjID0gSCAvIDI7DQogICAgICAgICAgICBaID0gYyA+IDAgPyBJIC8gYyA6IDA7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBjb25zdCBtYW51YWxJID0gbnVtKCdjdXN0b21JJyk7DQogICAgICAgICAgICBjb25zdCBtYW51YWxaID0gbnVtKCdjdXN0b21aJyk7DQogICAgICAgICAgICBjb25zdCBtYW51YWxDID0gbnVtKCdmaWJlckRpc3RhbmNlJyk7DQogICAgICAgICAgICBpZiAobWFudWFsSSA+IDApIEkgPSB1LmluZXJ0aWFGcm9tSW5wdXQobWFudWFsSSk7DQogICAgICAgICAgICBpZiAobWFudWFsWiA+IDApIFogPSB1LnNlY3Rpb25Nb2RGcm9tSW5wdXQobWFudWFsWik7DQogICAgICAgICAgICBpZiAobWFudWFsQyA+IDApIGMgPSB1Lmxlbmd0aEZyb21JbnB1dChtYW51YWxDKTsNCiAgICAgICAgICAgIGlmIChaIDw9IDAgJiYgSSA+IDAgJiYgYyA+IDApIFogPSBJIC8gYzsNCiAgICAgICAgICAgIGlmIChJIDw9IDAgJiYgWiA+IDAgJiYgYyA+IDApIEkgPSBaICogYzsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB7IEk6IEksIFo6IFosIGM6\"+\"IGMsIHR5cGU6IHR5cGUgfTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjYWxjQmVuZGluZ01vbWVudCgpIHsNCiAgICAgICAgY29uc3QgdSA9IGdldFVuaXRzKCk7DQogICAgICAgIGNvbnN0IGJlYW1UeXBlID0gZWxzLmJlYW1UeXBlLnZhbHVlOw0KICAgICAgICBjb25zdCBjYWxjTW9kZSA9IGVscy5jYWxjTW9kZS52YWx1ZTsNCg0KICAgICAgICBpZiAoYmVhbVR5cGUgPT09ICdkaXJlY3RfbW9tZW50JyB8fCBjYWxjTW9kZSA9PT0gJ3NlY3Rpb25Nb2R1bHVzJykgew0KICAgICAgICAgICAgaWYgKGNhbGNNb2RlID09PSAnc2VjdGlvbk1vZHVsdXMnKSByZXR1cm4gMDsNCiAgICAgICAgICAgIHJldHVybiB1Lm1vbWVudEZyb21JbnB1dChudW0oJ2RpcmVjdE1vbWVudCcpKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGNvbnN0IEwgPSB1Lmxlbmd0aEZyb21JbnB1dChudW0oJ2JlYW1MZW5ndGgnKSk7DQogICAgICAgIGNvbnN0IGxvYWRUeXBlID0gZWxzLmxvYWRUeXBlLnZhbHVlOw0KDQogICAgICAgIGlmIChsb2FkVHlwZSA9PT0gJ3BvaW50Jykgew0KICAgICAgICAgICAgY29uc3QgUCA9IHUuZm9yY2VGcm9tSW5wdXQobnVtKCdwb2ludExvYWQnKSk7DQogICAgICAgICAgICBpZiAoYmVhbVR5cGUgPT09ICdzaW1wbHlfc3VwcG9ydGVkJykgcmV0dXJuIFAgKiBMIC8gNDsNCiAgICAgICAgICAgIGlmIChiZWFtVHlwZSA9PT0gJ2NhbnRpbGV2ZXInKSByZXR1cm4gUCAqIEw7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBjb25zdCB3ID0gdS51ZGxGcm9tSW5wdXQobnVtKCd1bmlmb3JtTG9hZCcpKTsNCiAgICAgICAgICAgIGlmIChiZWFtVHlwZSA9PT0gJ3NpbXBseV9zdXBwb3J0ZWQnKSByZXR1cm4gdyAqIEwgKiBMIC8gODsNCiAgICAgICAgICAgIGlmIChiZWFtVHlwZSA9PT0gJ2NhbnRpbGV2ZXInKSByZXR1cm4gdyAqIEwgKiBMIC8gMjsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gMDsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBnZXRBbGxvd2FibGVTdHJlc3ModSkgew0KICAgICAgICBjb25zdCBiYXNpcyA9IGVscy5zdHJlbmd0aEJhc2lzLnZhbHVlOw0KICAgICAgICBjb25zdCBzZiA9IG51bSgnc2FmZXR5RmFjdG9yJyk7DQogICAgICAgIGlmIChiYXNpcyA9PT0gJ2RpcmVjdCcpIHsNCiAgICAgICAgICAgIHJldHVybiB1LnN0cmVzc0Zyb21JbnB1dChudW0oJ2FsbG93YWJsZVN0cmVzcycpKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoYmFzaXMgPT09ICd1bHRpbWF0ZScpIHsNCiAgICAgICAgICAgIGNvbnN0IHN1dCA9IHUuc3RyZXNzRnJvbUlucHV0KG51bSgndWx0aW1hdGVTdHJlbmd0aCcpKTsNCiAgICAgICAgICAgIHJldHVybiBzZiA+IDAgPyBzdXQgLyBzZiA6IDA7DQogICAgICAgIH0NCiAgICAgICAgY29uc3Qgc3kgPSB1LnN0cmVzc0Zyb21JbnB1dChudW0oJ3lpZWxkU3RyZW5ndGgnKSk7DQogICAgICAgIHJldHVybiBzZiA+IDAgPyBzeSAvIHNmIDogMDsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBnZXRS\"+\"ZWZlcmVuY2VTdHJlbmd0aCh1KSB7DQogICAgICAgIGNvbnN0IGJhc2lzID0gZWxzLnN0cmVuZ3RoQmFzaXMudmFsdWU7DQogICAgICAgIGlmIChiYXNpcyA9PT0gJ3VsdGltYXRlJykgcmV0dXJuIHUuc3RyZXNzRnJvbUlucHV0KG51bSgndWx0aW1hdGVTdHJlbmd0aCcpKTsNCiAgICAgICAgaWYgKGJhc2lzID09PSAnZGlyZWN0JykgcmV0dXJuIGdldEFsbG93YWJsZVN0cmVzcyh1KSAqIG51bSgnc2FmZXR5RmFjdG9yJyk7DQogICAgICAgIHJldHVybiB1LnN0cmVzc0Zyb21JbnB1dChudW0oJ3lpZWxkU3RyZW5ndGgnKSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY2FsY1JlcXVpcmVkU2l6ZShNLCBzaWdtYUFsbG93LCB1KSB7DQogICAgICAgIGNvbnN0IHNvbHZlID0gZWxzLnNpemVTb2x2ZS52YWx1ZTsNCiAgICAgICAgY29uc3Qgc2VjdGlvblR5cGUgPSBlbHMuc2VjdGlvblR5cGUudmFsdWU7DQoNCiAgICAgICAgaWYgKHNpZ21hQWxsb3cgPD0gMCB8fCBNIDw9IDApIHJldHVybiB7IHZhbHVlOiAwLCBsYWJlbDogJy0nIH07DQoNCiAgICAgICAgaWYgKHNvbHZlID09PSAnZGlhbWV0ZXInIHx8IChzZWN0aW9uVHlwZSA9PT0gJ3NvbGlkX3JvdW5kJyAmJiBlbHMuY2FsY01vZGUudmFsdWUgPT09ICdyZXF1aXJlZFNpemUnKSkgew0KICAgICAgICAgICAgY29uc3QgZCA9IE1hdGgucG93KDMyICogTSAvIChNYXRoLlBJICogc2lnbWFBbGxvdyksIDEgLyAzKTsNCiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBkLCBsYWJlbDogZm10KHUubGVuZ3RoVG9EaXNwbGF5KGQpLCAyKSArICcgJyArIHUubGVuZ3RoICsgJyAoZCknIH07DQogICAgICAgIH0NCiAgICAgICAgaWYgKHNvbHZlID09PSAnd2lkdGgnKSB7DQogICAgICAgICAgICBjb25zdCBoID0gdS5sZW5ndGhGcm9tSW5wdXQobnVtKCdoZWlnaHQnKSk7DQogICAgICAgICAgICBpZiAoaCA8PSAwKSByZXR1cm4geyB2YWx1ZTogMCwgbGFiZWw6ICctJyB9Ow0KICAgICAgICAgICAgY29uc3QgYiA9IDYgKiBNIC8gKHNpZ21hQWxsb3cgKiBoICogaCk7DQogICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogYiwgbGFiZWw6IGZtdCh1Lmxlbmd0aFRvRGlzcGxheShiKSwgMikgKyAnICcgKyB1Lmxlbmd0aCArICcgKGIpJyB9Ow0KICAgICAgICB9DQogICAgICAgIGNvbnN0IGIgPSB1Lmxlbmd0aEZyb21JbnB1dChudW0oJ3dpZHRoJykpOw0KICAgICAgICBpZiAoYiA8PSAwKSByZXR1cm4geyB2YWx1ZTogMCwgbGFiZWw6ICctJyB9Ow0KICAgICAgICBjb25zdCBoID0gTWF0aC5zcXJ0KDYgKiBNIC8gKGIgKiBzaWdtYUFsbG93KSk7DQogICAgICAgIHJldHVybiB7IHZhbHVlOiBoLCBsYWJlbDogZm10KHUubGVuZ3RoVG9EaXNwbGF5KGgpLCAyKSArICcgJyArIHUubGVuZ3RoICsgJyAoaCknIH07DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY2FsY0RlZmxlY3Rpb24oZ2VvLCBFKSB7DQogICAgICAgIGlmICghaXNDaGVja2VkKCdlbmFibGVEZWZsZWN0aW9uJykgfHwgRSA8PSAwIHx8IGdlby5J\"+\"IDw9IDApIHJldHVybiBudWxsOw0KDQogICAgICAgIGNvbnN0IHUgPSBnZXRVbml0cygpOw0KICAgICAgICBjb25zdCBiZWFtVHlwZSA9IGVscy5iZWFtVHlwZS52YWx1ZTsNCiAgICAgICAgY29uc3QgbG9hZFR5cGUgPSBlbHMubG9hZFR5cGUudmFsdWU7DQogICAgICAgIGNvbnN0IEwgPSB1Lmxlbmd0aEZyb21JbnB1dChudW0oJ2JlYW1MZW5ndGgnKSk7DQogICAgICAgIGxldCBkZWx0YSA9IDA7DQoNCiAgICAgICAgaWYgKGJlYW1UeXBlID09PSAnZGlyZWN0X21vbWVudCcpIHJldHVybiBudWxsOw0KDQogICAgICAgIGlmIChsb2FkVHlwZSA9PT0gJ3BvaW50Jykgew0KICAgICAgICAgICAgY29uc3QgUCA9IHUuZm9yY2VGcm9tSW5wdXQobnVtKCdwb2ludExvYWQnKSk7DQogICAgICAgICAgICBpZiAoYmVhbVR5cGUgPT09ICdzaW1wbHlfc3VwcG9ydGVkJykgZGVsdGEgPSBQICogTWF0aC5wb3coTCwgMykgLyAoNDggKiBFICogZ2VvLkkpOw0KICAgICAgICAgICAgZWxzZSBpZiAoYmVhbVR5cGUgPT09ICdjYW50aWxldmVyJykgZGVsdGEgPSBQICogTWF0aC5wb3coTCwgMykgLyAoMyAqIEUgKiBnZW8uSSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBjb25zdCB3ID0gdS51ZGxGcm9tSW5wdXQobnVtKCd1bmlmb3JtTG9hZCcpKTsNCiAgICAgICAgICAgIGlmIChiZWFtVHlwZSA9PT0gJ3NpbXBseV9zdXBwb3J0ZWQnKSBkZWx0YSA9IDUgKiB3ICogTWF0aC5wb3coTCwgNCkgLyAoMzg0ICogRSAqIGdlby5JKTsNCiAgICAgICAgICAgIGVsc2UgaWYgKGJlYW1UeXBlID09PSAnY2FudGlsZXZlcicpIGRlbHRhID0gdyAqIE1hdGgucG93KEwsIDQpIC8gKDggKiBFICogZ2VvLkkpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIGRlbHRhOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHVwZGF0ZUZpZWxkVmlzaWJpbGl0eSgpIHsNCiAgICAgICAgY29uc3QgY2FsY01vZGUgPSBlbHMuY2FsY01vZGUudmFsdWU7DQogICAgICAgIGNvbnN0IGJlYW1UeXBlID0gZWxzLmJlYW1UeXBlLnZhbHVlOw0KICAgICAgICBjb25zdCBsb2FkVHlwZSA9IGVscy5sb2FkVHlwZS52YWx1ZTsNCiAgICAgICAgY29uc3Qgc2VjdGlvblR5cGUgPSBlbHMuc2VjdGlvblR5cGUudmFsdWU7DQogICAgICAgIGNvbnN0IGJhc2lzID0gZWxzLnN0cmVuZ3RoQmFzaXMudmFsdWU7DQogICAgICAgIGNvbnN0IG5lZWRzQmVhbSA9IGNhbGNNb2RlICE9PSAnc2VjdGlvbk1vZHVsdXMnOw0KICAgICAgICBjb25zdCBuZWVkc01hdGVyaWFsID0gY2FsY01vZGUgIT09ICdzZWN0aW9uTW9kdWx1cyc7DQogICAgICAgIGNvbnN0IGRlZmxFbmFibGVkID0gaXNDaGVja2VkKCdlbmFibGVEZWZsZWN0aW9uJyk7DQoNCiAgICAgICAgcXNhKCcuYnNjLWJlYW0tZmllbGQnKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgew0KICAgICAgICAgICAgY29uc3QgYmVhbXMgPSBlbC5kYXRhc2V0LmJlYW1zID8gZWwuZGF0YXNldC5iZWFtcy5zcGxpdCgnLCcpIDogW107DQogICAgICAgICAg\"+\"ICBjb25zdCBsb2FkcyA9IGVsLmRhdGFzZXQubG9hZHMgPyBlbC5kYXRhc2V0LmxvYWRzLnNwbGl0KCcsJykgOiBudWxsOw0KICAgICAgICAgICAgbGV0IHNob3cgPSBuZWVkc0JlYW0gJiYgYmVhbXMuaW5kZXhPZihiZWFtVHlwZSkgPj0gMDsNCiAgICAgICAgICAgIGlmIChzaG93ICYmIGxvYWRzKSBzaG93ID0gbG9hZHMuaW5kZXhPZihsb2FkVHlwZSkgPj0gMDsNCiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoJ2JzYy1oaWRkZW4nLCAhc2hvdyk7DQogICAgICAgIH0pOw0KDQogICAgICAgIHFzYSgnLmJzYy1nZW9tLWZpZWxkJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsNCiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25zID0gZWwuZGF0YXNldC5zZWN0aW9ucy5zcGxpdCgnLCcpOw0KICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgnYnNjLWhpZGRlbicsIHNlY3Rpb25zLmluZGV4T2Yoc2VjdGlvblR5cGUpIDwgMCk7DQogICAgICAgIH0pOw0KDQogICAgICAgIHFzYSgnLmJzYy1tYXQtZmllbGQnKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgew0KICAgICAgICAgICAgY29uc3QgbW9kZXMgPSBlbC5kYXRhc2V0Lm1vZGVzID8gZWwuZGF0YXNldC5tb2Rlcy5zcGxpdCgnLCcpIDogW107DQogICAgICAgICAgICBjb25zdCBiYXNpc0xpc3QgPSBlbC5kYXRhc2V0LmJhc2lzID8gZWwuZGF0YXNldC5iYXNpcy5zcGxpdCgnLCcpIDogbnVsbDsNCiAgICAgICAgICAgIGxldCBzaG93ID0gbmVlZHNNYXRlcmlhbCAmJiBtb2Rlcy5pbmRleE9mKGNhbGNNb2RlKSA+PSAwOw0KICAgICAgICAgICAgaWYgKHNob3cgJiYgYmFzaXNMaXN0KSBzaG93ID0gYmFzaXNMaXN0LmluZGV4T2YoYmFzaXMpID49IDA7DQogICAgICAgICAgICBlbC5jbGFzc0xpc3QudG9nZ2xlKCdic2MtaGlkZGVuJywgIXNob3cpOw0KICAgICAgICB9KTsNCg0KICAgICAgICBxc2EoJy5ic2MtZGVmbC1maWVsZCcpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7DQogICAgICAgICAgICBlbC5jbGFzc0xpc3QudG9nZ2xlKCdic2MtaGlkZGVuJywgIWRlZmxFbmFibGVkKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgaWYgKGVscy5zaXplU29sdmVHcm91cCkgew0KICAgICAgICAgICAgZWxzLnNpemVTb2x2ZUdyb3VwLmNsYXNzTGlzdC50b2dnbGUoJ2JzYy1oaWRkZW4nLCBjYWxjTW9kZSAhPT0gJ3JlcXVpcmVkU2l6ZScpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGNhbGNNb2RlID09PSAncmVxdWlyZWRTaXplJykgew0KICAgICAgICAgICAgaWYgKHNlY3Rpb25UeXBlID09PSAnc29saWRfcm91bmQnKSBlbHMuc2l6ZVNvbHZlLnZhbHVlID0gJ2RpYW1ldGVyJzsNCiAgICAgICAgICAgIGVsc2UgaWYgKHNlY3Rpb25UeXBlID09PSAncmVjdGFuZ2xlJykgew0KICAgICAgICAgICAgICAgIGlmIChlbHMuc2l6ZVNvbHZlLnZhbHVlID09PSAnZGlhbWV0ZXInKSBlbHMuc2l6ZVNvbHZlLnZhbHVlID0gJ2hlaWdodCc7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAg\"+\"ICB9DQoNCiAgICBmdW5jdGlvbiBhcHBseU1hdGVyaWFsUHJlc2V0KCkgew0KICAgICAgICBjb25zdCBrZXkgPSBlbHMubWF0ZXJpYWwudmFsdWU7DQogICAgICAgIGlmIChrZXkgPT09ICdjdXN0b20nKSByZXR1cm47DQogICAgICAgIGNvbnN0IG1hdCA9IE1BVEVSSUFMU1trZXldOw0KICAgICAgICBjb25zdCB1ID0gZ2V0VW5pdHMoKTsNCiAgICAgICAgZWxzLnlpZWxkU3RyZW5ndGgudmFsdWUgPSBmbXQodS5zdHJlc3NUb0Rpc3BsYXkobWF0LnN5KSwgMSk7DQogICAgICAgIGVscy51bHRpbWF0ZVN0cmVuZ3RoLnZhbHVlID0gZm10KHUuc3RyZXNzVG9EaXNwbGF5KG1hdC5zdXQpLCAxKTsNCiAgICAgICAgZWxzLnlvdW5nc01vZHVsdXMudmFsdWUgPSBmbXQodS5tb2R1bHVzRVRvRGlzcGxheShtYXQuRSksIDEpOw0KICAgICAgICBpZiAoZWxzLnN0cmVuZ3RoQmFzaXMudmFsdWUgPT09ICd5aWVsZCcpIHsNCiAgICAgICAgICAgIGVscy5hbGxvd2FibGVTdHJlc3MudmFsdWUgPSBmbXQodS5zdHJlc3NUb0Rpc3BsYXkobWF0LnN5IC8gbnVtKCdzYWZldHlGYWN0b3InKSksIDIpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgZnVuY3Rpb24gdmFsaWRhdGUoZ2VvKSB7DQogICAgICAgIGNvbnN0IGVycm9ycyA9IFtdOw0KICAgICAgICBjb25zdCB3YXJuaW5ncyA9IFtdOw0KICAgICAgICBjb25zdCB1ID0gZ2V0VW5pdHMoKTsNCiAgICAgICAgY29uc3QgY2FsY01vZGUgPSBlbHMuY2FsY01vZGUudmFsdWU7DQogICAgICAgIGNvbnN0IGJlYW1UeXBlID0gZWxzLmJlYW1UeXBlLnZhbHVlOw0KICAgICAgICBjb25zdCBzZWN0aW9uVHlwZSA9IGVscy5zZWN0aW9uVHlwZS52YWx1ZTsNCiAgICAgICAgY29uc3Qgc2YgPSBudW0oJ3NhZmV0eUZhY3RvcicpOw0KDQogICAgICAgIGlmIChuZWVkc01hdGVyaWFsQ2hlY2soY2FsY01vZGUpKSB7DQogICAgICAgICAgICBpZiAoc2YgPD0gMCkgZXJyb3JzLnB1c2goJ0Rlc2lnbiBzYWZldHkgZmFjdG9yIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgICAgICBjb25zdCBzaWdtYUFsbG93ID0gZ2V0QWxsb3dhYmxlU3RyZXNzKHUpOw0KICAgICAgICAgICAgaWYgKHNpZ21hQWxsb3cgPD0gMCkgZXJyb3JzLnB1c2goJ0FsbG93YWJsZSBiZW5kaW5nIHN0cmVzcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLicpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGNhbGNNb2RlICE9PSAnc2VjdGlvbk1vZHVsdXMnKSB7DQogICAgICAgICAgICBpZiAoYmVhbVR5cGUgIT09ICdkaXJlY3RfbW9tZW50Jykgew0KICAgICAgICAgICAgICAgIGlmIChudW0oJ2JlYW1MZW5ndGgnKSA8PSAwKSBlcnJvcnMucHVzaCgnQmVhbSBsZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nKTsNCiAgICAgICAgICAgICAgICBpZiAoZWxzLmxvYWRUeXBlLnZhbHVlID09PSAncG9pbnQnICYmIG51bSgncG9pbnRMb2FkJykgPD0gMCkgew0KICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaCgnQXBw\"+\"bGllZCBwb2ludCBsb2FkIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChlbHMubG9hZFR5cGUudmFsdWUgPT09ICd1ZGwnICYmIG51bSgndW5pZm9ybUxvYWQnKSA8PSAwKSB7DQogICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKCdVbmlmb3JtIGxvYWQgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2UgaWYgKG51bSgnZGlyZWN0TW9tZW50JykgPD0gMCkgew0KICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKCdBcHBsaWVkIGJlbmRpbmcgbW9tZW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoY2FsY01vZGUgIT09ICdyZXF1aXJlZFNpemUnICYmIGNhbGNNb2RlICE9PSAncmVxdWlyZWRNb2R1bHVzJykgew0KICAgICAgICAgICAgaWYgKGdlby5aIDw9IDApIGVycm9ycy5wdXNoKCdTZWN0aW9uIG1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nKTsNCiAgICAgICAgICAgIGlmIChnZW8uSSA8PSAwKSBlcnJvcnMucHVzaCgnU2Vjb25kIG1vbWVudCBvZiBhcmVhIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoc2VjdGlvblR5cGUgPT09ICdob2xsb3dfcm91bmQnKSB7DQogICAgICAgICAgICBjb25zdCBvZCA9IHUubGVuZ3RoRnJvbUlucHV0KG51bSgnb3V0ZXJEaWFtZXRlcicpKTsNCiAgICAgICAgICAgIGNvbnN0IGlkID0gdS5sZW5ndGhGcm9tSW5wdXQobnVtKCdpbm5lckRpYW1ldGVyJykpOw0KICAgICAgICAgICAgaWYgKGlkID49IG9kKSBlcnJvcnMucHVzaCgnSW5uZXIgZGlhbWV0ZXIgbXVzdCBiZSBsZXNzIHRoYW4gb3V0ZXIgZGlhbWV0ZXIuJyk7DQogICAgICAgICAgICBpZiAob2QgPD0gMCB8fCBpZCA8PSAwKSBlcnJvcnMucHVzaCgnSG9sbG93IHJvdW5kIGRpYW1ldGVycyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLicpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHNlY3Rpb25UeXBlID09PSAnaG9sbG93X3JlY3RhbmdsZScpIHsNCiAgICAgICAgICAgIGNvbnN0IEIgPSB1Lmxlbmd0aEZyb21JbnB1dChudW0oJ291dGVyV2lkdGgnKSk7DQogICAgICAgICAgICBjb25zdCBIID0gdS5sZW5ndGhGcm9tSW5wdXQobnVtKCdvdXRlckhlaWdodCcpKTsNCiAgICAgICAgICAgIGNvbnN0IGIgPSB1Lmxlbmd0aEZyb21JbnB1dChudW0oJ2lubmVyV2lkdGgnKSk7DQogICAgICAgICAgICBjb25zdCBoID0gdS5sZW5ndGhGcm9tSW5wdXQobnVtKCdpbm5lckhlaWdodCcpKTsNCiAgICAgICAgICAgIGlmIChiID49IEIgfHwgaCA+PSBIKSBlcnJvcnMucHVzaCgnSW5uZXIgd2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIGxlc3MgdGhhbiBvdXRlciBkaW1lbnNpb25zLicpOw0KICAgICAgICB9DQoNCiAgICAgICAgY29uc3QgZGlt\"+\"RmllbGRzID0gWyd3aWR0aCcsICdoZWlnaHQnLCAnZGlhbWV0ZXInLCAnb3V0ZXJEaWFtZXRlcicsICdpbm5lckRpYW1ldGVyJywNCiAgICAgICAgICAgICdvdXRlcldpZHRoJywgJ291dGVySGVpZ2h0JywgJ2lubmVyV2lkdGgnLCAnaW5uZXJIZWlnaHQnXTsNCiAgICAgICAgZGltRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7DQogICAgICAgICAgICBjb25zdCBlbCA9IGVsc1tmaWVsZF07DQogICAgICAgICAgICBpZiAoZWwgJiYgIWVsLmNsb3Nlc3QoJy5ic2MtaGlkZGVuJykgJiYgbnVtKGZpZWxkKSA8PSAwKSB7DQogICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goJ1NlY3Rpb24gZGltZW5zaW9ucyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCg0KICAgICAgICBpZiAoKHNlY3Rpb25UeXBlID09PSAnaWJlYW0nIHx8IHNlY3Rpb25UeXBlID09PSAnY3VzdG9tJykgJiYgZ2VvLlogPD0gMCAmJiBnZW8uSSA8PSAwKSB7DQogICAgICAgICAgICBlcnJvcnMucHVzaCgnRW50ZXIgdmFsaWQgc2VjdGlvbiBtb2R1bHVzIFogb3Igc2Vjb25kIG1vbWVudCBvZiBhcmVhIEkgd2l0aCBmaWJlciBkaXN0YW5jZSBjLicpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGlzQ2hlY2tlZCgnZW5hYmxlRGVmbGVjdGlvbicpICYmIG51bSgneW91bmdzTW9kdWx1cycpIDw9IDApIHsNCiAgICAgICAgICAgIGVycm9ycy5wdXNoKCdZb3VuZ1wncyBtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8gZm9yIGRlZmxlY3Rpb24gY2FsY3VsYXRpb25zLicpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHNmIDwgMS41ICYmIG5lZWRzTWF0ZXJpYWxDaGVjayhjYWxjTW9kZSkpIHsNCiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goeyB0eXBlOiAnd2FybicsIG1zZzogJ1NhZmV0eSBmYWN0b3IgYmVsb3cgMS41IG1heSBiZSB0b28gbG93IGZvciB1bmNlcnRhaW4gb3IgZHluYW1pYyBsb2FkaW5nIGNvbmRpdGlvbnMuJyB9KTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChjYWxjTW9kZSAhPT0gJ3NlY3Rpb25Nb2R1bHVzJyAmJiBiZWFtVHlwZSAhPT0gJ2RpcmVjdF9tb21lbnQnKSB7DQogICAgICAgICAgICB3YXJuaW5ncy5wdXNoKHsgdHlwZTogJ2luZm8nLCBtc2c6ICdTaW1wbGUgYmVhbSBmb3JtdWxhcyBtYXkgbm90IGFwcGx5IHRvIGNvbXBsZXggc3VwcG9ydCBvciBsb2FkaW5nIGNvbmRpdGlvbnMuJyB9KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB7IGVycm9yczogZXJyb3JzLCB3YXJuaW5nczogd2FybmluZ3MgfTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBuZWVkc01hdGVyaWFsQ2hlY2sobW9kZSkgew0KICAgICAgICByZXR1cm4gWydzdHJlc3NDaGVjaycsICdhbGxvd2FibGVNb21lbnQnLCAncmVxdWlyZWRNb2R1bHVzJywgJ3JlcXVpcmVkU2l6ZScsICdzYWZldHlGYWN0b3InLCAnYmVhbUxvYWQnXS5pbmRleE9mKG1vZGUpID49IDA7DQogICAgfQ0KDQog\"+\"ICAgZnVuY3Rpb24gZ2V0RGVzaWduU3RhdHVzKGNoZWNrU3RyZXNzLCBzaWdtYUFsbG93LCB1dGlsaXphdGlvbikgew0KICAgICAgICBsZXQgc3RhdHVzID0gJ1NhZmUnLCBzdGF0dXNDbGFzcyA9ICdzYWZlJywgaWNvbiA9ICdcdTI3MTMnOw0KICAgICAgICBpZiAoY2hlY2tTdHJlc3MgPiBzaWdtYUFsbG93IHx8IHV0aWxpemF0aW9uID4gMTAwKSB7DQogICAgICAgICAgICBzdGF0dXMgPSAnVW5zYWZlJzsgc3RhdHVzQ2xhc3MgPSAndW5zYWZlJzsgaWNvbiA9ICdcdTI3MTcnOw0KICAgICAgICB9IGVsc2UgaWYgKHV0aWxpemF0aW9uID49IDgwKSB7DQogICAgICAgICAgICBzdGF0dXMgPSAnQ2F1dGlvbic7IHN0YXR1c0NsYXNzID0gJ2NhdXRpb24nOyBpY29uID0gJyEnOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLCBzdGF0dXNDbGFzczogc3RhdHVzQ2xhc3MsIGljb246IGljb24gfTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBnZXRSZWNvbW1lbmRhdGlvbnMocikgew0KICAgICAgICBjb25zdCByZWNzID0gW107DQogICAgICAgIGlmIChyLnV0aWxpemF0aW9uID4gMTAwKSB7DQogICAgICAgICAgICByZWNzLnB1c2goJ0luY3JlYXNlIHNlY3Rpb24gbW9kdWx1cyBpZiBiZW5kaW5nIHN0cmVzcyBpcyBleGNlc3NpdmUuJyk7DQogICAgICAgICAgICByZWNzLnB1c2goJ0luY3JlYXNlIHNlY3Rpb24gaGVpZ2h0IHRvIGltcHJvdmUgYmVuZGluZyBzdHJlbmd0aCBlZmZpY2llbnRseS4nKTsNCiAgICAgICAgICAgIHJlY3MucHVzaCgnU2VsZWN0IGEgbWF0ZXJpYWwgd2l0aCBoaWdoZXIgeWllbGQgc3RyZW5ndGguJyk7DQogICAgICAgICAgICByZWNzLnB1c2goJ1JlZHVjZSBiZWFtIHNwYW4gd2hlbiBwcmFjdGljYWwuJyk7DQogICAgICAgICAgICByZWNzLnB1c2goJ1JlZHVjZSBiZW5kaW5nIG1vbWVudCBvciBhcHBsaWVkIGxvYWQuJyk7DQogICAgICAgIH0gZWxzZSBpZiAoci51dGlsaXphdGlvbiA+IDgwKSB7DQogICAgICAgICAgICByZWNzLnB1c2goJ0JlbmRpbmcgc3RyZXNzIGlzIGFwcHJvYWNoaW5nIHRoZSBhbGxvd2FibGUgbGltaXQuIENvbnNpZGVyIGluY3JlYXNpbmcgc2VjdGlvbiBjYXBhY2l0eS4nKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoZWxzLnNlY3Rpb25UeXBlLnZhbHVlID09PSAncmVjdGFuZ2xlJykgew0KICAgICAgICAgICAgcmVjcy5wdXNoKCdJbmNyZWFzaW5nIHNlY3Rpb24gaGVpZ2h0IGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gaW5jcmVhc2luZyB3aWR0aCBmb3IgYmVuZGluZyBzdHJlbmd0aC4nKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoWydob2xsb3dfcm91bmQnLCAnaG9sbG93X3JlY3RhbmdsZSddLmluZGV4T2YoZWxzLnNlY3Rpb25UeXBlLnZhbHVlKSA+PSAwKSB7DQogICAgICAgICAgICByZWNzLnB1c2goJ1VzZSBhbiBJLXNlY3Rpb24gb3IgaG9sbG93IHNlY3Rpb24gZm9yIGhpZ2hlciBiZW5kaW5nIGVmZmljaWVuY3kgd2hlcmUgYXBwcm9wcmlhdGUuJyk7\"+\"DQogICAgICAgIH0NCiAgICAgICAgaWYgKHIua3QgPiAxKSB7DQogICAgICAgICAgICByZWNzLnB1c2goJ0NoZWNrIGxvY2FsIHN0cmVzcyBjb25jZW50cmF0aW9ucyBuZWFyIGhvbGVzLCBmaWxsZXRzLCB3ZWxkcywgYW5kIG5vdGNoZXMuJyk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKHIuZGVmbGVjdGlvbiAmJiByLmRlZmxlY3Rpb25MaW1pdCA+IDAgJiYgci5kZWZsZWN0aW9uID4gci5kZWZsZWN0aW9uTGltaXQpIHsNCiAgICAgICAgICAgIHJlY3MucHVzaCgnQ2hlY2sgYmVhbSBkZWZsZWN0aW9uIHNlcGFyYXRlbHkgZnJvbSBzdHJlbmd0aCDigJQgc2VydmljZWFiaWxpdHkgbGltaXQgZXhjZWVkZWQuJyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICByZWNzLnB1c2goJ0NoZWNrIGJlYW0gZGVmbGVjdGlvbiBzZXBhcmF0ZWx5IGZyb20gc3RyZW5ndGguJyk7DQogICAgICAgIH0NCiAgICAgICAgcmVjcy5wdXNoKCdFdmFsdWF0ZSBsYXRlcmFsLXRvcnNpb25hbCBidWNrbGluZyBmb3Igc2xlbmRlciBiZWFtcyB3aGVyZSBhcHBsaWNhYmxlLicpOw0KICAgICAgICByZWNzLnB1c2goJ1BlcmZvcm0gZmF0aWd1ZSBhbmFseXNpcyBmb3IgcmVwZWF0ZWQgYmVuZGluZyBsb2Fkcy4nKTsNCiAgICAgICAgcmV0dXJuIHJlY3MuZmlsdGVyKGZ1bmN0aW9uICh2LCBpLCBhKSB7IHJldHVybiBhLmluZGV4T2YodikgPT09IGk7IH0pOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZSgpIHsNCiAgICAgICAgY29uc3QgdSA9IGdldFVuaXRzKCk7DQogICAgICAgIGNvbnN0IGdlbyA9IGNhbGNTZWN0aW9uUHJvcGVydGllcygpOw0KICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gdmFsaWRhdGUoZ2VvKTsNCg0KICAgICAgICBpZiAodmFsaWRhdGlvbi5lcnJvcnMubGVuZ3RoID4gMCkgew0KICAgICAgICAgICAgc2hvd1Jlc3VsdHNQYW5lbCgpOw0KICAgICAgICAgICAgc2hvd1dhcm5pbmdzKHZhbGlkYXRpb24uZXJyb3JzLm1hcChmdW5jdGlvbiAoZSkgeyByZXR1cm4geyB0eXBlOiAnZXJyb3InLCBtc2c6IGUgfTsgfSkpOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQoNCiAgICAgICAgY29uc3QgY2FsY01vZGUgPSBlbHMuY2FsY01vZGUudmFsdWU7DQogICAgICAgIGNvbnN0IGt0ID0gTWF0aC5tYXgobnVtKCdzdHJlc3NDb25jZW50cmF0aW9uJyksIDEpOw0KICAgICAgICBjb25zdCBNID0gY2FsY0JlbmRpbmdNb21lbnQoKTsNCiAgICAgICAgY29uc3Qgc2lnbWFBbGxvdyA9IGdldEFsbG93YWJsZVN0cmVzcyh1KTsNCiAgICAgICAgY29uc3QgU3JlZiA9IGdldFJlZmVyZW5jZVN0cmVuZ3RoKHUpOw0KICAgICAgICBjb25zdCBFID0gdS5tb2R1bHVzRUZyb21JbnB1dChudW0oJ3lvdW5nc01vZHVsdXMnKSk7DQoNCiAgICAgICAgbGV0IHNpZ21hID0gMCwgc2lnbWFMb2NhbCA9IDAsIE1hbGxvdyA9IDAsIFpyZXEgPSAwLCByZXFTaXplID0geyB2YWx1ZTogMCwgbGFiZWw6ICctJyB9Ow0KICAgICAgICBsZXQgYWN0\"+\"dWFsU0YgPSBJbmZpbml0eSwgdXRpbGl6YXRpb24gPSAwLCBzdHJlc3NSZXNlcnZlID0gMCwgbW9tZW50UmVzZXJ2ZSA9IDA7DQogICAgICAgIGxldCBkZXNpZ24gPSB7IHN0YXR1czogJ1NhZmUnLCBzdGF0dXNDbGFzczogJ3NhZmUnLCBpY29uOiAnXHUyNzEzJyB9Ow0KDQogICAgICAgIGlmIChnZW8uWiA+IDAgJiYgTSA+IDApIHsNCiAgICAgICAgICAgIHNpZ21hID0gTSAvIGdlby5aOw0KICAgICAgICAgICAgc2lnbWFMb2NhbCA9IHNpZ21hICoga3Q7DQogICAgICAgIH0NCg0KICAgICAgICBNYWxsb3cgPSBzaWdtYUFsbG93ICogZ2VvLlo7DQogICAgICAgIGlmIChzaWdtYUFsbG93ID4gMCAmJiBNID4gMCkgWnJlcSA9IE0gLyBzaWdtYUFsbG93Ow0KICAgICAgICByZXFTaXplID0gY2FsY1JlcXVpcmVkU2l6ZShNLCBzaWdtYUFsbG93LCB1KTsNCg0KICAgICAgICBpZiAoY2FsY01vZGUgIT09ICdzZWN0aW9uTW9kdWx1cycpIHsNCiAgICAgICAgICAgIGNvbnN0IGNoZWNrU3RyZXNzID0ga3QgPiAxID8gc2lnbWFMb2NhbCA6IHNpZ21hOw0KICAgICAgICAgICAgYWN0dWFsU0YgPSBjaGVja1N0cmVzcyA+IDAgPyBTcmVmIC8gY2hlY2tTdHJlc3MgOiBJbmZpbml0eTsNCiAgICAgICAgICAgIHV0aWxpemF0aW9uID0gc2lnbWFBbGxvdyA+IDAgPyAoY2hlY2tTdHJlc3MgLyBzaWdtYUFsbG93KSAqIDEwMCA6IDA7DQogICAgICAgICAgICBzdHJlc3NSZXNlcnZlID0gc2lnbWFBbGxvdyAtIGNoZWNrU3RyZXNzOw0KICAgICAgICAgICAgbW9tZW50UmVzZXJ2ZSA9IE1hbGxvdyAtIE07DQogICAgICAgICAgICBkZXNpZ24gPSBnZXREZXNpZ25TdGF0dXMoY2hlY2tTdHJlc3MsIHNpZ21hQWxsb3csIHV0aWxpemF0aW9uKTsNCg0KICAgICAgICAgICAgaWYgKGNoZWNrU3RyZXNzID4gc2lnbWFBbGxvdykgew0KICAgICAgICAgICAgICAgIHZhbGlkYXRpb24ud2FybmluZ3MucHVzaCh7IHR5cGU6ICdlcnJvcicsIG1zZzogJ01heGltdW0gYmVuZGluZyBzdHJlc3MgZXhjZWVkcyBhbGxvd2FibGUgYmVuZGluZyBzdHJlc3MuJyB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChrdCA+IDEgJiYgc2lnbWFMb2NhbCA+IHNpZ21hQWxsb3cpIHsNCiAgICAgICAgICAgICAgICB2YWxpZGF0aW9uLndhcm5pbmdzLnB1c2goeyB0eXBlOiAnZXJyb3InLCBtc2c6ICdMb2NhbCBzdHJlc3MgY29uY2VudHJhdGlvbiBjYXVzZXMgb3ZlcnN0cmVzcyAoS3QgPSAnICsgZm10KGt0LCAyKSArICcpLicgfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoZGVzaWduLnN0YXR1cyA9PT0gJ0NhdXRpb24nKSB7DQogICAgICAgICAgICAgICAgdmFsaWRhdGlvbi53YXJuaW5ncy5wdXNoKHsgdHlwZTogJ3dhcm4nLCBtc2c6ICdCZW5kaW5nIHN0cmVzcyB1dGlsaXphdGlvbiBpcyBhcHByb2FjaGluZyB0aGUgZGVzaWduIGxpbWl0ICgnICsgZm10KHV0aWxpemF0aW9uLCAxKSArICclKS4nIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoN\"+\"CiAgICAgICAgY29uc3QgZGVmbGVjdGlvbiA9IGNhbGNEZWZsZWN0aW9uKGdlbywgRSk7DQogICAgICAgIGNvbnN0IGRlZmxMaW1pdCA9IG51bSgnZGVmbGVjdGlvbkxpbWl0JykgPiAwID8gdS5kZWZsZWN0aW9uRnJvbUlucHV0KG51bSgnZGVmbGVjdGlvbkxpbWl0JykpIDogMDsNCiAgICAgICAgaWYgKGRlZmxlY3Rpb24gIT09IG51bGwgJiYgZGVmbExpbWl0ID4gMCAmJiBkZWZsZWN0aW9uID4gZGVmbExpbWl0KSB7DQogICAgICAgICAgICB2YWxpZGF0aW9uLndhcm5pbmdzLnB1c2goeyB0eXBlOiAnd2FybicsIG1zZzogJ01heGltdW0gZGVmbGVjdGlvbiBleGNlZWRzIHRoZSBzcGVjaWZpZWQgZGVmbGVjdGlvbiBsaW1pdC4nIH0pOw0KICAgICAgICB9DQoNCiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHsNCiAgICAgICAgICAgIHU6IHUsIGdlbzogZ2VvLCBNOiBNLCBzaWdtYTogc2lnbWEsIHNpZ21hTG9jYWw6IHNpZ21hTG9jYWwsIHNpZ21hQWxsb3c6IHNpZ21hQWxsb3csDQogICAgICAgICAgICBNYWxsb3c6IE1hbGxvdywgWnJlcTogWnJlcSwgcmVxU2l6ZTogcmVxU2l6ZSwgYWN0dWFsU0Y6IGFjdHVhbFNGLCB1dGlsaXphdGlvbjogdXRpbGl6YXRpb24sDQogICAgICAgICAgICBzdHJlc3NSZXNlcnZlOiBzdHJlc3NSZXNlcnZlLCBtb21lbnRSZXNlcnZlOiBtb21lbnRSZXNlcnZlLCBkZXNpZ246IGRlc2lnbiwga3Q6IGt0LA0KICAgICAgICAgICAgZGVmbGVjdGlvbjogZGVmbGVjdGlvbiwgZGVmbGVjdGlvbkxpbWl0OiBkZWZsTGltaXQsIGNhbGNNb2RlOiBjYWxjTW9kZSwgU3JlZjogU3JlZg0KICAgICAgICB9Ow0KDQogICAgICAgIHNob3dSZXN1bHRzUGFuZWwoKTsNCiAgICAgICAgZGlzcGxheVJlc3VsdHMocmVzdWx0cyk7DQogICAgICAgIHVwZGF0ZVZpc3VhbGl6YXRpb25zKHJlc3VsdHMpOw0KICAgICAgICBzaG93V2FybmluZ3ModmFsaWRhdGlvbi53YXJuaW5ncyk7DQogICAgICAgIGlmIChjYWxjTW9kZSAhPT0gJ3NlY3Rpb25Nb2R1bHVzJykgc2hvd1JlY29tbWVuZGF0aW9ucyhnZXRSZWNvbW1lbmRhdGlvbnMocmVzdWx0cykpOw0KICAgICAgICBlbHNlIGVscy5yZWNvbW1lbmRhdGlvbnMuaGlkZGVuID0gdHJ1ZTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBkaXNwbGF5UmVzdWx0cyhyKSB7DQogICAgICAgIGNvbnN0IHUgPSByLnU7DQogICAgICAgIGNvbnN0IG1vZGUgPSByLmNhbGNNb2RlOw0KDQogICAgICAgIHNldFJlc3VsdEl0ZW0oJ3Jlc0l0ZW1Nb21lbnQnLCBlbHMucmVzTW9tZW50LA0KICAgICAgICAgICAgbW9kZSA9PT0gJ3NlY3Rpb25Nb2R1bHVzJyAmJiByLk0gPD0gMCA\/ICctJyA6IGZtdCh1Lm1vbWVudFRvRGlzcGxheShyLk0pLCAzKSArICcgJyArIHUubW9tZW50KTsNCiAgICAgICAgc2V0UmVzdWx0SXRlbSgncmVzSXRlbUknLCBlbHMucmVzSSwgZm10KHUuaW5lcnRpYVRvRGlzcGxheShyLmdlby5JKSwgMikgKyAnICcgKyB1LmluZXJ0aWEpOw0KICAgICAgICBzZXRSZXN1bHRJdGVtKCdyZXNJdGVt\"+\"WicsIGVscy5yZXNaLCBmbXQodS5zZWN0aW9uTW9kVG9EaXNwbGF5KHIuZ2VvLlopLCAyKSArICcgJyArIHUubW9kdWx1cyk7DQoNCiAgICAgICAgaWYgKG1vZGUgIT09ICdzZWN0aW9uTW9kdWx1cycgJiYgci5NID4gMCkgew0KICAgICAgICAgICAgc2V0UmVzdWx0SXRlbSgncmVzSXRlbVN0cmVzcycsIGVscy5yZXNTdHJlc3MsIGZtdCh1LnN0cmVzc1RvRGlzcGxheShyLnNpZ21hKSkgKyAnICcgKyB1LnN0cmVzcyk7DQogICAgICAgICAgICBpZiAoci5rdCA+IDEpIHsNCiAgICAgICAgICAgICAgICBzZXRSZXN1bHRJdGVtKCdyZXNJdGVtTG9jYWxTdHJlc3MnLCBlbHMucmVzTG9jYWxTdHJlc3MsIGZtdCh1LnN0cmVzc1RvRGlzcGxheShyLnNpZ21hTG9jYWwpKSArICcgJyArIHUuc3RyZXNzKTsNCiAgICAgICAgICAgIH0gZWxzZSBoaWRlUmVzdWx0SXRlbSgncmVzSXRlbUxvY2FsU3RyZXNzJyk7DQogICAgICAgIH0gZWxzZSBoaWRlUmVzdWx0SXRlbSgncmVzSXRlbVN0cmVzcycpLCBoaWRlUmVzdWx0SXRlbSgncmVzSXRlbUxvY2FsU3RyZXNzJyk7DQoNCiAgICAgICAgaWYgKG5lZWRzTWF0ZXJpYWxDaGVjayhtb2RlKSkgew0KICAgICAgICAgICAgc2V0UmVzdWx0SXRlbSgncmVzSXRlbUFsbG93U3RyZXNzJywgZWxzLnJlc0FsbG93U3RyZXNzLCBmbXQodS5zdHJlc3NUb0Rpc3BsYXkoci5zaWdtYUFsbG93KSkgKyAnICcgKyB1LnN0cmVzcyk7DQogICAgICAgICAgICBzZXRSZXN1bHRJdGVtKCdyZXNJdGVtQWxsb3dNb21lbnQnLCBlbHMucmVzQWxsb3dNb21lbnQsIGZtdCh1Lm1vbWVudFRvRGlzcGxheShyLk1hbGxvdyksIDMpICsgJyAnICsgdS5tb21lbnQpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgaGlkZVJlc3VsdEl0ZW0oJ3Jlc0l0ZW1BbGxvd1N0cmVzcycpOw0KICAgICAgICAgICAgaGlkZVJlc3VsdEl0ZW0oJ3Jlc0l0ZW1BbGxvd01vbWVudCcpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKFsncmVxdWlyZWRNb2R1bHVzJywgJ3JlcXVpcmVkU2l6ZScsICdzdHJlc3NDaGVjaycsICdzYWZldHlGYWN0b3InLCAnYmVhbUxvYWQnXS5pbmRleE9mKG1vZGUpID49IDAgJiYgci5acmVxID4gMCkgew0KICAgICAgICAgICAgc2V0UmVzdWx0SXRlbSgncmVzSXRlbVJlcVonLCBlbHMucmVzUmVxWiwgZm10KHUuc2VjdGlvbk1vZFRvRGlzcGxheShyLlpyZXEpLCAyKSArICcgJyArIHUubW9kdWx1cyk7DQogICAgICAgIH0gZWxzZSBoaWRlUmVzdWx0SXRlbSgncmVzSXRlbVJlcVonKTsNCg0KICAgICAgICBpZiAobW9kZSA9PT0gJ3JlcXVpcmVkU2l6ZScgJiYgci5yZXFTaXplLnZhbHVlID4gMCkgew0KICAgICAgICAgICAgc2V0UmVzdWx0SXRlbSgncmVzSXRlbVJlcVNpemUnLCBlbHMucmVzUmVxU2l6ZSwgci5yZXFTaXplLmxhYmVsKTsNCiAgICAgICAgfSBlbHNlIGhpZGVSZXN1bHRJdGVtKCdyZXNJdGVtUmVxU2l6ZScpOw0KDQogICAgICAgIGlmIChbJ3N0cmVzc0NoZWNrJywgJ3NhZmV0eUZhY3RvcicsICdiZWFt\"+\"TG9hZCddLmluZGV4T2YobW9kZSkgPj0gMCAmJiByLk0gPiAwKSB7DQogICAgICAgICAgICBzZXRSZXN1bHRJdGVtKCdyZXNJdGVtU0YnLCBlbHMucmVzU0YsIGZtdChyLmFjdHVhbFNGLCAyKSk7DQogICAgICAgICAgICBzZXRSZXN1bHRJdGVtKCdyZXNJdGVtVXRpbCcsIGVscy5yZXNVdGlsLCBmbXQoci51dGlsaXphdGlvbiwgMSkgKyAnICUnKTsNCiAgICAgICAgICAgIGVscy5yZXNVdGlsLmNsYXNzTmFtZSA9ICdic2MtcmVzdWx0LXZhbHVlICcgKyB1dGlsQ2xhc3Moci51dGlsaXphdGlvbik7DQogICAgICAgICAgICBzZXRSZXN1bHRJdGVtKCdyZXNJdGVtU3RyZXNzUmVzZXJ2ZScsIGVscy5yZXNTdHJlc3NSZXNlcnZlLCBmbXQodS5zdHJlc3NUb0Rpc3BsYXkoci5zdHJlc3NSZXNlcnZlKSkgKyAnICcgKyB1LnN0cmVzcyk7DQogICAgICAgICAgICBzZXRSZXN1bHRJdGVtKCdyZXNJdGVtTW9tZW50UmVzZXJ2ZScsIGVscy5yZXNNb21lbnRSZXNlcnZlLCBmbXQodS5tb21lbnRUb0Rpc3BsYXkoci5tb21lbnRSZXNlcnZlKSwgMykgKyAnICcgKyB1Lm1vbWVudCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBoaWRlUmVzdWx0SXRlbSgncmVzSXRlbVNGJyk7DQogICAgICAgICAgICBoaWRlUmVzdWx0SXRlbSgncmVzSXRlbVV0aWwnKTsNCiAgICAgICAgICAgIGhpZGVSZXN1bHRJdGVtKCdyZXNJdGVtU3RyZXNzUmVzZXJ2ZScpOw0KICAgICAgICAgICAgaGlkZVJlc3VsdEl0ZW0oJ3Jlc0l0ZW1Nb21lbnRSZXNlcnZlJyk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoci5kZWZsZWN0aW9uICE9PSBudWxsKSB7DQogICAgICAgICAgICBzZXRSZXN1bHRJdGVtKCdyZXNJdGVtRGVmbGVjdGlvbicsIGVscy5yZXNEZWZsZWN0aW9uLCBmbXQodS5kZWZsZWN0aW9uVG9EaXNwbGF5KHIuZGVmbGVjdGlvbiksIDMpICsgJyAnICsgdS5kZWZsZWN0aW9uKTsNCiAgICAgICAgfSBlbHNlIGhpZGVSZXN1bHRJdGVtKCdyZXNJdGVtRGVmbGVjdGlvbicpOw0KDQogICAgICAgIGlmIChtb2RlICE9PSAnc2VjdGlvbk1vZHVsdXMnKSB7DQogICAgICAgICAgICBlbHMucmVzRGVzaWduU3RhdHVzLnRleHRDb250ZW50ID0gci5kZXNpZ24uc3RhdHVzOw0KICAgICAgICAgICAgZWxzLnJlc0Rlc2lnblN0YXR1cy5jbGFzc05hbWUgPSAnYnNjLXJlc3VsdC12YWx1ZSBic2MtJyArIHIuZGVzaWduLnN0YXR1c0NsYXNzOw0KICAgICAgICAgICAgZWxzLnN0YXR1c0Jhbm5lci5jbGFzc05hbWUgPSAnYnNjLXN0YXR1cy1iYW5uZXIgYnNjLScgKyByLmRlc2lnbi5zdGF0dXNDbGFzczsNCiAgICAgICAgICAgIGVscy5zdGF0dXNUZXh0LnRleHRDb250ZW50ID0gci5kZXNpZ24uc3RhdHVzOw0KICAgICAgICAgICAgZWxzLnN0YXR1c0Jhbm5lci5xdWVyeVNlbGVjdG9yKCcuYnNjLXN0YXR1cy1pY29uJykudGV4dENvbnRlbnQgPSByLmRlc2lnbi5pY29uOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZWxzLnJlc0Rlc2lnblN0YXR1cy50ZXh0Q29u\"+\"dGVudCA9ICdHZW9tZXRyeSBPbmx5JzsNCiAgICAgICAgICAgIGVscy5yZXNEZXNpZ25TdGF0dXMuY2xhc3NOYW1lID0gJ2JzYy1yZXN1bHQtdmFsdWUnOw0KICAgICAgICAgICAgZWxzLnN0YXR1c0Jhbm5lci5jbGFzc05hbWUgPSAnYnNjLXN0YXR1cy1iYW5uZXIgYnNjLXNhZmUnOw0KICAgICAgICAgICAgZWxzLnN0YXR1c1RleHQudGV4dENvbnRlbnQgPSAnU2VjdGlvbiBQcm9wZXJ0aWVzIENhbGN1bGF0ZWQnOw0KICAgICAgICAgICAgZWxzLnN0YXR1c0Jhbm5lci5xdWVyeVNlbGVjdG9yKCcuYnNjLXN0YXR1cy1pY29uJykudGV4dENvbnRlbnQgPSAnXHUyNzEzJzsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHV0aWxDbGFzcyh1dGlsKSB7DQogICAgICAgIGlmICh1dGlsID4gMTAwKSByZXR1cm4gJ2JzYy11bnNhZmUnOw0KICAgICAgICBpZiAodXRpbCA+PSA4MCkgcmV0dXJuICdic2MtY2F1dGlvbic7DQogICAgICAgIHJldHVybiAnYnNjLXNhZmUnOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHNldFV0aWxCYXIoZmlsbEVsLCB0ZXh0RWwsIHV0aWwpIHsNCiAgICAgICAgY29uc3QgY2FwcGVkID0gTWF0aC5taW4odXRpbCwgMTUwKTsNCiAgICAgICAgZmlsbEVsLnN0eWxlLndpZHRoID0gTWF0aC5taW4oY2FwcGVkLCAxMDApICsgJyUnOw0KICAgICAgICBmaWxsRWwuY2xhc3NOYW1lID0gJ2JzYy11dGlsLWZpbGwgJyArIHV0aWxDbGFzcyh1dGlsKTsNCiAgICAgICAgdGV4dEVsLnRleHRDb250ZW50ID0gaXNGaW5pdGUodXRpbCkgPyBmbXQodXRpbCwgMSkgKyAnJScgOiAn4oCUJzsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiB1cGRhdGVWaXN1YWxpemF0aW9ucyhyKSB7DQogICAgICAgIGlmIChyLmNhbGNNb2RlICE9PSAnc2VjdGlvbk1vZHVsdXMnKSB7DQogICAgICAgICAgICBzZXRVdGlsQmFyKGVscy5iZW5kVXRpbEZpbGwsIGVscy5iZW5kVXRpbFRleHQsIHIudXRpbGl6YXRpb24pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZWxzLmJlbmRVdGlsRmlsbC5zdHlsZS53aWR0aCA9ICcwJSc7DQogICAgICAgICAgICBlbHMuYmVuZFV0aWxUZXh0LnRleHRDb250ZW50ID0gJ+KAlCc7DQogICAgICAgIH0NCiAgICAgICAgZWxzLmJlYW1WaXouaW5uZXJIVE1MID0gZHJhd0JlYW1TVkcoKTsNCiAgICAgICAgZWxzLnNlY3Rpb25WaXouaW5uZXJIVE1MID0gZHJhd1NlY3Rpb25TVkcoci5nZW8udHlwZSk7DQogICAgICAgIGVscy5zdHJlc3NWaXouaW5uZXJIVE1MID0gZHJhd1N0cmVzc1NWRygpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGRyYXdCZWFtU1ZHKCkgew0KICAgICAgICBjb25zdCBiZWFtVHlwZSA9IGVscy5iZWFtVHlwZS52YWx1ZTsNCiAgICAgICAgY29uc3QgbG9hZFR5cGUgPSBlbHMubG9hZFR5cGUudmFsdWU7DQogICAgICAgIGxldCBzdmcgPSAnPHN2ZyB2aWV3Qm94PSIwIDAgMjIwIDEzMCIgd2lkdGg9IjIyMCIgaGVpZ2h0PSIxMzAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2\"+\"ZyI+JzsNCg0KICAgICAgICBpZiAoYmVhbVR5cGUgPT09ICdjYW50aWxldmVyJykgew0KICAgICAgICAgICAgc3ZnICs9ICc8cmVjdCB4PSIzMCIgeT0iMTA4IiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIGZpbGw9IiM4ODgiLz4nICsNCiAgICAgICAgICAgICAgICAnPHJlY3QgeD0iNDIiIHk9IjU1IiB3aWR0aD0iMTQwIiBoZWlnaHQ9IjgiIGZpbGw9IiNiZGMzYzciIHN0cm9rZT0iIzU1NSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4nOw0KICAgICAgICAgICAgaWYgKGxvYWRUeXBlID09PSAncG9pbnQnKSB7DQogICAgICAgICAgICAgICAgc3ZnICs9ICc8bGluZSB4MT0iMTgyIiB5MT0iMzAiIHgyPSIxODIiIHkyPSI1NSIgc3Ryb2tlPSIjZTc0YzNjIiBzdHJva2Utd2lkdGg9IjIuNSIvPicgKw0KICAgICAgICAgICAgICAgICAgICAnPHBvbHlnb24gcG9pbnRzPSIxNzcsMzAgMTg3LDMwIDE4MiwxOCIgZmlsbD0iI2U3NGMzYyIvPic7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHggPSA1MCArIGkgKiAyMjsNCiAgICAgICAgICAgICAgICAgICAgc3ZnICs9ICc8bGluZSB4MT0iJyArIHggKyAnIiB5MT0iMjUiIHgyPSInICsgeCArICciIHkyPSI1NSIgc3Ryb2tlPSIjZTc0YzNjIiBzdHJva2Utd2lkdGg9IjEuNSIvPicgKw0KICAgICAgICAgICAgICAgICAgICAgICAgJzxwb2x5Z29uIHBvaW50cz0iJyArICh4IC0gNCkgKyAnLDI1ICcgKyAoeCArIDQpICsgJywyNSAnICsgeCArICcsMTUiIGZpbGw9IiNlNzRjM2MiLz4nOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHN2ZyArPSAnPHRleHQgeD0iMTEwIiB5PSIxMjUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTAiIGZpbGw9IiMxYTUyNzYiPkNhbnRpbGV2ZXIgQmVhbTwvdGV4dD4nOw0KICAgICAgICB9IGVsc2UgaWYgKGJlYW1UeXBlID09PSAnZGlyZWN0X21vbWVudCcpIHsNCiAgICAgICAgICAgIHN2ZyArPSAnPHJlY3QgeD0iNTAiIHk9IjYwIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjgiIGZpbGw9IiNiZGMzYzciIHN0cm9rZT0iIzU1NSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4nICsNCiAgICAgICAgICAgICAgICAnPHBhdGggZD0iTTYwLDQwIEEyMCwyMCAwIDAsMSAxMDAsNDAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzI0NzFhMyIgc3Ryb2tlLXdpZHRoPSIyIi8+JyArDQogICAgICAgICAgICAgICAgJzxwb2x5Z29uIHBvaW50cz0iOTgsMzYgMTA0LDQwIDk4LDQ0IiBmaWxsPSIjMjQ3MWEzIi8+JyArDQogICAgICAgICAgICAgICAgJzx0ZXh0IHg9IjExMCIgeT0iMTI1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEwIiBmaWxsPSIjMWE1Mjc2Ij5EaXJlY3QgTW9tZW50PC90ZXh0Pic7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBzdmcgKz0gJzxwb2x5Z29uIHBvaW50cz0iNDIsMTA4\"+\"IDQyLDEwMCAzNCwxMDAgNDYsODggNTgsMTAwIDUwLDEwMCA1MCwxMDgiIGZpbGw9IiM4ODgiLz4nICsNCiAgICAgICAgICAgICAgICAnPHBvbHlnb24gcG9pbnRzPSIxNzAsMTA4IDE3MCwxMDAgMTYyLDEwMCAxNzQsODggMTg2LDEwMCAxNzgsMTAwIDE3OCwxMDgiIGZpbGw9IiM4ODgiLz4nICsNCiAgICAgICAgICAgICAgICAnPHJlY3QgeD0iNTAiIHk9IjU1IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjgiIGZpbGw9IiNiZGMzYzciIHN0cm9rZT0iIzU1NSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4nOw0KICAgICAgICAgICAgaWYgKGxvYWRUeXBlID09PSAncG9pbnQnKSB7DQogICAgICAgICAgICAgICAgc3ZnICs9ICc8bGluZSB4MT0iMTEwIiB5MT0iMjUiIHgyPSIxMTAiIHkyPSI1NSIgc3Ryb2tlPSIjZTc0YzNjIiBzdHJva2Utd2lkdGg9IjIuNSIvPicgKw0KICAgICAgICAgICAgICAgICAgICAnPHBvbHlnb24gcG9pbnRzPSIxMDUsMjUgMTE1LDI1IDExMCwxMyIgZmlsbD0iI2U3NGMzYyIvPic7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHggPSA1OCArIGkgKiAyNjsNCiAgICAgICAgICAgICAgICAgICAgc3ZnICs9ICc8bGluZSB4MT0iJyArIHggKyAnIiB5MT0iMjIiIHgyPSInICsgeCArICciIHkyPSI1NSIgc3Ryb2tlPSIjZTc0YzNjIiBzdHJva2Utd2lkdGg9IjEuNSIvPicgKw0KICAgICAgICAgICAgICAgICAgICAgICAgJzxwb2x5Z29uIHBvaW50cz0iJyArICh4IC0gNCkgKyAnLDIyICcgKyAoeCArIDQpICsgJywyMiAnICsgeCArICcsMTIiIGZpbGw9IiNlNzRjM2MiLz4nOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHN2ZyArPSAnPHRleHQgeD0iMTEwIiB5PSIxMjUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTAiIGZpbGw9IiMxYTUyNzYiPlNpbXBseSBTdXBwb3J0ZWQgQmVhbTwvdGV4dD4nOw0KICAgICAgICB9DQogICAgICAgIHN2ZyArPSAnPC9zdmc+JzsNCiAgICAgICAgcmV0dXJuIHN2ZzsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBkcmF3U2VjdGlvblNWRyh0eXBlKSB7DQogICAgICAgIGxldCBzdmcgPSAnPHN2ZyB2aWV3Qm94PSIwIDAgMTQwIDE0MCIgd2lkdGg9IjE0MCIgaGVpZ2h0PSIxNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+JzsNCiAgICAgICAgaWYgKHR5cGUgPT09ICdzb2xpZF9yb3VuZCcpIHsNCiAgICAgICAgICAgIHN2ZyArPSAnPGNpcmNsZSBjeD0iNzAiIGN5PSI2NSIgcj0iNDIiIGZpbGw9IiNkNWRiZGIiIHN0cm9rZT0iIzFhNTI3NiIgc3Ryb2tlLXdpZHRoPSIyIi8+JyArDQogICAgICAgICAgICAgICAgJzxsaW5lIHgxPSIyOCIgeTE9IjY1IiB4Mj0iMTEyIiB5Mj0iNjUiIHN0cm9rZT0iIzI0NzFhMyIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjQsMyIvPicgKw0KICAg\"+\"ICAgICAgICAgICAgICc8dGV4dCB4PSI3MCIgeT0iMTI1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjkiIGZpbGw9IiMyNDcxYTMiPk5ldXRyYWwgQXhpczwvdGV4dD4nOw0KICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdob2xsb3dfcm91bmQnKSB7DQogICAgICAgICAgICBzdmcgKz0gJzxjaXJjbGUgY3g9IjcwIiBjeT0iNjUiIHI9IjQyIiBmaWxsPSJub25lIiBzdHJva2U9IiMxYTUyNzYiIHN0cm9rZS13aWR0aD0iMiIvPicgKw0KICAgICAgICAgICAgICAgICc8Y2lyY2xlIGN4PSI3MCIgY3k9IjY1IiByPSIyNCIgZmlsbD0iI2Y0ZjdmYSIgc3Ryb2tlPSIjMWE1Mjc2IiBzdHJva2Utd2lkdGg9IjIiLz4nICsNCiAgICAgICAgICAgICAgICAnPGxpbmUgeDE9IjI4IiB5MT0iNjUiIHgyPSIxMTIiIHkyPSI2NSIgc3Ryb2tlPSIjMjQ3MWEzIiBzdHJva2Utd2lkdGg9IjEuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNCwzIi8+JzsNCiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnaG9sbG93X3JlY3RhbmdsZScpIHsNCiAgICAgICAgICAgIHN2ZyArPSAnPHJlY3QgeD0iMjUiIHk9IjMwIiB3aWR0aD0iOTAiIGhlaWdodD0iNzAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFhNTI3NiIgc3Ryb2tlLXdpZHRoPSIyIi8+JyArDQogICAgICAgICAgICAgICAgJzxyZWN0IHg9IjQwIiB5PSI0NSIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjZjRmN2ZhIiBzdHJva2U9IiMxYTUyNzYiIHN0cm9rZS13aWR0aD0iMiIvPicgKw0KICAgICAgICAgICAgICAgICc8bGluZSB4MT0iMjAiIHkxPSI2NSIgeDI9IjEyMCIgeTI9IjY1IiBzdHJva2U9IiMyNDcxYTMiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtZGFzaGFycmF5PSI0LDMiLz4nOw0KICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdpYmVhbScgfHwgdHlwZSA9PT0gJ2N1c3RvbScpIHsNCiAgICAgICAgICAgIHN2ZyArPSAnPHBhdGggZD0iTTM1LDM1IEgxMDUgVjQ1IEg3NSBWODUgSDEwNSBWOTUgSDM1IFY4NSBINjUgVjQ1IEgzNSBaIiBmaWxsPSIjZDVkYmRiIiBzdHJva2U9IiMxYTUyNzYiIHN0cm9rZS13aWR0aD0iMiIvPicgKw0KICAgICAgICAgICAgICAgICc8bGluZSB4MT0iMjAiIHkxPSI2NSIgeDI9IjEyMCIgeTI9IjY1IiBzdHJva2U9IiMyNDcxYTMiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtZGFzaGFycmF5PSI0LDMiLz4nOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgc3ZnICs9ICc8cmVjdCB4PSIzNSIgeT0iMzUiIHdpZHRoPSI3MCIgaGVpZ2h0PSI2MCIgZmlsbD0iI2Q1ZGJkYiIgc3Ryb2tlPSIjMWE1Mjc2IiBzdHJva2Utd2lkdGg9IjIiLz4nICsNCiAgICAgICAgICAgICAgICAnPGxpbmUgeDE9IjIwIiB5MT0iNjUiIHgyPSIxMjAiIHkyPSI2NSIgc3Ryb2tlPSIjMjQ3MWEzIiBzdHJva2Utd2lkdGg9IjEuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNCwzIi8+JyArDQogICAgICAgICAgICAgICAgJzx0ZXh0IHg9IjcwIiB5PSIxOCIgdGV4\"+\"dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSI4IiBmaWxsPSIjZTc0YzNjIj5Db21wcmVzc2lvbjwvdGV4dD4nICsNCiAgICAgICAgICAgICAgICAnPHRleHQgeD0iNzAiIHk9IjExMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSI4IiBmaWxsPSIjMjdhZTYwIj5UZW5zaW9uPC90ZXh0Pic7DQogICAgICAgIH0NCiAgICAgICAgc3ZnICs9ICc8L3N2Zz4nOw0KICAgICAgICByZXR1cm4gc3ZnOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGRyYXdTdHJlc3NTVkcoKSB7DQogICAgICAgIHJldHVybiAnPHN2ZyB2aWV3Qm94PSIwIDAgMTYwIDEyMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIxMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+JyArDQogICAgICAgICAgICAnPHJlY3QgeD0iNzAiIHk9IjIwIiB3aWR0aD0iMjAiIGhlaWdodD0iODAiIGZpbGw9IiNlY2YwZjEiIHN0cm9rZT0iIzU1NSIgc3Ryb2tlLXdpZHRoPSIxIi8+JyArDQogICAgICAgICAgICAnPGxpbmUgeDE9IjcwIiB5MT0iNjAiIHgyPSI5MCIgeTI9IjYwIiBzdHJva2U9IiMyNDcxYTMiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtZGFzaGFycmF5PSIzLDIiLz4nICsNCiAgICAgICAgICAgICc8cG9seWdvbiBwb2ludHM9Ijk1LDIyIDExNSwzMCA5NSwzOCIgZmlsbD0iI2U3NGMzYyIgb3BhY2l0eT0iMC44Ii8+JyArDQogICAgICAgICAgICAnPHBvbHlnb24gcG9pbnRzPSI5NSw0MiAxMDgsNDggOTUsNTQiIGZpbGw9IiNlNzRjM2MiIG9wYWNpdHk9IjAuNSIvPicgKw0KICAgICAgICAgICAgJzxwb2x5Z29uIHBvaW50cz0iOTUsODIgMTE1LDc0IDk1LDY2IiBmaWxsPSIjMjdhZTYwIiBvcGFjaXR5PSIwLjgiLz4nICsNCiAgICAgICAgICAgICc8cG9seWdvbiBwb2ludHM9Ijk1LDEwMiAxMDgsOTYgOTUsOTAiIGZpbGw9IiMyN2FlNjAiIG9wYWNpdHk9IjAuNSIvPicgKw0KICAgICAgICAgICAgJzx0ZXh0IHg9IjEzMCIgeT0iMjgiIGZvbnQtc2l6ZT0iOCIgZmlsbD0iI2U3NGMzYyI+Q29tcC48L3RleHQ+JyArDQogICAgICAgICAgICAnPHRleHQgeD0iMTMwIiB5PSI3OCIgZm9udC1zaXplPSI4IiBmaWxsPSIjMjdhZTYwIj5UZW5zLjwvdGV4dD4nICsNCiAgICAgICAgICAgICc8dGV4dCB4PSI4MCIgeT0iMTE1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjkiIGZpbGw9IiMxYTUyNzYiPkxpbmVhciBTdHJlc3MgRGlzdHJpYnV0aW9uPC90ZXh0Pjwvc3ZnPic7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gc2V0UmVzdWx0SXRlbShpdGVtSWQsIHZhbHVlRWwsIHRleHQpIHsNCiAgICAgICAgY29uc3QgaXRlbSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2JzYy0nICsgaXRlbUlkKTsNCiAgICAgICAgaWYgKGl0ZW0pIGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnYnNjLWhpZGRlbicpOw0KICAgICAgICB2YWx1ZUVsLnRleHRDb250ZW50ID0gdGV4dDsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBoaWRlUmVzdWx0SXRlbShpdGVtSWQpIHsNCiAg\"+\"ICAgICAgY29uc3QgaXRlbSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2JzYy0nICsgaXRlbUlkKTsNCiAgICAgICAgaWYgKGl0ZW0pIGl0ZW0uY2xhc3NMaXN0LmFkZCgnYnNjLWhpZGRlbicpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHNob3dXYXJuaW5ncyhpdGVtcykgew0KICAgICAgICBpZiAoIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMCkgew0KICAgICAgICAgICAgZWxzLndhcm5pbmdzLmhpZGRlbiA9IHRydWU7DQogICAgICAgICAgICBlbHMud2FybmluZ3MuaW5uZXJIVE1MID0gJyc7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCiAgICAgICAgZWxzLndhcm5pbmdzLmhpZGRlbiA9IGZhbHNlOw0KICAgICAgICBlbHMud2FybmluZ3MuaW5uZXJIVE1MID0gaXRlbXMubWFwKGZ1bmN0aW9uICh3KSB7DQogICAgICAgICAgICBjb25zdCBjbHMgPSB3LnR5cGUgPT09ICdlcnJvcicgPyAnYnNjLXdhcm5pbmctZXJyb3InIDogdy50eXBlID09PSAnd2FybicgPyAnYnNjLXdhcm5pbmctd2FybicgOiAnYnNjLXdhcm5pbmctaW5mbyc7DQogICAgICAgICAgICBjb25zdCBpY29uID0gdy50eXBlID09PSAnZXJyb3InID8gJyEnIDogdy50eXBlID09PSAnd2FybicgPyAnKicgOiAnaSc7DQogICAgICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImJzYy13YXJuaW5nICcgKyBjbHMgKyAnIj48c3Bhbj4nICsgaWNvbiArICc8L3NwYW4+PHNwYW4+JyArIHcubXNnICsgJzwvc3Bhbj48L2Rpdj4nOw0KICAgICAgICB9KS5qb2luKCcnKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBzaG93UmVjb21tZW5kYXRpb25zKHJlY3MpIHsNCiAgICAgICAgaWYgKCFyZWNzIHx8IHJlY3MubGVuZ3RoID09PSAwKSB7DQogICAgICAgICAgICBlbHMucmVjb21tZW5kYXRpb25zLmhpZGRlbiA9IHRydWU7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCiAgICAgICAgZWxzLnJlY29tbWVuZGF0aW9ucy5oaWRkZW4gPSBmYWxzZTsNCiAgICAgICAgZWxzLnJlY29tbWVuZGF0aW9uc0xpc3QuaW5uZXJIVE1MID0gcmVjcy5tYXAoZnVuY3Rpb24gKHIpIHsgcmV0dXJuICc8bGk+JyArIHIgKyAnPC9saT4nOyB9KS5qb2luKCcnKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBzaG93UmVzdWx0c1BhbmVsKCkgew0KICAgICAgICBpZiAoZWxzLnJlc3VsdHNQYW5lbCkgZWxzLnJlc3VsdHNQYW5lbC5jbGFzc0xpc3QucmVtb3ZlKCdic2MtaGlkZGVuJyk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY29udmVydFZhbHVlc09uVW5pdENoYW5nZShuZXdTeXN0ZW0pIHsNCiAgICAgICAgY29uc3Qgb2xkU3lzdGVtID0gbmV3U3lzdGVtID09PSAnbWV0cmljJyA\/ICdpbXBlcmlhbCcgOiAnbWV0cmljJzsNCiAgICAgICAgY29uc3Qgb2xkVSA9IFVOSVRTW29sZFN5c3RlbV07DQogICAgICAgIGNvbnN0IG5ld1UgPSBVTklUU1tuZXdTeXN0ZW1dOw0KDQogICAgICAgIFsneWllbGRTdHJlbmd0aCcsICd1bHRpbWF0ZVN0cmVuZ3RoJywgJ2FsbG93YWJsZVN0cmVz\"+\"cyddLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7DQogICAgICAgICAgICBjb25zdCB2ID0gbnVtKGlkKTsNCiAgICAgICAgICAgIGlmICh2ID4gMCkgZWxzW2lkXS52YWx1ZSA9IGZtdChuZXdVLnN0cmVzc1RvRGlzcGxheShvbGRVLnN0cmVzc0Zyb21JbnB1dCh2KSksIDIpOw0KICAgICAgICB9KTsNCg0KICAgICAgICBpZiAobnVtKCd5b3VuZ3NNb2R1bHVzJykgPiAwKSB7DQogICAgICAgICAgICBlbHMueW91bmdzTW9kdWx1cy52YWx1ZSA9IGZtdChuZXdVLm1vZHVsdXNFVG9EaXNwbGF5KG9sZFUubW9kdWx1c0VGcm9tSW5wdXQobnVtKCd5b3VuZ3NNb2R1bHVzJykpKSwgMik7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAobnVtKCdwb2ludExvYWQnKSAhPT0gMCkgew0KICAgICAgICAgICAgZWxzLnBvaW50TG9hZC52YWx1ZSA9IGZtdChuZXdVLmZvcmNlVG9EaXNwbGF5KG9sZFUuZm9yY2VGcm9tSW5wdXQobnVtKCdwb2ludExvYWQnKSkpLCAzKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAobnVtKCd1bmlmb3JtTG9hZCcpICE9PSAwKSB7DQogICAgICAgICAgICBlbHMudW5pZm9ybUxvYWQudmFsdWUgPSBmbXQobmV3VS51ZGxUb0Rpc3BsYXkob2xkVS51ZGxGcm9tSW5wdXQobnVtKCd1bmlmb3JtTG9hZCcpKSksIDMpOw0KICAgICAgICB9DQogICAgICAgIGlmIChudW0oJ2RpcmVjdE1vbWVudCcpICE9PSAwKSB7DQogICAgICAgICAgICBlbHMuZGlyZWN0TW9tZW50LnZhbHVlID0gZm10KG5ld1UubW9tZW50VG9EaXNwbGF5KG9sZFUubW9tZW50RnJvbUlucHV0KG51bSgnZGlyZWN0TW9tZW50JykpKSwgMyk7DQogICAgICAgIH0NCg0KICAgICAgICBbJ3dpZHRoJywgJ2hlaWdodCcsICdkaWFtZXRlcicsICdvdXRlckRpYW1ldGVyJywgJ2lubmVyRGlhbWV0ZXInLA0KICAgICAgICAgICAgJ291dGVyV2lkdGgnLCAnb3V0ZXJIZWlnaHQnLCAnaW5uZXJXaWR0aCcsICdpbm5lckhlaWdodCcsICdiZWFtTGVuZ3RoJywgJ2ZpYmVyRGlzdGFuY2UnLCAnZGVmbGVjdGlvbkxpbWl0J10uZm9yRWFjaChmdW5jdGlvbiAoaWQpIHsNCiAgICAgICAgICAgIGNvbnN0IHYgPSBudW0oaWQpOw0KICAgICAgICAgICAgaWYgKHYgPiAwKSBlbHNbaWRdLnZhbHVlID0gZm10KG5ld1UubGVuZ3RoVG9EaXNwbGF5KG9sZFUubGVuZ3RoRnJvbUlucHV0KHYpKSwgMyk7DQogICAgICAgIH0pOw0KDQogICAgICAgIGlmIChudW0oJ2N1c3RvbUknKSA+IDApIHsNCiAgICAgICAgICAgIGVscy5jdXN0b21JLnZhbHVlID0gZm10KG5ld1UuaW5lcnRpYVRvRGlzcGxheShvbGRVLmluZXJ0aWFGcm9tSW5wdXQobnVtKCdjdXN0b21JJykpKSwgMik7DQogICAgICAgIH0NCiAgICAgICAgaWYgKG51bSgnY3VzdG9tWicpID4gMCkgew0KICAgICAgICAgICAgZWxzLmN1c3RvbVoudmFsdWUgPSBmbXQobmV3VS5zZWN0aW9uTW9kVG9EaXNwbGF5KG9sZFUuc2VjdGlvbk1vZEZyb21JbnB1dChudW0oJ2N1c3RvbVonKSkpLCAyKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0\"+\"aW9uIGJpbmRFdmVudHMoKSB7DQogICAgICAgIGVscy5jYWxjdWxhdGVCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjYWxjdWxhdGUpOw0KICAgICAgICBlbHMubWF0ZXJpYWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgYXBwbHlNYXRlcmlhbFByZXNldCk7DQoNCiAgICAgICAgZWxzLnVuaXRTeXN0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgY29udmVydFZhbHVlc09uVW5pdENoYW5nZShlbHMudW5pdFN5c3RlbS52YWx1ZSk7DQogICAgICAgICAgICB1cGRhdGVVbml0TGFiZWxzKCk7DQogICAgICAgIH0pOw0KDQogICAgICAgIFsnY2FsY01vZGUnLCAnYmVhbVR5cGUnLCAnbG9hZFR5cGUnLCAnc2VjdGlvblR5cGUnLCAnc3RyZW5ndGhCYXNpcycsICdzaXplU29sdmUnXS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkgew0KICAgICAgICAgICAgaWYgKGVsc1tpZF0pIGVsc1tpZF0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdXBkYXRlRmllbGRWaXNpYmlsaXR5KTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgZWxzLmVuYWJsZURlZmxlY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdXBkYXRlRmllbGRWaXNpYmlsaXR5KTsNCg0KICAgICAgICBlbHMuc3RyZW5ndGhCYXNpcy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB1cGRhdGVGaWVsZFZpc2liaWxpdHkoKTsNCiAgICAgICAgICAgIGlmIChlbHMuc3RyZW5ndGhCYXNpcy52YWx1ZSA9PT0gJ3lpZWxkJykgYXBwbHlNYXRlcmlhbFByZXNldCgpOw0KICAgICAgICB9KTsNCg0KICAgICAgICBlbHMuc2FmZXR5RmFjdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChlbHMuc3RyZW5ndGhCYXNpcy52YWx1ZSA9PT0gJ3lpZWxkJykgew0KICAgICAgICAgICAgICAgIGNvbnN0IHUgPSBnZXRVbml0cygpOw0KICAgICAgICAgICAgICAgIGNvbnN0IHN5ID0gdS5zdHJlc3NGcm9tSW5wdXQobnVtKCd5aWVsZFN0cmVuZ3RoJykpOw0KICAgICAgICAgICAgICAgIGVscy5hbGxvd2FibGVTdHJlc3MudmFsdWUgPSBmbXQodS5zdHJlc3NUb0Rpc3BsYXkoc3kgLyBudW0oJ3NhZmV0eUZhY3RvcicpKSwgMik7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGluaXQoKSB7DQogICAgICAgIHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnNjLWNhbGN1bGF0b3InKTsNCiAgICAgICAgaWYgKCFyb290IHx8IHJvb3QuZ2V0QXR0cmlidXRlKCdkYXRhLWJzYy1yZWFkeScpID09PSAnMScpIHJldHVybjsNCiAgICAgICAgaWYgKCFjYWNoZUVsZW1lbnRzKCkpIHJldHVybjsNCiAgICAgICAgcm9vdC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnNjLXJlYWR5JywgJzEnKTsNCiAgICAgICAgYXBwbHlNYXRlcmlhbFByZXNldCgpOw0KICAgICAgICB1cGRhdGVVbml0TGFiZWxzKCk7\"+\"DQogICAgICAgIHVwZGF0ZUZpZWxkVmlzaWJpbGl0eSgpOw0KICAgICAgICBiaW5kRXZlbnRzKCk7DQogICAgfQ0KDQogICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykgew0KICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgaW5pdCk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgaW5pdCgpOw0KICAgIH0NCg0KICAgIHdpbmRvdy5CU0NJbml0ID0gaW5pdDsNCn0pKCk7DQo=\";\n  try{(new Function(atob(b)))();}catch(e){}\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>The Bending Stress Calculator is a practical engineering tool designed to calculate bending stress, section modulus, bending moment, and allowable bending capacity for beams and&#8230;<\/p>","protected":false},"author":2,"featured_media":24804,"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":[8647],"tags":[8674,8672,8545,8673],"class_list":["post-24803","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-materials-science-and-properties","tag-beam-strength","tag-bending-moment","tag-bending-stress","tag-section-modulus","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/09\/Bending-Stress-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24803","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/comments?post=24803"}],"version-history":[{"count":0,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/posts\/24803\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/media\/24804"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/media?parent=24803"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/categories?post=24803"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/pt\/wp-json\/wp\/v2\/tags?post=24803"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}