{"id":24764,"date":"2026-08-28T05:35:28","date_gmt":"2026-08-28T05:35:28","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24764"},"modified":"2026-08-28T05:39:06","modified_gmt":"2026-08-28T05:39:06","slug":"mechanical-structure-overall-safety-factor-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/fr\/mechanical-structure-overall-safety-factor-calculator\/","title":{"rendered":"Mechanical Structure Overall Safety Factor Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Mechanical Structure Overall Safety Factor Calculator<\/strong> is a practical engineering tool designed to evaluate the overall safety margin of mechanical structures under axial, shear, bending, torsional, and combined loads. By analyzing applied loads, material strength, geometry, equivalent stress, and correction factors, users can quickly assess structural reliability and strength utilization. The Mechanical Structure Overall Safety Factor Calculator helps engineers optimize machine frames, beams, brackets, shafts, supports, and other structural components while reducing the risk of overload and structural failure.<\/p>\n\n\n\n<!-- WordPress Custom HTML Block: copy ALL content below -->\n<!-- Do NOT wrap in DOCTYPE\/html\/head\/body. Use Code Editor mode. -->\n<!-- All CSS\/JS scoped to #mechanical-structure-safety-factor-calculator \u2014 will NOT affect theme header, footer, or other page content. -->\n<style>\n\/* Scoped to #mechanical-structure-safety-factor-calculator \u2014 safe for WordPress embed *\/\n#mechanical-structure-safety-factor-calculator {\n    --msosfc-primary: #1e4d8c;\n    --msosfc-primary-dark: #163a6b;\n    --msosfc-primary-bg: #e8f0fa;\n    --msosfc-success: #059669;\n    --msosfc-success-bg: #ecfdf5;\n    --msosfc-warning: #d97706;\n    --msosfc-warning-bg: #fffbeb;\n    --msosfc-danger: #dc2626;\n    --msosfc-danger-bg: #fef2f2;\n    --msosfc-text: #1a2332;\n    --msosfc-text-muted: #5a6778;\n    --msosfc-border: #d8dee8;\n    --msosfc-card-bg: #ffffff;\n    --msosfc-radius: 10px;\n    --msosfc-shadow: 0 2px 12px rgba(30, 77, 140, 0.08);\n    --msosfc-font: 'Segoe UI', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;\n\n    font-family: var(--msosfc-font);\n    font-size: 16px;\n    line-height: 1.6;\n    color: var(--msosfc-text);\n    max-width: 1000px;\n    margin: 0 auto;\n    padding: 24px 16px 48px;\n    box-sizing: border-box;\n}\n\n#mechanical-structure-safety-factor-calculator *,\n#mechanical-structure-safety-factor-calculator *::before,\n#mechanical-structure-safety-factor-calculator *::after {\n    box-sizing: border-box;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-seo-intro {\n    margin-bottom: 1.5rem;\n    padding: 1.25rem 1.5rem;\n    background: var(--msosfc-primary-bg);\n    border-left: 4px solid var(--msosfc-primary);\n    border-radius: var(--msosfc-radius);\n    font-size: 0.95rem;\n    color: var(--msosfc-text);\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-seo-intro h1 {\n    font-size: 1.5rem;\n    font-weight: 700;\n    color: var(--msosfc-primary-dark);\n    margin: 0 0 0.75rem;\n    line-height: 1.3;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-seo-intro p {\n    margin: 0 0 0.5rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-seo-intro p:last-child {\n    margin-bottom: 0;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-layout {\n    display: flex;\n    flex-direction: column;\n    gap: 1.25rem;\n    align-items: stretch;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-card {\n    background: var(--msosfc-card-bg);\n    border: 1px solid var(--msosfc-border);\n    border-radius: var(--msosfc-radius);\n    box-shadow: var(--msosfc-shadow);\n    padding: 1.5rem;\n    border-top: 3px solid var(--msosfc-primary);\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-card h2 {\n    font-size: 1.1rem;\n    font-weight: 700;\n    color: var(--msosfc-primary);\n    margin: 0 0 1rem;\n    padding-bottom: 0.5rem;\n    border-bottom: 2px solid var(--msosfc-primary-bg);\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-subsection-title {\n    font-size: 0.78rem;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.06em;\n    color: var(--msosfc-text-muted);\n    margin: 1rem 0 0.65rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-input-grid {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr);\n    gap: 0.85rem 1rem;\n}\n\n@media (max-width: 640px) {\n    #mechanical-structure-safety-factor-calculator .msosfc-input-grid {\n        grid-template-columns: 1fr;\n    }\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-full-width {\n    grid-column: 1 \/ -1;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-form-group {\n    display: flex;\n    flex-direction: column;\n    gap: 0.35rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-form-group label {\n    font-size: 0.85rem;\n    font-weight: 600;\n    display: flex;\n    align-items: center;\n    gap: 0.35rem;\n    flex-wrap: wrap;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-tooltip {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: 1.1rem;\n    height: 1.1rem;\n    border-radius: 50%;\n    background: var(--msosfc-primary-bg);\n    color: var(--msosfc-primary);\n    font-size: 0.7rem;\n    font-weight: 700;\n    cursor: help;\n    position: relative;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-tooltip::after {\n    content: attr(data-tip);\n    position: absolute;\n    bottom: calc(100% + 6px);\n    left: 50%;\n    transform: translateX(-50%);\n    width: max-content;\n    max-width: 240px;\n    padding: 0.5rem 0.65rem;\n    background: #1a2332;\n    color: #fff;\n    font-size: 0.75rem;\n    font-weight: 400;\n    line-height: 1.4;\n    border-radius: 6px;\n    opacity: 0;\n    visibility: hidden;\n    pointer-events: none;\n    transition: opacity 0.15s;\n    z-index: 100;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-tooltip:hover::after {\n    opacity: 1;\n    visibility: visible;\n}\n\n#mechanical-structure-safety-factor-calculator input[type=\"number\"],\n#mechanical-structure-safety-factor-calculator input[type=\"text\"],\n#mechanical-structure-safety-factor-calculator select {\n    width: 100%;\n    padding: 0.55rem 0.65rem;\n    border: 1px solid var(--msosfc-border);\n    border-radius: 6px;\n    font-size: 0.9rem;\n    font-family: inherit;\n    background: #fff;\n}\n\n#mechanical-structure-safety-factor-calculator input.msosfc-error,\n#mechanical-structure-safety-factor-calculator select.msosfc-error {\n    border-color: var(--msosfc-danger);\n    background: var(--msosfc-danger-bg);\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-input-with-unit {\n    display: grid;\n    grid-template-columns: 1fr auto;\n    gap: 0.35rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-input-with-unit select {\n    min-width: 4.5rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-unit-toggle {\n    display: flex;\n    gap: 0;\n    border: 1px solid var(--msosfc-border);\n    border-radius: 8px;\n    overflow: hidden;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-unit-toggle label {\n    flex: 1;\n    padding: 0.5rem 0.75rem;\n    text-align: center;\n    font-size: 0.85rem;\n    font-weight: 500;\n    cursor: pointer;\n    background: #fff;\n    border-right: 1px solid var(--msosfc-border);\n    margin: 0;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-unit-toggle label:last-child {\n    border-right: none;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-unit-toggle input {\n    display: none;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-unit-toggle input:checked + span,\n#mechanical-structure-safety-factor-calculator .msosfc-unit-toggle label:has(input:checked) {\n    background: var(--msosfc-primary);\n    color: #fff;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-unit-toggle label span {\n    display: block;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-hidden {\n    display: none !important;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-field-error {\n    font-size: 0.75rem;\n    color: var(--msosfc-danger);\n    min-height: 1rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-actions {\n    display: flex;\n    justify-content: center;\n    margin-top: 1.25rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-btn {\n    padding: 0.65rem 1.5rem;\n    border: none;\n    border-radius: 8px;\n    font-size: 0.95rem;\n    font-weight: 600;\n    font-family: inherit;\n    cursor: pointer;\n    transition: background 0.2s, transform 0.1s;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-btn-primary {\n    background: var(--msosfc-primary);\n    color: #fff;\n    width: 33.333%;\n    min-width: 120px;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-btn-primary:hover {\n    background: var(--msosfc-primary-dark);\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-btn-secondary {\n    background: #fff;\n    color: var(--msosfc-text);\n    border: 1px solid var(--msosfc-border);\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-btn-secondary:hover {\n    background: var(--msosfc-primary-bg);\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-results-hero {\n    text-align: center;\n    padding: 1.25rem;\n    border-radius: var(--msosfc-radius);\n    margin-bottom: 1rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-results-hero.msosfc-safe {\n    background: var(--msosfc-success-bg);\n    border: 1px solid var(--msosfc-success);\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-results-hero.msosfc-caution {\n    background: var(--msosfc-warning-bg);\n    border: 1px solid var(--msosfc-warning);\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-results-hero.msosfc-unsafe {\n    background: var(--msosfc-danger-bg);\n    border: 1px solid var(--msosfc-danger);\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-sf-value {\n    font-size: 2.5rem;\n    font-weight: 800;\n    line-height: 1.1;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-sf-label {\n    font-size: 0.85rem;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.05em;\n    color: var(--msosfc-text-muted);\n    margin-top: 0.25rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-status-badge {\n    display: inline-block;\n    margin-top: 0.5rem;\n    padding: 0.25rem 0.85rem;\n    border-radius: 999px;\n    font-size: 0.8rem;\n    font-weight: 700;\n    text-transform: uppercase;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-safe .msosfc-status-badge {\n    background: var(--msosfc-success);\n    color: #fff;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-caution .msosfc-status-badge {\n    background: var(--msosfc-warning);\n    color: #fff;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-unsafe .msosfc-status-badge {\n    background: var(--msosfc-danger);\n    color: #fff;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-result-grid {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr);\n    gap: 0.65rem 1rem;\n}\n\n@media (max-width: 640px) {\n    #mechanical-structure-safety-factor-calculator .msosfc-result-grid {\n        grid-template-columns: 1fr;\n    }\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-result-item {\n    padding: 0.65rem 0.75rem;\n    background: #f8fafc;\n    border-radius: 6px;\n    border: 1px solid var(--msosfc-border);\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-result-item .msosfc-result-label {\n    font-size: 0.72rem;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n    color: var(--msosfc-text-muted);\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-result-item .msosfc-result-value {\n    font-size: 1rem;\n    font-weight: 700;\n    color: var(--msosfc-text);\n    margin-top: 0.15rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-util-bar-wrap {\n    margin: 1rem 0;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-util-bar-label {\n    display: flex;\n    justify-content: space-between;\n    font-size: 0.8rem;\n    font-weight: 600;\n    margin-bottom: 0.35rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-util-bar {\n    height: 12px;\n    background: #e2e8f0;\n    border-radius: 999px;\n    overflow: hidden;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-util-bar-fill {\n    height: 100%;\n    border-radius: 999px;\n    transition: width 0.3s, background 0.3s;\n    max-width: 100%;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-viz-row {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr);\n    gap: 1rem;\n    margin-top: 1rem;\n}\n\n@media (max-width: 640px) {\n    #mechanical-structure-safety-factor-calculator .msosfc-viz-row {\n        grid-template-columns: 1fr;\n    }\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-viz-box {\n    background: #f8fafc;\n    border: 1px solid var(--msosfc-border);\n    border-radius: var(--msosfc-radius);\n    padding: 0.75rem;\n    text-align: center;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-viz-box h4 {\n    font-size: 0.75rem;\n    font-weight: 700;\n    text-transform: uppercase;\n    color: var(--msosfc-text-muted);\n    margin: 0 0 0.5rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-viz-box svg {\n    max-width: 100%;\n    height: auto;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-gauge-svg {\n    width: 100%;\n    max-width: 200px;\n    margin: 0 auto;\n    display: block;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-warnings {\n    margin-top: 1rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-warning-item {\n    padding: 0.65rem 0.85rem;\n    border-radius: 6px;\n    font-size: 0.85rem;\n    margin-bottom: 0.5rem;\n    border-left: 3px solid;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-warning-item.msosfc-warn-info {\n    background: #eff6ff;\n    border-color: #2563eb;\n    color: #1e40af;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-warning-item.msosfc-warn-caution {\n    background: var(--msosfc-warning-bg);\n    border-color: var(--msosfc-warning);\n    color: #92400e;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-warning-item.msosfc-warn-danger {\n    background: var(--msosfc-danger-bg);\n    border-color: var(--msosfc-danger);\n    color: #991b1b;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-recommendations {\n    margin-top: 1rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-recommendations ul {\n    margin: 0.5rem 0 0;\n    padding-left: 1.25rem;\n    font-size: 0.88rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-recommendations li {\n    margin-bottom: 0.35rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-formulas {\n    margin-top: 1.5rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-formulas summary {\n    cursor: pointer;\n    font-weight: 600;\n    color: var(--msosfc-primary);\n    padding: 0.75rem 0;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-formulas-content {\n    padding: 0.5rem 0 1rem;\n    font-size: 0.88rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-formulas-content p {\n    margin: 0.35rem 0;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-disclaimer {\n    margin-top: 1.5rem;\n    padding: 1rem 1.25rem;\n    background: #f1f5f9;\n    border-radius: var(--msosfc-radius);\n    font-size: 0.82rem;\n    color: var(--msosfc-text-muted);\n    border: 1px solid var(--msosfc-border);\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-disclaimer strong {\n    color: var(--msosfc-text);\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-checkbox-row {\n    display: flex;\n    align-items: center;\n    gap: 0.5rem;\n    font-size: 0.85rem;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-checkbox-row input {\n    width: auto;\n}\n\n#mechanical-structure-safety-factor-calculator .msosfc-js-store,\n#mechanical-structure-safety-factor-calculator .msosfc-js-chunk {\n    display: none !important;\n    visibility: hidden !important;\n    width: 0 !important;\n    height: 0 !important;\n    overflow: hidden !important;\n    position: absolute !important;\n    pointer-events: none !important;\n}\n\n<\/style>\n\n<div id=\"mechanical-structure-safety-factor-calculator\"><div class=\"msosfc-js-store\" aria-hidden=\"true\" hidden><span class=\"msosfc-js-chunk\">KGZ1bmN0aW9uICgpIHsNCiAgICAndXNlIHN0cmljdCc7DQoNCiAgICB2YXIgUk9PVF9JRCA9ICdtZWNoYW5pY2FsLXN0cnVjdHVyZS1zYWZldHktZmFjdG9yLWNhbGN1bGF0b3InOw0KDQogICAgdmFyIE1BVEVSSUFMUyA9IHsNCiAgICAgICAgJ3N0cnVjdHVyYWwtc3RlZWwnOiB7IHN5OiAzNTUsIHN1OiA1MTAsIGxhYmVsOiAnU3RydWN0dXJhbCBTdGVlbCcgfSwNCiAgICAgICAgJ2NhcmJvbi1zdGVlbCc6IHsgc3k6IDI1MCwgc3U6IDQwMCwgbGFiZWw6ICdDYXJib24gU3RlZWwnIH0sDQogICAgICAgICdhbGxveS1zdGVlbCc6IHsgc3k6IDY5MCwgc3U6IDg2MCwgbGFiZWw6ICdBbGxveSBTdGVlbCcgfSwNCiAgICAgICAgJ3N0YWlubGVzcy1zdGVlbCc6IHsgc3k6IDIwNSwgc3U6IDUxNSwgbGFiZWw6ICdTdGFpbmxlc3MgU3RlZWwnIH0sDQogICAgICAgICdhbHVtaW51bS1hbGxveSc6IHsgc3k6IDI3Niwgc3U6IDMxMCwgbGFiZWw6ICdBbHVtaW51bSBBbGxveScgfSwNCiAgICAgICAgJ2Nhc3QtaXJvbic6IHsgc3k6IDIwMCwgc3U6IDMwMCwgbGFiZWw6ICdDYXN0IElyb24nIH0sDQogICAgICAgIGN1c3RvbTogeyBzeTogbnVsbCwgc3U6IG51bGwsIGxhYmVsOiAnQ3VzdG9tIE1hdGVyaWFsJyB9DQogICAgfTsNCg0KICAgIHZhciBERUZBVUxUUyA9IHsNCiAgICAgICAgY2FsY01vZGU6ICdjb21iaW5lZCcsDQogICAgICAgIHN0cnVjdHVyZVR5cGU6ICdtYWNoaW5lLWZyYW1lJywNCiAgICAgICAgbWF0ZXJpYWw6ICdzdHJ1Y3R1cmFsLXN0ZWVsJywNCiAgICAgICAgeWllbGRTdHJlbmd0aDogMzU1LA0KICAgICAgICB1bHRpbWF0ZVN0cmVuZ3RoOiA1MTAsDQogICAgICAgIGFyZWE6IDI1MDAsDQogICAgICAgIHNlY3Rpb25Nb2R1bHVzOiAxNTAwMDAsDQogICAgICAgIG1vbWVudE9mSW5lcnRpYTogJycsDQogICAgICAgIHBvbGFyTW9tZW50OiAnJywNCiAgICAgICAgb3V0ZXJSYWRpdXM6IDI1LA0KICAgICAgICBheGlhbExvYWQ6IDUwLA0KICAgICAgICBheGlhbExvYWRVbml0OiAna04nLA0KICAgICAgICBzaGVhckxvYWQ6IDIwLA0KICAgICAgICBzaGVhckxvYWRVbml0OiAna04nLA0KICAgICAgICBiZW5kaW5nTW9tZW50OiA4LA0KICAgICAgICBiZW5kaW5nTW9tZW50VW5pdDogJ2tOwrdtJywNCiAgICAgICAgdG9ycXVlOiAwLA0KICAgICAgICB0b3JxdWVVbml0OiAnTsK3bScsDQogICAgICAgIGRpcmVjdE5vcm1hbFN0cmVzczogJycsDQogICAgICAgIGRpcmVjdFNoZWFyU3RyZXNzOiAnJywNCiAgICAgICAgc3RyZXNzQ3JpdGVyaW9uOiAndm9uLW1pc2VzJywNCiAgICAgICAgc3RyZW5ndGhSZWY6ICd5aWVsZCcsDQogICAgICAgIGN1c3RvbUxpbWl0OiAnJywNCiAgICAgICAga0R5bmFtaWM6IDEuMiwNCiAgICAgICAga0ltcGFjdDogMS4xLA0KICAgICAgICBrRmF0aWd1ZTogMS4wLA0KICAgICAgICBrVGVtcDogMS4wLA0KICAgICAgICBrVW5jZXJ0YWludHk6IDEuMSwNCiAgICAgICAga1N0cmVzc0NvbmM6IDEuMCwNCiAgICAgICAgdGFyZ2V0U2Y6IDIuMCwNCiAgICAgICAgY29sdW1uTGVuZ3RoOiAnJywNCiAgICAgICAgc2xlbmRlcm5lc3M6ICcnLA0KICAgICAgICBjeWNsaWNMb2FkaW5nOiBmYWxzZSwNCiAgICAgICAgdW5pdFN5c3RlbTogJ21ldHJpYycNCiAgICB9Ow0KDQogICAgdmFyIE5fVE9fS04gPSAwLjAwMTsNCiAgICB2YXIgS05fVE9fTiA9IDEwMDA7DQogICAgdmFyIE5fVE9fTEJGID0gMSAvIDQuNDQ4MjIxNjE1MzsNCiAgICB2YXIgTEJGX1RPX04gPSA0LjQ0ODIyMTYxNTM7DQogICAgdmFyIE1QQV9UT19QU0kgPSAxNDUuMDM3NzM4MDA3Ow0KICAgIHZhciBQU0lfVE9fTVBBID0gMSAvIE1QQV9UT19QU0k7DQogICAgdmFyIE1NMl9UT19JTjIgPSAxIC8gNjQ1LjE2Ow0KICAgIHZhciBJTjJfVE9fTU0yID0gNjQ1LjE2Ow0KICAgIHZhciBNTTNfVE9fSU4zID0gMSAvIDE2Mzg3LjA2NDsNCiAgICB2YXIgSU4zX1RPX01NMyA9IDE2Mzg3LjA2NDsNCiAgICB2YXIgTU00X1RPX0lONCA9IDEgLyA0MTYyMzEuNDI2Ow0KICAgIHZhciBJTjRfVE9fTU00ID0gNDE2MjMxLjQyNjsNCiAgICB2YXIgTk1fVE9fS05NID0gMC4wMDE7DQogICAgdmFyIEtOTV9UT19OTSA9IDEwMDA7DQogICAgdmFyIE5NX1RPX0xCRkZUID0gMC43Mzc1NjIxNDkzOw0KICAgIHZhciBMQkZGVF9UT19OTSA9IDEgLyBOTV9UT19MQkZGVDsNCg0KICAgIHZhciByb290LCBlbHMsIG1hbnVhbE1hdGVyaWFsRWRpdCwgbWFudWFsU3RyZW5ndGhFZGl0Ow0KDQogICAgZnVuY3Rpb24gJChpZCkgew0KICAgICAgICByZXR1cm4gcm9vdC5xdWVyeVNlbGVjdG9yKCcjJyArIGlkKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBwYXJzZU51bSh2KSB7DQogICAgICAgIGlmICh2ID09PSAnJyB8fCB2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7DQogICAgICAgIHZhciBuID0gcGFyc2VGbG9hdChTdHJpbmcodikucmVwbGFjZSgnLCcsICcuJykpOw0KICAgICAgICByZXR1cm4gaXNOYU4obikgPyBudWxsIDogbjsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBmbXQodiwgZCkgew0KICAgICAgICBpZiAodiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQgfHwgIWlzRmluaXRlKHYpKSByZXR1cm4gJ+KAlCc7DQogICAgICAgIHJldHVybiB2LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsNCiAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCwNCiAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogZCAhPT0gdW5kZWZpbmVkID8gZCA6IDINCiAgICAgICAgfSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gaXNNZXRyaWMoKSB7DQogICAgICAgIHJldHVybiBlbHMudW5pdFN5c3RlbS52YWx1ZSA9PT0gJ21ldHJpYyc7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gc3RyZXNzVW5pdCgpIHsNCiAgICAgICAgcmV0dXJuIGlzTWV0cmljKCkgPyAnTVBhJyA6ICdwc2knOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHRvTWV0cmljU3RyZXNzKHYsIHVuaXQpIHsNCiAgICAgICAgaWYgKHVuaXQgPT09ICdNUGEnKSByZXR1cm4gdjsNCiAgICAgICAgcmV0dXJuIHYgKiBQU0lfVE9fTVBBOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGZyb21NZXRyaWNTdHJlc3ModiwgdW5pdCkgew0KICAgICAgICBpZiAodW5pdCA9PT0gJ01QYScpIHJldHVybiB2Ow0KICAgICAgICByZXR1cm4gdiAqIE1QQV9UT19QU0k7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gdG9NZXRyaWNGb3JjZSh2LCB1bml0KSB7DQogICAgICAgIGlmICh1bml0ID09PSAnTicpIHJldHVybiB2Ow0KICAgICAgICBpZiAodW5pdCA9PT0gJ2tOJykgcmV0dXJuIHYgKiBLTl9UT19OOw0KICAgICAgICByZXR1cm4gdiAqIExCRl9UT19OOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHRvTWV0cmljQXJlYSh2LCB1bml0KSB7DQogICAgICAgIGlmICh1bml0ID09PSAnbW3CsicpIHJldHVybiB2Ow0KICAgICAgICByZXR1cm4gdiAqIElOMl9UT19NTTI7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gdG9NZXRyaWNTZWN0aW9uTW9kKHYsIHVuaXQpIHsNCiAgICAgICAgaWYgKHVuaXQgPT09ICdtbcKzJykgcmV0dXJuIHY7DQogICAgICAgIHJldHVybiB2ICogSU4zX1RPX01NMzsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiB0b01ldHJpY0luZXJ0aWEodiwgdW5pdCkgew0KICAgICAgICBpZiAodW5pdCA9PT0gJ21t4oG0JykgcmV0dXJuIHY7DQogICAgICAgIHJldHVybiB2ICogSU40X1RPX01NNDsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiB0b01ldHJpY01vbWVudCh2LCB1bml0KSB7DQogICAgICAgIGlmICh1bml0ID09PSAnTsK3bScpIHJldHVybiB2Ow0KICAgICAgICBpZiAodW5pdCA9PT0gJ2tOwrdtJykgcmV0dXJuIHYgKiBLTk1fVE9fTk07DQogICAgICAgIHJldHVybiB2ICogTEJGRlRfVE9fTk07DQogICAgfQ0KDQogICAgZnVuY3Rpb24gdG9NZXRyaWNMZW5ndGgodiwgdW5pdCkgew0KICAgICAgICBpZiAodW5pdCA9PT0gJ21tJykgcmV0dXJuIHY7DQogICAgICAgIHJldHVybiB2ICogMjUuNDsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjb252ZXJ0RGlzcGxheVN0cmVzcyhtcGEpIHsNCiAgICAgICAgcmV0dXJuIGlzTWV0cmljKCkgPyBtcGEgOiBtcGEgKiBNUEFfVE9fUFNJOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHNldFZpc2libGUoc2VsZWN0b3IsIHNob3cpIHsNCiAgICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgew0KICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgnbXNvc2ZjLWhpZGRlbicsICFzaG93KTsNCiAgICAgICAgfSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY2xlYXJFcnJvcnMoKSB7DQogICAgICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbCgnLm1zb3NmYy1lcnJvcicpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7DQogICAgICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdtc29zZmMtZXJyb3InKTsNCiAgICAgICAgfSk7DQogICAgICAgIHJvb3QucXVlcnlTZWxlY3RvckFs<\/span><span class=\"msosfc-js-chunk\">bCgnLm1zb3NmYy1maWVsZC1lcnJvcicpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7DQogICAgICAgICAgICBlbC50ZXh0Q29udGVudCA9ICcnOw0KICAgICAgICB9KTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBzZXRGaWVsZEVycm9yKGlucHV0SWQsIGVycklkLCBtc2cpIHsNCiAgICAgICAgdmFyIGlucHV0ID0gJChpbnB1dElkKTsNCiAgICAgICAgdmFyIGVyciA9ICQoZXJySWQpOw0KICAgICAgICBpZiAoaW5wdXQpIGlucHV0LmNsYXNzTGlzdC5hZGQoJ21zb3NmYy1lcnJvcicpOw0KICAgICAgICBpZiAoZXJyKSBlcnIudGV4dENvbnRlbnQgPSBtc2cgfHwgJyc7DQogICAgICAgIHJldHVybiAhIW1zZzsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBwcmluY2lwYWxTdHJlc3NlczJEKHN4LCBzeSwgdHh5KSB7DQogICAgICAgIHZhciBhdmcgPSAoc3ggKyBzeSkgLyAyOw0KICAgICAgICB2YXIgcmFkID0gTWF0aC5zcXJ0KE1hdGgucG93KChzeCAtIHN5KSAvIDIsIDIpICsgdHh5ICogdHh5KTsNCiAgICAgICAgcmV0dXJuIHsgczE6IGF2ZyArIHJhZCwgczI6IGF2ZyAtIHJhZCwgczM6IDAgfTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiB2b25NaXNlczJEKHN4LCBzeSwgdHh5KSB7DQogICAgICAgIHJldHVybiBNYXRoLnNxcnQoc3ggKiBzeCAtIHN4ICogc3kgKyBzeSAqIHN5ICsgMyAqIHR4eSAqIHR4eSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gdm9uTWlzZXNDb21iaW5lZChzaWdtYSwgdGF1KSB7DQogICAgICAgIHJldHVybiBNYXRoLnNxcnQoc2lnbWEgKiBzaWdtYSArIDMgKiB0YXUgKiB0YXUpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHRyZXNjYTJEKHN4LCBzeSwgdHh5KSB7DQogICAgICAgIHZhciBwID0gcHJpbmNpcGFsU3RyZXNzZXMyRChzeCwgc3ksIHR4eSk7DQogICAgICAgIHZhciBhcnIgPSBbcC5zMSwgcC5zMiwgcC5zM10uc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYiAtIGE7IH0pOw0KICAgICAgICByZXR1cm4gYXJyWzBdIC0gYXJyWzJdOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNhbGNCZW5kaW5nU3RyZXNzKE0sIFosIEksIGMpIHsNCiAgICAgICAgaWYgKFogPiAwKSByZXR1cm4gTSAvIFo7DQogICAgICAgIGlmIChJID4gMCAmJiBjID4gMCkgcmV0dXJuIE0gKiBjIC8gSTsNCiAgICAgICAgcmV0dXJuIG51bGw7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gdXBkYXRlRmllbGRWaXNpYmlsaXR5KCkgew0KICAgICAgICB2YXIgbW9kZSA9IGVscy5jYWxjTW9kZS52YWx1ZTsNCiAgICAgICAgdmFyIGlzQXhpYWwgPSBtb2RlID09PSAnYXhpYWwnOw0KICAgICAgICB2YXIgaXNTaGVhciA9IG1vZGUgPT09ICdzaGVhcic7DQogICAgICAgIHZhciBpc0JlbmRpbmcgPSBtb2RlID09PSAnYmVuZGluZyc7DQogICAgICAgIHZhciBpc1RvcnNpb24gPSBtb2RlID09PSAndG9yc2lvbic7DQogICAgICAgIHZhciBpc0NvbWJpbmVkID0gbW9kZSA9PT0gJ2NvbWJpbmVkJzsNCiAgICAgICAgdmFyIGlzQ3VzdG9tID0gbW9kZSA9PT0gJ2N1c3RvbSc7DQoNCiAgICAgICAgc2V0VmlzaWJsZSgnLm1zb3NmYy1maWVsZC1heGlhbCcsIGlzQXhpYWwgfHwgaXNDb21iaW5lZCk7DQogICAgICAgIHNldFZpc2libGUoJy5tc29zZmMtZmllbGQtc2hlYXInLCBpc1NoZWFyIHx8IGlzQ29tYmluZWQpOw0KICAgICAgICBzZXRWaXNpYmxlKCcubXNvc2ZjLWZpZWxkLWJlbmRpbmcnLCBpc0JlbmRpbmcgfHwgaXNDb21iaW5lZCk7DQogICAgICAgIHNldFZpc2libGUoJy5tc29zZmMtZmllbGQtdG9yc2lvbicsIGlzVG9yc2lvbiB8fCBpc0NvbWJpbmVkKTsNCiAgICAgICAgc2V0VmlzaWJsZSgnLm1zb3NmYy1maWVsZC1jdXN0b20tc3RyZXNzJywgaXNDdXN0b20pOw0KICAgICAgICBzZXRWaXNpYmxlKCcubXNvc2ZjLWZpZWxkLWFyZWEnLCAhaXNDdXN0b20gJiYgKGlzQXhpYWwgfHwgaXNTaGVhciB8fCBpc0NvbWJpbmVkKSk7DQogICAgICAgIHNldFZpc2libGUoJy5tc29zZmMtZmllbGQtc2VjdGlvbi1tb2QnLCBpc0JlbmRpbmcgfHwgaXNDb21iaW5lZCk7DQogICAgICAgIHNldFZpc2libGUoJy5tc29zZmMtZmllbGQtaW5lcnRpYScsIGlzQmVuZGluZyB8fCBpc0NvbWJpbmVkKTsNCiAgICAgICAgc2V0VmlzaWJsZSgnLm1zb3NmYy1maWVsZC1wb2xhcicsIGlzVG9yc2lvbiB8fCBpc0NvbWJpbmVkKTsNCiAgICAgICAgc2V0VmlzaWJsZSgnLm1zb3NmYy1maWVsZC1yYWRpdXMnLCBpc1RvcnNpb24gfHwgaXNDb21iaW5lZCk7DQogICAgICAgIHNldFZpc2libGUoJy5tc29zZmMtZmllbGQtY3JpdGVyaW9uJywgaXNDb21iaW5lZCB8fCBpc0N1c3RvbSk7DQogICAgICAgIHNldFZpc2libGUoJy5tc29zZmMtZmllbGQtYnVja2xpbmcnLCBpc0F4aWFsIHx8IGlzQ29tYmluZWQpOw0KICAgICAgICBzZXRWaXNpYmxlKCcubXNvc2ZjLWZpZWxkLWN5Y2xpYycsIHRydWUpOw0KDQogICAgICAgIHZhciBjdXN0b21TdHJlbmd0aCA9IGVscy5zdHJlbmd0aFJlZi52YWx1ZSA9PT0gJ2N1c3RvbSc7DQogICAgICAgIGVscy5jdXN0b21MaW1pdEdyb3VwLmNsYXNzTGlzdC50b2dnbGUoJ21zb3NmYy1oaWRkZW4nLCAhY3VzdG9tU3RyZW5ndGgpOw0KDQogICAgICAgIHZhciB3ZWxkZWQgPSBlbHMuc3RydWN0dXJlVHlwZS52YWx1ZSA9PT0gJ3dlbGRlZCc7DQogICAgICAgIGVscy53ZWxkTm90ZS5jbGFzc0xpc3QudG9nZ2xlKCdtc29zZmMtaGlkZGVuJywgIXdlbGRlZCk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gYXBwbHlNYXRlcmlhbFByZXNldCgpIHsNCiAgICAgICAgaWYgKG1hbnVhbE1hdGVyaWFsRWRpdCkgcmV0dXJuOw0KICAgICAgICB2YXIgbWF0ID0gTUFURVJJQUxTW2Vscy5tYXRlcmlhbC52YWx1ZV07DQogICAgICAgIGlmICghbWF0IHx8IG1hdC5zeSA9PT0gbnVsbCkgcmV0dXJuOw0KICAgICAgICBlbHMueWllbGRTdHJlbmd0aC52YWx1ZSA9IGZtdChjb252ZXJ0RGlzcGxheVN0cmVzcyhtYXQuc3kpLCAxKTsNCiAgICAgICAgaWYgKG1hdC5zdSAhPT0gbnVsbCkgew0KICAgICAgICAgICAgZWxzLnVsdGltYXRlU3RyZW5ndGgudmFsdWUgPSBmbXQoY29udmVydERpc3BsYXlTdHJlc3MobWF0LnN1KSwgMSk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBmdW5jdGlvbiB1cGRhdGVVbml0TGFiZWxzKCkgew0KICAgICAgICB2YXIgbWV0cmljID0gaXNNZXRyaWMoKTsNCiAgICAgICAgdmFyIHN1ID0gbWV0cmljID8gJ01QYScgOiAncHNpJzsNCiAgICAgICAgdmFyIGF1ID0gbWV0cmljID8gJ21twrInIDogJ2luwrInOw0KICAgICAgICB2YXIgenUgPSBtZXRyaWMgPyAnbW3CsycgOiAnaW7Csyc7DQogICAgICAgIHZhciBpdSA9IG1ldHJpYyA\/ICdtbeKBtCcgOiAnaW7igbQnOw0KICAgICAgICB2YXIgbHUgPSBtZXRyaWMgPyAnbW0nIDogJ2luJzsNCg0KICAgICAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW1zb3NmYy11bml0PSJzdHJlc3MiXScpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7DQogICAgICAgICAgICBlbC50ZXh0Q29udGVudCA9IHN1Ow0KICAgICAgICB9KTsNCiAgICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tc29zZmMtdW5pdD0iYXJlYSJdJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsNCiAgICAgICAgICAgIGVsLnRleHRDb250ZW50ID0gYXU7DQogICAgICAgIH0pOw0KICAgICAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW1zb3NmYy11bml0PSJzZWN0aW9uIl0nKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgew0KICAgICAgICAgICAgZWwudGV4dENvbnRlbnQgPSB6dTsNCiAgICAgICAgfSk7DQogICAgICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbXNvc2ZjLXVuaXQ9ImluZXJ0aWEiXScpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7DQogICAgICAgICAgICBlbC50ZXh0Q29udGVudCA9IGl1Ow0KICAgICAgICB9KTsNCiAgICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tc29zZmMtdW5pdD0ibGVuZ3RoIl0nKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgew0KICAgICAgICAgICAgZWwudGV4dENvbnRlbnQgPSBsdTsNCiAgICAgICAgfSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY29udmVydElucHV0c09uVW5pdFN3aXRjaCh0b01ldHJpY0ZsYWcpIHsNCiAgICAgICAgdmFyIGZpZWxkcyA9IFsNCiAgICAgICAgICAgIHsgZWw6IGVscy55aWVsZFN0cmVuZ3RoLCBtcGE6IHRydWUgfSwNCiAgICAgICAgICAgIHsgZWw6IGVscy51bHRpbWF0ZVN0cmVuZ3RoLCBtcGE6IHRydWUgfSwNCiAgICAgICAgICAgIHsgZWw6IGVscy5hcmVhLCBtbTI6IHRydWUgfSwNCiAgICAgICAgICAgIHsgZWw6IGVscy5zZWN0aW9uTW9kdWx1cywgbW0zOiB0cnVlIH0sDQogICAgICAgICAgICB7IGVsOiBlbHMubW9tZW50T2ZJbmVydGlhLCBtbTQ6IHRydWUgfSwNCiAgICAgICAgICAgIHsgZWw6IGVscy5wb2xhck1vbWVudCwgbW00OiB0cnVlIH0sDQogICAgICAgICAgICB7IGVsOiBlbHMub3V0ZXJSYWRpdXMsIG1tOiB0cnVlIH0sDQogICAgICAgICAgICB7IGVs<\/span><span class=\"msosfc-js-chunk\">OiBlbHMuZGlyZWN0Tm9ybWFsU3RyZXNzLCBtcGE6IHRydWUgfSwNCiAgICAgICAgICAgIHsgZWw6IGVscy5kaXJlY3RTaGVhclN0cmVzcywgbXBhOiB0cnVlIH0sDQogICAgICAgICAgICB7IGVsOiBlbHMuY3VzdG9tTGltaXQsIG1wYTogdHJ1ZSB9LA0KICAgICAgICAgICAgeyBlbDogZWxzLmNvbHVtbkxlbmd0aCwgbW06IHRydWUgfQ0KICAgICAgICBdOw0KDQogICAgICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7DQogICAgICAgICAgICB2YXIgdiA9IHBhcnNlTnVtKGYuZWwudmFsdWUpOw0KICAgICAgICAgICAgaWYgKHYgPT09IG51bGwpIHJldHVybjsNCiAgICAgICAgICAgIGlmIChmLm1wYSkgew0KICAgICAgICAgICAgICAgIGYuZWwudmFsdWUgPSBmbXQodG9NZXRyaWNGbGFnID8gdiAqIFBTSV9UT19NUEEgOiB2ICogTVBBX1RPX1BTSSwgMik7DQogICAgICAgICAgICB9IGVsc2UgaWYgKGYubW0yKSB7DQogICAgICAgICAgICAgICAgZi5lbC52YWx1ZSA9IGZtdCh0b01ldHJpY0ZsYWcgPyB2ICogSU4yX1RPX01NMiA6IHYgKiBNTTJfVE9fSU4yLCAyKTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoZi5tbTMpIHsNCiAgICAgICAgICAgICAgICBmLmVsLnZhbHVlID0gZm10KHRvTWV0cmljRmxhZyA\/IHYgKiBJTjNfVE9fTU0zIDogdiAqIE1NM19UT19JTjMsIDIpOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChmLm1tNCkgew0KICAgICAgICAgICAgICAgIGYuZWwudmFsdWUgPSBmbXQodG9NZXRyaWNGbGFnID8gdiAqIElONF9UT19NTTQgOiB2ICogTU00X1RPX0lONCwgMik7DQogICAgICAgICAgICB9IGVsc2UgaWYgKGYubW0pIHsNCiAgICAgICAgICAgICAgICBmLmVsLnZhbHVlID0gZm10KHRvTWV0cmljRmxhZyA\/IHYgKiAyNS40IDogdiAvIDI1LjQsIDIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCg0KICAgICAgICBpZiAodG9NZXRyaWNGbGFnKSB7DQogICAgICAgICAgICBjb252ZXJ0Rm9yY2VGaWVsZChlbHMuYXhpYWxMb2FkLCBlbHMuYXhpYWxMb2FkVW5pdCwgdHJ1ZSk7DQogICAgICAgICAgICBjb252ZXJ0Rm9yY2VGaWVsZChlbHMuc2hlYXJMb2FkLCBlbHMuc2hlYXJMb2FkVW5pdCwgdHJ1ZSk7DQogICAgICAgICAgICBjb252ZXJ0TW9tZW50RmllbGQoZWxzLmJlbmRpbmdNb21lbnQsIGVscy5iZW5kaW5nTW9tZW50VW5pdCwgdHJ1ZSk7DQogICAgICAgICAgICBjb252ZXJ0TW9tZW50RmllbGQoZWxzLnRvcnF1ZSwgZWxzLnRvcnF1ZVVuaXQsIHRydWUpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgY29udmVydEZvcmNlRmllbGQoZWxzLmF4aWFsTG9hZCwgZWxzLmF4aWFsTG9hZFVuaXQsIGZhbHNlKTsNCiAgICAgICAgICAgIGNvbnZlcnRGb3JjZUZpZWxkKGVscy5zaGVhckxvYWQsIGVscy5zaGVhckxvYWRVbml0LCBmYWxzZSk7DQogICAgICAgICAgICBjb252ZXJ0TW9tZW50RmllbGQoZWxzLmJlbmRpbmdNb21lbnQsIGVscy5iZW5kaW5nTW9tZW50VW5pdCwgZmFsc2UpOw0KICAgICAgICAgICAgY29udmVydE1vbWVudEZpZWxkKGVscy50b3JxdWUsIGVscy50b3JxdWVVbml0LCBmYWxzZSk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjb252ZXJ0Rm9yY2VGaWVsZChpbnB1dCwgdW5pdFNlbGVjdCwgdG9NZXRyaWNGbGFnKSB7DQogICAgICAgIHZhciB2ID0gcGFyc2VOdW0oaW5wdXQudmFsdWUpOw0KICAgICAgICBpZiAodiA9PT0gbnVsbCkgcmV0dXJuOw0KICAgICAgICB2YXIgdW5pdCA9IHVuaXRTZWxlY3QudmFsdWU7DQogICAgICAgIHZhciBuID0gdG9NZXRyaWNGb3JjZSh2LCB1bml0KTsNCiAgICAgICAgaWYgKHRvTWV0cmljRmxhZykgew0KICAgICAgICAgICAgdW5pdFNlbGVjdC5pbm5lckhUTUwgPSAnPG9wdGlvbiB2YWx1ZT0iTiI+Tjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImtOIj5rTjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImxiZiI+bGJmPC9vcHRpb24+JzsNCiAgICAgICAgICAgIGlmIChuID49IDEwMDApIHsNCiAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IGZtdChuICogTl9UT19LTiwgNCk7DQogICAgICAgICAgICAgICAgdW5pdFNlbGVjdC52YWx1ZSA9ICdrTic7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gZm10KG4sIDIpOw0KICAgICAgICAgICAgICAgIHVuaXRTZWxlY3QudmFsdWUgPSAnTic7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB1bml0U2VsZWN0LmlubmVySFRNTCA9ICc8b3B0aW9uIHZhbHVlPSJsYmYiPmxiZjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9Ik4iPk48L29wdGlvbj48b3B0aW9uIHZhbHVlPSJrTiI+a048L29wdGlvbj4nOw0KICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBmbXQobiAqIE5fVE9fTEJGLCAyKTsNCiAgICAgICAgICAgIHVuaXRTZWxlY3QudmFsdWUgPSAnbGJmJzsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNvbnZlcnRNb21lbnRGaWVsZChpbnB1dCwgdW5pdFNlbGVjdCwgdG9NZXRyaWNGbGFnKSB7DQogICAgICAgIHZhciB2ID0gcGFyc2VOdW0oaW5wdXQudmFsdWUpOw0KICAgICAgICBpZiAodiA9PT0gbnVsbCkgcmV0dXJuOw0KICAgICAgICB2YXIgdW5pdCA9IHVuaXRTZWxlY3QudmFsdWU7DQogICAgICAgIHZhciBubSA9IHRvTWV0cmljTW9tZW50KHYsIHVuaXQpOw0KICAgICAgICBpZiAodG9NZXRyaWNGbGFnKSB7DQogICAgICAgICAgICB1bml0U2VsZWN0LmlubmVySFRNTCA9ICc8b3B0aW9uIHZhbHVlPSJOwrdtIj5OwrdtPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ia07Ct20iPmtOwrdtPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ibGJmwrdmdCI+bGJmwrdmdDwvb3B0aW9uPic7DQogICAgICAgICAgICBpZiAobm0gPj0gMTAwMCkgew0KICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gZm10KG5tICogTk1fVE9fS05NLCA0KTsNCiAgICAgICAgICAgICAgICB1bml0U2VsZWN0LnZhbHVlID0gJ2tOwrdtJzsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBmbXQobm0sIDIpOw0KICAgICAgICAgICAgICAgIHVuaXRTZWxlY3QudmFsdWUgPSAnTsK3bSc7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB1bml0U2VsZWN0LmlubmVySFRNTCA9ICc8b3B0aW9uIHZhbHVlPSJsYmbCt2Z0Ij5sYmbCt2Z0PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iTsK3bSI+TsK3bTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImtOwrdtIj5rTsK3bTwvb3B0aW9uPic7DQogICAgICAgICAgICBpbnB1dC52YWx1ZSA9IGZtdChubSAqIE5NX1RPX0xCRkZULCAyKTsNCiAgICAgICAgICAgIHVuaXRTZWxlY3QudmFsdWUgPSAnbGJmwrdmdCc7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBmdW5jdGlvbiB2YWxpZGF0ZUlucHV0cyhkYXRhKSB7DQogICAgICAgIGNsZWFyRXJyb3JzKCk7DQogICAgICAgIHZhciBoYXNFcnJvciA9IGZhbHNlOw0KDQogICAgICAgIGlmIChkYXRhLnN5IDw9IDApIGhhc0Vycm9yID0gc2V0RmllbGRFcnJvcignbXNvc2ZjWWllbGRTdHJlbmd0aCcsICdtc29zZmNZaWVsZEVycicsICdZaWVsZCBzdHJlbmd0aCBtdXN0IGJlIHBvc2l0aXZlLicpIHx8IGhhc0Vycm9yOw0KICAgICAgICBpZiAoZGF0YS5hcmVhICE9PSBudWxsICYmIGRhdGEuYXJlYSA8PSAwKSBoYXNFcnJvciA9IHNldEZpZWxkRXJyb3IoJ21zb3NmY0FyZWEnLCAnbXNvc2ZjQXJlYUVycicsICdBcmVhIG11c3QgYmUgcG9zaXRpdmUuJykgfHwgaGFzRXJyb3I7DQogICAgICAgIGlmIChkYXRhLlogIT09IG51bGwgJiYgZGF0YS5aIDw9IDApIGhhc0Vycm9yID0gc2V0RmllbGRFcnJvcignbXNvc2ZjU2VjdGlvbk1vZHVsdXMnLCAnbXNvc2ZjWkVycicsICdTZWN0aW9uIG1vZHVsdXMgbXVzdCBiZSBwb3NpdGl2ZS4nKSB8fCBoYXNFcnJvcjsNCiAgICAgICAgaWYgKGRhdGEuSSAhPT0gbnVsbCAmJiBkYXRhLkkgPD0gMCkgaGFzRXJyb3IgPSBzZXRGaWVsZEVycm9yKCdtc29zZmNNb21lbnRPZkluZXJ0aWEnLCAnbXNvc2ZjSUVycicsICdNb21lbnQgb2YgaW5lcnRpYSBtdXN0IGJlIHBvc2l0aXZlLicpIHx8IGhhc0Vycm9yOw0KICAgICAgICBpZiAoZGF0YS5KICE9PSBudWxsICYmIGRhdGEuSiA8PSAwKSBoYXNFcnJvciA9IHNldEZpZWxkRXJyb3IoJ21zb3NmY1BvbGFyTW9tZW50JywgJ21zb3NmY0pFcnInLCAnUG9sYXIgbW9tZW50IG11c3QgYmUgcG9zaXRpdmUuJykgfHwgaGFzRXJyb3I7DQogICAgICAgIGlmIChkYXRhLnIgIT09IG51bGwgJiYgZGF0YS5yIDw9IDApIGhhc0Vycm9yID0gc2V0RmllbGRFcnJvcignbXNvc2ZjT3V0ZXJSYWRpdXMnLCAnbXNvc2ZjUkVycicsICdPdXRlciByYWRpdXMgbXVzdCBiZSBwb3NpdGl2ZS4nKSB8fCBoYXNFcnJvcjsNCg0KICAgICAgICB2YXIgZmFjdG9yRmllbGRzID0gWw0KICAgICAgICAgICAgeyBrZXk6ICdrRHluYW1pYycsIGlkOiAnbXNvc2ZjS0R5bmFtaWMnIH0sDQogICAg<\/span><span class=\"msosfc-js-chunk\">ICAgICAgICB7IGtleTogJ2tJbXBhY3QnLCBpZDogJ21zb3NmY0tJbXBhY3QnIH0sDQogICAgICAgICAgICB7IGtleTogJ2tGYXRpZ3VlJywgaWQ6ICdtc29zZmNLRmF0aWd1ZScgfSwNCiAgICAgICAgICAgIHsga2V5OiAna1RlbXAnLCBpZDogJ21zb3NmY0tUZW1wJyB9LA0KICAgICAgICAgICAgeyBrZXk6ICdrVW5jZXJ0YWludHknLCBpZDogJ21zb3NmY0tVbmNlcnRhaW50eScgfSwNCiAgICAgICAgICAgIHsga2V5OiAna1N0cmVzc0NvbmMnLCBpZDogJ21zb3NmY0tTdHJlc3NDb25jJyB9DQogICAgICAgIF07DQogICAgICAgIGZhY3RvckZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7DQogICAgICAgICAgICBpZiAoZGF0YVtmLmtleV0gPD0gMCkgew0KICAgICAgICAgICAgICAgIGhhc0Vycm9yID0gc2V0RmllbGRFcnJvcihmLmlkLCAnJywgJ0ZhY3RvciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLicpIHx8IGhhc0Vycm9yOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCg0KICAgICAgICBpZiAoZGF0YS50YXJnZXRTZiA8PSAwKSBoYXNFcnJvciA9IHNldEZpZWxkRXJyb3IoJ21zb3NmY1RhcmdldFNmJywgJ21zb3NmY1RhcmdldFNmRXJyJywgJ1RhcmdldCBzYWZldHkgZmFjdG9yIG11c3QgYmUgcG9zaXRpdmUuJykgfHwgaGFzRXJyb3I7DQogICAgICAgIGlmIChkYXRhLnN0cmVuZ3RoUmVmID09PSAnY3VzdG9tJyAmJiAoZGF0YS5jdXN0b21MaW1pdCA9PT0gbnVsbCB8fCBkYXRhLmN1c3RvbUxpbWl0IDw9IDApKSB7DQogICAgICAgICAgICBoYXNFcnJvciA9IHNldEZpZWxkRXJyb3IoJ21zb3NmY0N1c3RvbUxpbWl0JywgJ21zb3NmY0N1c3RvbUxpbWl0RXJyJywgJ0N1c3RvbSBsaW1pdCBtdXN0IGJlIHBvc2l0aXZlLicpIHx8IGhhc0Vycm9yOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuICFoYXNFcnJvcjsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiByZWFkSW5wdXRzKCkgew0KICAgICAgICB2YXIgc3kgPSB0b01ldHJpY1N0cmVzcyhwYXJzZU51bShlbHMueWllbGRTdHJlbmd0aC52YWx1ZSkgfHwgMCwgaXNNZXRyaWMoKSA\/ICdNUGEnIDogJ3BzaScpOw0KICAgICAgICB2YXIgc3VWYWwgPSBwYXJzZU51bShlbHMudWx0aW1hdGVTdHJlbmd0aC52YWx1ZSk7DQogICAgICAgIHZhciBzdSA9IHN1VmFsICE9PSBudWxsID8gdG9NZXRyaWNTdHJlc3Moc3VWYWwsIGlzTWV0cmljKCkgPyAnTVBhJyA6ICdwc2knKSA6IG51bGw7DQogICAgICAgIHZhciBhcmVhVmFsID0gcGFyc2VOdW0oZWxzLmFyZWEudmFsdWUpOw0KICAgICAgICB2YXIgYXJlYSA9IGFyZWFWYWwgIT09IG51bGwgPyB0b01ldHJpY0FyZWEoYXJlYVZhbCwgaXNNZXRyaWMoKSA\/ICdtbcKyJyA6ICdpbsKyJykgOiBudWxsOw0KICAgICAgICB2YXIgelZhbCA9IHBhcnNlTnVtKGVscy5zZWN0aW9uTW9kdWx1cy52YWx1ZSk7DQogICAgICAgIHZhciBaID0gelZhbCAhPT0gbnVsbCA\/IHRvTWV0cmljU2VjdGlvbk1vZCh6VmFsLCBpc01ldHJpYygpID8gJ21twrMnIDogJ2luwrMnKSA6IG51bGw7DQogICAgICAgIHZhciBpVmFsID0gcGFyc2VOdW0oZWxzLm1vbWVudE9mSW5lcnRpYS52YWx1ZSk7DQogICAgICAgIHZhciBJID0gaVZhbCAhPT0gbnVsbCA\/IHRvTWV0cmljSW5lcnRpYShpVmFsLCBpc01ldHJpYygpID8gJ21t4oG0JyA6ICdpbuKBtCcpIDogbnVsbDsNCiAgICAgICAgdmFyIGpWYWwgPSBwYXJzZU51bShlbHMucG9sYXJNb21lbnQudmFsdWUpOw0KICAgICAgICB2YXIgSiA9IGpWYWwgIT09IG51bGwgPyB0b01ldHJpY0luZXJ0aWEoalZhbCwgaXNNZXRyaWMoKSA\/ICdtbeKBtCcgOiAnaW7igbQnKSA6IG51bGw7DQogICAgICAgIHZhciByVmFsID0gcGFyc2VOdW0oZWxzLm91dGVyUmFkaXVzLnZhbHVlKTsNCiAgICAgICAgdmFyIHIgPSByVmFsICE9PSBudWxsID8gdG9NZXRyaWNMZW5ndGgoclZhbCwgaXNNZXRyaWMoKSA\/ICdtbScgOiAnaW4nKSA6IG51bGw7DQogICAgICAgIHZhciBjVmFsID0gcGFyc2VOdW0oZWxzLmRpc3RUb0ZpYmVyLnZhbHVlKTsNCiAgICAgICAgdmFyIGMgPSBjVmFsICE9PSBudWxsID8gdG9NZXRyaWNMZW5ndGgoY1ZhbCwgaXNNZXRyaWMoKSA\/ICdtbScgOiAnaW4nKSA6IG51bGw7DQoNCiAgICAgICAgdmFyIGN1c3RvbUxpbWl0VmFsID0gcGFyc2VOdW0oZWxzLmN1c3RvbUxpbWl0LnZhbHVlKTsNCiAgICAgICAgdmFyIGN1c3RvbUxpbWl0ID0gY3VzdG9tTGltaXRWYWwgIT09IG51bGwgPyB0b01ldHJpY1N0cmVzcyhjdXN0b21MaW1pdFZhbCwgaXNNZXRyaWMoKSA\/ICdNUGEnIDogJ3BzaScpIDogbnVsbDsNCg0KICAgICAgICByZXR1cm4gew0KICAgICAgICAgICAgbW9kZTogZWxzLmNhbGNNb2RlLnZhbHVlLA0KICAgICAgICAgICAgc3RydWN0dXJlVHlwZTogZWxzLnN0cnVjdHVyZVR5cGUudmFsdWUsDQogICAgICAgICAgICBzeTogc3ksDQogICAgICAgICAgICBzdTogc3UsDQogICAgICAgICAgICBhcmVhOiBhcmVhLA0KICAgICAgICAgICAgWjogWiwNCiAgICAgICAgICAgIEk6IEksDQogICAgICAgICAgICBKOiBKLA0KICAgICAgICAgICAgcjogciwNCiAgICAgICAgICAgIGM6IGMsDQogICAgICAgICAgICBGOiB0b01ldHJpY0ZvcmNlKHBhcnNlTnVtKGVscy5heGlhbExvYWQudmFsdWUpIHx8IDAsIGVscy5heGlhbExvYWRVbml0LnZhbHVlKSwNCiAgICAgICAgICAgIFY6IHRvTWV0cmljRm9yY2UocGFyc2VOdW0oZWxzLnNoZWFyTG9hZC52YWx1ZSkgfHwgMCwgZWxzLnNoZWFyTG9hZFVuaXQudmFsdWUpLA0KICAgICAgICAgICAgTTogdG9NZXRyaWNNb21lbnQocGFyc2VOdW0oZWxzLmJlbmRpbmdNb21lbnQudmFsdWUpIHx8IDAsIGVscy5iZW5kaW5nTW9tZW50VW5pdC52YWx1ZSksDQogICAgICAgICAgICBUOiB0b01ldHJpY01vbWVudChwYXJzZU51bShlbHMudG9ycXVlLnZhbHVlKSB8fCAwLCBlbHMudG9ycXVlVW5pdC52YWx1ZSksDQogICAgICAgICAgICBkaXJlY3RTaWdtYTogcGFyc2VOdW0oZWxzLmRpcmVjdE5vcm1hbFN0cmVzcy52YWx1ZSkgIT09IG51bGwNCiAgICAgICAgICAgICAgICA\/IHRvTWV0cmljU3RyZXNzKHBhcnNlTnVtKGVscy5kaXJlY3ROb3JtYWxTdHJlc3MudmFsdWUpLCBpc01ldHJpYygpID8gJ01QYScgOiAncHNpJykgOiBudWxsLA0KICAgICAgICAgICAgZGlyZWN0VGF1OiBwYXJzZU51bShlbHMuZGlyZWN0U2hlYXJTdHJlc3MudmFsdWUpICE9PSBudWxsDQogICAgICAgICAgICAgICAgPyB0b01ldHJpY1N0cmVzcyhwYXJzZU51bShlbHMuZGlyZWN0U2hlYXJTdHJlc3MudmFsdWUpLCBpc01ldHJpYygpID8gJ01QYScgOiAncHNpJykgOiBudWxsLA0KICAgICAgICAgICAgY3JpdGVyaW9uOiBlbHMuc3RyZXNzQ3JpdGVyaW9uLnZhbHVlLA0KICAgICAgICAgICAgc3RyZW5ndGhSZWY6IGVscy5zdHJlbmd0aFJlZi52YWx1ZSwNCiAgICAgICAgICAgIGN1c3RvbUxpbWl0OiBjdXN0b21MaW1pdCwNCiAgICAgICAgICAgIGtEeW5hbWljOiBwYXJzZU51bShlbHMua0R5bmFtaWMudmFsdWUpIHx8IDEsDQogICAgICAgICAgICBrSW1wYWN0OiBwYXJzZU51bShlbHMua0ltcGFjdC52YWx1ZSkgfHwgMSwNCiAgICAgICAgICAgIGtGYXRpZ3VlOiBwYXJzZU51bShlbHMua0ZhdGlndWUudmFsdWUpIHx8IDEsDQogICAgICAgICAgICBrVGVtcDogcGFyc2VOdW0oZWxzLmtUZW1wLnZhbHVlKSB8fCAxLA0KICAgICAgICAgICAga1VuY2VydGFpbnR5OiBwYXJzZU51bShlbHMua1VuY2VydGFpbnR5LnZhbHVlKSB8fCAxLA0KICAgICAgICAgICAga1N0cmVzc0NvbmM6IHBhcnNlTnVtKGVscy5rU3RyZXNzQ29uYy52YWx1ZSkgfHwgMSwNCiAgICAgICAgICAgIHRhcmdldFNmOiBwYXJzZU51bShlbHMudGFyZ2V0U2YudmFsdWUpIHx8IDIsDQogICAgICAgICAgICBjb2x1bW5MZW5ndGg6IHBhcnNlTnVtKGVscy5jb2x1bW5MZW5ndGgudmFsdWUpLA0KICAgICAgICAgICAgc2xlbmRlcm5lc3M6IHBhcnNlTnVtKGVscy5zbGVuZGVybmVzcy52YWx1ZSksDQogICAgICAgICAgICBjeWNsaWNMb2FkaW5nOiBlbHMuY3ljbGljTG9hZGluZy5jaGVja2VkDQogICAgICAgIH07DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY29tcHV0ZVN0cmVzc2VzKGRhdGEpIHsNCiAgICAgICAgdmFyIHNpZ21hQXhpYWwgPSAwOw0KICAgICAgICB2YXIgdGF1U2hlYXIgPSAwOw0KICAgICAgICB2YXIgc2lnbWFCZW5kaW5nID0gMDsNCiAgICAgICAgdmFyIHRhdVRvcnNpb24gPSAwOw0KICAgICAgICB2YXIgZ292ZXJuaW5nID0gJ0NvbWJpbmVkJzsNCiAgICAgICAgdmFyIG1vZGUgPSBkYXRhLm1vZGU7DQoNCiAgICAgICAgaWYgKG1vZGUgPT09ICdheGlhbCcgfHwgbW9kZSA9PT0gJ2NvbWJpbmVkJykgew0KICAgICAgICAgICAgaWYgKGRhdGEuYXJlYSA+IDApIHNpZ21hQXhpYWwgPSBkYXRhLkYgLyBkYXRhLmFyZWE7DQogICAgICAgIH0NCiAgICAgICAgaWYgKG1vZGUgPT09ICdzaGVhcicgfHwgbW9kZSA9PT0gJ2NvbWJpbmVkJykgew0KICAgICAgICAgICAgaWYgKGRhdGEuYXJlYSA+IDApIHRhdVNoZWFyID0g<\/span><span class=\"msosfc-js-chunk\">ZGF0YS5WIC8gZGF0YS5hcmVhOw0KICAgICAgICB9DQogICAgICAgIGlmIChtb2RlID09PSAnYmVuZGluZycgfHwgbW9kZSA9PT0gJ2NvbWJpbmVkJykgew0KICAgICAgICAgICAgdmFyIHNiID0gY2FsY0JlbmRpbmdTdHJlc3MoZGF0YS5NLCBkYXRhLlosIGRhdGEuSSwgZGF0YS5jKTsNCiAgICAgICAgICAgIGlmIChzYiAhPT0gbnVsbCkgc2lnbWFCZW5kaW5nID0gc2I7DQogICAgICAgIH0NCiAgICAgICAgaWYgKG1vZGUgPT09ICd0b3JzaW9uJyB8fCBtb2RlID09PSAnY29tYmluZWQnKSB7DQogICAgICAgICAgICBpZiAoZGF0YS5KID4gMCAmJiBkYXRhLnIgPiAwKSB0YXVUb3JzaW9uID0gZGF0YS5UICogZGF0YS5yIC8gZGF0YS5KOw0KICAgICAgICB9DQogICAgICAgIGlmIChtb2RlID09PSAnY3VzdG9tJykgew0KICAgICAgICAgICAgc2lnbWFBeGlhbCA9IGRhdGEuZGlyZWN0U2lnbWEgfHwgMDsNCiAgICAgICAgICAgIHRhdVNoZWFyID0gZGF0YS5kaXJlY3RUYXUgfHwgMDsNCiAgICAgICAgICAgIGdvdmVybmluZyA9ICdDdXN0b20nOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIHNpZ21hQ29tYmluZWQgPSBzaWdtYUF4aWFsICsgc2lnbWFCZW5kaW5nOw0KICAgICAgICB2YXIgdGF1Q29tYmluZWQgPSB0YXVTaGVhciArIHRhdVRvcnNpb247DQoNCiAgICAgICAgdmFyIHNpZ21hRXE7DQogICAgICAgIGlmIChtb2RlID09PSAnY3VzdG9tJykgew0KICAgICAgICAgICAgc2lnbWFFcSA9IGRhdGEuY3JpdGVyaW9uID09PSAndHJlc2NhJw0KICAgICAgICAgICAgICAgID8gdHJlc2NhMkQoc2lnbWFBeGlhbCwgMCwgdGF1U2hlYXIpDQogICAgICAgICAgICAgICAgOiAoZGF0YS5jcml0ZXJpb24gPT09ICdjdXN0b20tZXEnDQogICAgICAgICAgICAgICAgICAgID8gdm9uTWlzZXNDb21iaW5lZChzaWdtYUF4aWFsLCB0YXVTaGVhcikNCiAgICAgICAgICAgICAgICAgICAgOiB2b25NaXNlc0NvbWJpbmVkKHNpZ21hQXhpYWwsIHRhdVNoZWFyKSk7DQogICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ2F4aWFsJykgew0KICAgICAgICAgICAgc2lnbWFFcSA9IE1hdGguYWJzKHNpZ21hQXhpYWwpOw0KICAgICAgICAgICAgZ292ZXJuaW5nID0gJ0F4aWFsJzsNCiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAnc2hlYXInKSB7DQogICAgICAgICAgICBzaWdtYUVxID0gTWF0aC5hYnModGF1U2hlYXIpOw0KICAgICAgICAgICAgZ292ZXJuaW5nID0gJ1NoZWFyJzsNCiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAnYmVuZGluZycpIHsNCiAgICAgICAgICAgIHNpZ21hRXEgPSBNYXRoLmFicyhzaWdtYUJlbmRpbmcpOw0KICAgICAgICAgICAgZ292ZXJuaW5nID0gJ0JlbmRpbmcnOw0KICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICd0b3JzaW9uJykgew0KICAgICAgICAgICAgc2lnbWFFcSA9IE1hdGguYWJzKHRhdVRvcnNpb24pOw0KICAgICAgICAgICAgZ292ZXJuaW5nID0gJ1RvcnNpb24nOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgaWYgKGRhdGEuY3JpdGVyaW9uID09PSAndHJlc2NhJykgew0KICAgICAgICAgICAgICAgIHNpZ21hRXEgPSB0cmVzY2EyRChzaWdtYUNvbWJpbmVkLCAwLCB0YXVDb21iaW5lZCk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHNpZ21hRXEgPSB2b25NaXNlc0NvbWJpbmVkKHNpZ21hQ29tYmluZWQsIHRhdUNvbWJpbmVkKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIGNvbnRyaWJ1dGlvbnMgPSBbDQogICAgICAgICAgICAgICAgeyBuYW1lOiAnQXhpYWwnLCB2YWw6IE1hdGguYWJzKHNpZ21hQXhpYWwpIH0sDQogICAgICAgICAgICAgICAgeyBuYW1lOiAnU2hlYXInLCB2YWw6IE1hdGguYWJzKHRhdVNoZWFyKSB9LA0KICAgICAgICAgICAgICAgIHsgbmFtZTogJ0JlbmRpbmcnLCB2YWw6IE1hdGguYWJzKHNpZ21hQmVuZGluZykgfSwNCiAgICAgICAgICAgICAgICB7IG5hbWU6ICdUb3JzaW9uJywgdmFsOiBNYXRoLmFicyh0YXVUb3JzaW9uKSB9DQogICAgICAgICAgICBdOw0KICAgICAgICAgICAgY29udHJpYnV0aW9ucy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiLnZhbCAtIGEudmFsOyB9KTsNCiAgICAgICAgICAgIGlmIChjb250cmlidXRpb25zWzBdLnZhbCA+IDApIHsNCiAgICAgICAgICAgICAgICBnb3Zlcm5pbmcgPSBjb250cmlidXRpb25zWzBdLm5hbWU7DQogICAgICAgICAgICAgICAgaWYgKGNvbnRyaWJ1dGlvbnNbMV0gJiYgY29udHJpYnV0aW9uc1sxXS52YWwgPiBjb250cmlidXRpb25zWzBdLnZhbCAqIDAuNSkgew0KICAgICAgICAgICAgICAgICAgICBnb3Zlcm5pbmcgPSAnQ29tYmluZWQnOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHZhciBrVG90YWwgPSBkYXRhLmtEeW5hbWljICogZGF0YS5rSW1wYWN0ICogZGF0YS5rRmF0aWd1ZSAqIGRhdGEua1RlbXAgKiBkYXRhLmtVbmNlcnRhaW50eSAqIGRhdGEua1N0cmVzc0NvbmM7DQogICAgICAgIHZhciBzaWdtYU5vbWluYWwgPSBzaWdtYUVxOw0KICAgICAgICB2YXIgc2lnbWFMb2NhbCA9IHNpZ21hTm9taW5hbCAqIGRhdGEua1N0cmVzc0NvbmM7DQogICAgICAgIHZhciBzaWdtYURlc2lnbiA9IHNpZ21hTG9jYWwgKiBkYXRhLmtEeW5hbWljICogZGF0YS5rSW1wYWN0ICogZGF0YS5rRmF0aWd1ZSAqIGRhdGEua1RlbXAgKiBkYXRhLmtVbmNlcnRhaW50eTsNCg0KICAgICAgICByZXR1cm4gew0KICAgICAgICAgICAgc2lnbWFBeGlhbDogc2lnbWFBeGlhbCwNCiAgICAgICAgICAgIHRhdVNoZWFyOiB0YXVTaGVhciwNCiAgICAgICAgICAgIHNpZ21hQmVuZGluZzogc2lnbWFCZW5kaW5nLA0KICAgICAgICAgICAgdGF1VG9yc2lvbjogdGF1VG9yc2lvbiwNCiAgICAgICAgICAgIHNpZ21hQ29tYmluZWQ6IHNpZ21hQ29tYmluZWQsDQogICAgICAgICAgICB0YXVDb21iaW5lZDogdGF1Q29tYmluZWQsDQogICAgICAgICAgICBzaWdtYUVxOiBzaWdtYUVxLA0KICAgICAgICAgICAgc2lnbWFEZXNpZ246IHNpZ21hRGVzaWduLA0KICAgICAgICAgICAga1RvdGFsOiBrVG90YWwsDQogICAgICAgICAgICBnb3Zlcm5pbmc6IGdvdmVybmluZw0KICAgICAgICB9Ow0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGdldFN0cmVuZ3RoTGltaXQoZGF0YSkgew0KICAgICAgICB2YXIgbGltaXQ7DQogICAgICAgIHN3aXRjaCAoZGF0YS5zdHJlbmd0aFJlZikgew0KICAgICAgICAgICAgY2FzZSAndWx0aW1hdGUnOg0KICAgICAgICAgICAgICAgIGxpbWl0ID0gZGF0YS5zdSAhPT0gbnVsbCAmJiBkYXRhLnN1ID4gMCA\/IGRhdGEuc3UgOiBkYXRhLnN5ICogMS40Ow0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnYWxsb3dhYmxlJzoNCiAgICAgICAgICAgICAgICBsaW1pdCA9IGRhdGEuc3kgLyBkYXRhLnRhcmdldFNmOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnY3VzdG9tJzoNCiAgICAgICAgICAgICAgICBsaW1pdCA9IGRhdGEuY3VzdG9tTGltaXQ7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgIGxpbWl0ID0gZGF0YS5zeTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gbGltaXQ7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY2xhc3NpZnlTYWZldHkob3ZlcmFsbFNmLCB0YXJnZXRTZiwgd2FybmluZ3MpIHsNCiAgICAgICAgaWYgKG92ZXJhbGxTZiA9PT0gbnVsbCB8fCAhaXNGaW5pdGUob3ZlcmFsbFNmKSkgcmV0dXJuICdjYXV0aW9uJzsNCiAgICAgICAgaWYgKG92ZXJhbGxTZiA8IHRhcmdldFNmKSByZXR1cm4gJ3Vuc2FmZSc7DQogICAgICAgIGlmIChvdmVyYWxsU2YgPCB0YXJnZXRTZiAqIDEuMTUgfHwgd2FybmluZ3MubGVuZ3RoID4gMCkgcmV0dXJuICdjYXV0aW9uJzsNCiAgICAgICAgcmV0dXJuICdzYWZlJzsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBidWlsZFdhcm5pbmdzKGRhdGEsIHN0cmVzc2VzLCBvdmVyYWxsU2YsIHN0cmVuZ3RoTGltaXQpIHsNCiAgICAgICAgdmFyIHdhcm5pbmdzID0gW107DQoNCiAgICAgICAgaWYgKGRhdGEuc3RydWN0dXJlVHlwZSA9PT0gJ3dlbGRlZCcpIHsNCiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goew0KICAgICAgICAgICAgICAgIHR5cGU6ICdpbmZvJywNCiAgICAgICAgICAgICAgICB0ZXh0OiAnV2VsZGVkIHN0cnVjdHVyZTogd2VsZCBnZW9tZXRyeSwgcmVzaWR1YWwgc3RyZXNzLCBoZWF0LWFmZmVjdGVkIHpvbmVzLCBmYXRpZ3VlIGNsYXNzLCBhbmQgd2VsZCBxdWFsaXR5IG1heSBnb3Zlcm4gdGhlIGRlc2lnbi4nDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoZGF0YS5jeWNsaWNMb2FkaW5nIHx8IGRhdGEua0ZhdGlndWUgPiAxLjAxKSB7DQogICAgICAgICAgICB3YXJuaW5ncy5wdXNoKHsNCiAgICAgICAgICAgICAgICB0eXBlOiAnY2F1dGlvbicsDQogICAgICAgICAgICAgICAgdGV4dDog<\/span><span class=\"msosfc-js-chunk\">J0N5Y2xpYyBvciBmYXRpZ3VlLXJlbGF0ZWQgbG9hZGluZyBzZWxlY3RlZDogc3RhdGljIHlpZWxkLWJhc2VkIHNhZmV0eSBmYWN0b3IgYWxvbmUgZG9lcyBub3QgY29uZmlybSBmYXRpZ3VlIGxpZmUuIFBlcmZvcm0gZmF0aWd1ZSBhbmFseXNpcy4nDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoKGRhdGEubW9kZSA9PT0gJ2F4aWFsJyB8fCBkYXRhLm1vZGUgPT09ICdjb21iaW5lZCcpICYmIGRhdGEuRiA8IDApIHsNCiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goew0KICAgICAgICAgICAgICAgIHR5cGU6ICdjYXV0aW9uJywNCiAgICAgICAgICAgICAgICB0ZXh0OiAnQ29tcHJlc3Npb24gYXhpYWwgbG9hZCBkZXRlY3RlZDogYnVja2xpbmcgbWF5IGdvdmVybiBiZWZvcmUgbWF0ZXJpYWwgeWllbGRpbmcuIERvIG5vdCB0cmVhdCBzdHJlc3Mgc2FmZXR5IGZhY3RvciBhbG9uZSBhcyBzdWZmaWNpZW50IGZvciBzbGVuZGVyIGNvbHVtbnMuJw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGRhdGEuY29sdW1uTGVuZ3RoICE9PSBudWxsICYmIGRhdGEuY29sdW1uTGVuZ3RoID4gMCkgew0KICAgICAgICAgICAgd2FybmluZ3MucHVzaCh7DQogICAgICAgICAgICAgICAgdHlwZTogJ2NhdXRpb24nLA0KICAgICAgICAgICAgICAgIHRleHQ6ICdDb2x1bW4gbGVuZ3RoIHByb3ZpZGVkOiByZXZpZXcgRXVsZXIvYnVja2xpbmcgY2FwYWNpdHkgZm9yIHNsZW5kZXIgY29tcHJlc3Npb24gbWVtYmVycy4nDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoZGF0YS5zbGVuZGVybmVzcyAhPT0gbnVsbCAmJiBkYXRhLnNsZW5kZXJuZXNzID4gMTAwKSB7DQogICAgICAgICAgICB3YXJuaW5ncy5wdXNoKHsNCiAgICAgICAgICAgICAgICB0eXBlOiAnY2F1dGlvbicsDQogICAgICAgICAgICAgICAgdGV4dDogJ0hpZ2ggc2xlbmRlcm5lc3MgcmF0aW8gKCcgKyBmbXQoZGF0YS5zbGVuZGVybmVzcywgMCkgKyAnKTogYnVja2xpbmcgbWF5IGdvdmVybiBkZXNpZ24uJw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKHN0cmVzc2VzLnNpZ21hRXEgPiBkYXRhLnN5KSB7DQogICAgICAgICAgICB3YXJuaW5ncy5wdXNoKHsNCiAgICAgICAgICAgICAgICB0eXBlOiAnZGFuZ2VyJywNCiAgICAgICAgICAgICAgICB0ZXh0OiAnRXF1aXZhbGVudCBzdHJlc3MgZXhjZWVkcyBtYXRlcmlhbCB5aWVsZCBzdHJlbmd0aCDigJQgcGxhc3RpYyBkZWZvcm1hdGlvbiBvciBmYWlsdXJlIG1heSBvY2N1ci4nDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAob3ZlcmFsbFNmICE9PSBudWxsICYmIG92ZXJhbGxTZiA8IGRhdGEudGFyZ2V0U2YpIHsNCiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goew0KICAgICAgICAgICAgICAgIHR5cGU6ICdkYW5nZXInLA0KICAgICAgICAgICAgICAgIHRleHQ6ICdPdmVyYWxsIHNhZmV0eSBmYWN0b3IgaXMgYmVsb3cgdGhlIHRhcmdldCBkZXNpZ24gcmVxdWlyZW1lbnQgKCcgKyBmbXQoZGF0YS50YXJnZXRTZiwgMikgKyAnKS4nDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoZGF0YS5rU3RyZXNzQ29uYyA+IDEuNSkgew0KICAgICAgICAgICAgd2FybmluZ3MucHVzaCh7DQogICAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLA0KICAgICAgICAgICAgICAgIHRleHQ6ICdFbGV2YXRlZCBzdHJlc3MgY29uY2VudHJhdGlvbiBmYWN0b3IgYXBwbGllZCDigJQgdmVyaWZ5IEt0IHdpdGggZGV0YWlsZWQgZ2VvbWV0cnkgb3IgRkVBLicNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHdhcm5pbmdzOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGJ1aWxkUmVjb21tZW5kYXRpb25zKGRhdGEsIHN0cmVzc2VzLCBvdmVyYWxsU2YsIHV0aWxpemF0aW9uKSB7DQogICAgICAgIHZhciByZWNzID0gW107DQoNCiAgICAgICAgaWYgKG92ZXJhbGxTZiAhPT0gbnVsbCAmJiBvdmVyYWxsU2YgPCBkYXRhLnRhcmdldFNmKSB7DQogICAgICAgICAgICBpZiAoc3RyZXNzZXMuc2lnbWFBeGlhbCA+PSBzdHJlc3Nlcy5zaWdtYUJlbmRpbmcgJiYgc3RyZXNzZXMuc2lnbWFBeGlhbCA+PSBzdHJlc3Nlcy50YXVTaGVhcikgew0KICAgICAgICAgICAgICAgIHJlY3MucHVzaCgnSW5jcmVhc2UgY3Jvc3Mtc2VjdGlvbmFsIGFyZWEgdG8gcmVkdWNlIGF4aWFsIHN0cmVzcy4nKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChzdHJlc3Nlcy5zaWdtYUJlbmRpbmcgPj0gc3RyZXNzZXMuc2lnbWFBeGlhbCAmJiBzdHJlc3Nlcy5zaWdtYUJlbmRpbmcgPj0gc3RyZXNzZXMudGF1U2hlYXIpIHsNCiAgICAgICAgICAgICAgICByZWNzLnB1c2goJ0luY3JlYXNlIHNlY3Rpb24gbW9kdWx1cyBvciBhZGQgc3RpZmZlbmVycyBmb3IgYmVuZGluZy1kb21pbmF0ZWQgZGVzaWduLicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHN0cmVzc2VzLnRhdVRvcnNpb24gPj0gc3RyZXNzZXMudGF1U2hlYXIgJiYgc3RyZXNzZXMudGF1VG9yc2lvbiA+IDApIHsNCiAgICAgICAgICAgICAgICByZWNzLnB1c2goJ0luY3JlYXNlIHBvbGFyIHNlY3Rpb24gcHJvcGVydGllcyBmb3IgdG9yc2lvbi1kb21pbmF0ZWQgZGVzaWducy4nKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChzdHJlc3Nlcy50YXVTaGVhciA+IHN0cmVzc2VzLnRhdVRvcnNpb24gJiYgc3RyZXNzZXMudGF1U2hlYXIgPiAwKSB7DQogICAgICAgICAgICAgICAgcmVjcy5wdXNoKCdJbmNyZWFzZSBzaGVhciBhcmVhIG9yIHJlZHVjZSBzaGVhciBsb2FkLicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmVjcy5wdXNoKCdDb25zaWRlciBhIGhpZ2hlci1zdHJlbmd0aCBtYXRlcmlhbCBvciByZWR1Y2UgYXBwbGllZCBsb2Fkcy9tb21lbnRzLicpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHV0aWxpemF0aW9uID4gODUpIHsNCiAgICAgICAgICAgIHJlY3MucHVzaCgnU3RyZW5ndGggdXRpbGl6YXRpb24gaXMgaGlnaCDigJQgcmV2aWV3IGRlc2lnbiBtYXJnaW5zIGFuZCBsb2FkIGFzc3VtcHRpb25zLicpOw0KICAgICAgICB9DQogICAgICAgIGlmIChkYXRhLmtTdHJlc3NDb25jID4gMS4yKSB7DQogICAgICAgICAgICByZWNzLnB1c2goJ1JlZHVjZSBzdHJlc3MgY29uY2VudHJhdGlvbiB0aHJvdWdoIGxhcmdlciBmaWxsZXQgcmFkaWkgb3IgaW1wcm92ZWQgZ2VvbWV0cnkuJyk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGRhdGEuY29sdW1uTGVuZ3RoIHx8IChkYXRhLnNsZW5kZXJuZXNzICYmIGRhdGEuc2xlbmRlcm5lc3MgPiA4MCkpIHsNCiAgICAgICAgICAgIHJlY3MucHVzaCgnUmV2aWV3IGJ1Y2tsaW5nIGZvciBzbGVuZGVyIGNvbXByZXNzaW9uIG1lbWJlcnMuJyk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGRhdGEuY3ljbGljTG9hZGluZykgew0KICAgICAgICAgICAgcmVjcy5wdXNoKCdQZXJmb3JtIGZhdGlndWUgYW5hbHlzaXMgZm9yIGN5Y2xpYyBsb2FkaW5nIGNvbmRpdGlvbnMuJyk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGRhdGEuc3RydWN0dXJlVHlwZSA9PT0gJ3dlbGRlZCcpIHsNCiAgICAgICAgICAgIHJlY3MucHVzaCgnUGVyZm9ybSB3ZWxkLXNwZWNpZmljIGFuYWx5c2lzIGluY2x1ZGluZyBmYXRpZ3VlIGNsYXNzIGFuZCBpbnNwZWN0aW9uIHJlcXVpcmVtZW50cy4nKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoc3RyZXNzZXMuc2lnbWFEZXNpZ24gPiBkYXRhLnN5ICogMC45KSB7DQogICAgICAgICAgICByZWNzLnB1c2goJ0NvbnNpZGVyIGZpbml0ZSBlbGVtZW50IGFuYWx5c2lzIHdoZW4gbG9jYWwgZ2VvbWV0cnkgb3IgbG9hZCBkaXN0cmlidXRpb24gaXMgY29tcGxleC4nKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChyZWNzLmxlbmd0aCA9PT0gMCkgew0KICAgICAgICAgICAgcmVjcy5wdXNoKCdEZXNpZ24gbWVldHMgdGFyZ2V0IHNhZmV0eSBmYWN0b3IgdW5kZXIgY3VycmVudCBhc3N1bXB0aW9ucy4gRG9jdW1lbnQgaW5wdXRzIGFuZCB2ZXJpZnkgY3JpdGljYWwgZGV0YWlscy4nKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiByZWNzOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGRyYXdMb2FkRGlhZ3JhbShtb2RlLCBhY3RpdmUpIHsNCiAgICAgICAgdmFyIHN2ZyA9IGVscy5sb2FkRGlhZ3JhbTsNCiAgICAgICAgaWYgKCFzdmcpIHJldHVybjsNCiAgICAgICAgdmFyIHcgPSAyMjAsIGggPSAxNDA7DQogICAgICAgIHZhciBodG1sID0gJzxyZWN0IHg9IjYwIiB5PSI1MCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2U4ZjBmYSIgc3Ryb2tlPSIjMWU0ZDhjIiBzdHJva2Utd2lkdGg9IjIiIHJ4PSI0Ii8+JzsNCg0KICAgICAgICBpZiAobW9kZSA9PT0gJ2F4aWFsJyB8fCBtb2RlID09PSAnY29tYmluZWQnKSB7DQogICAgICAgICAgICB2YXIgY29sID0gYWN0aXZlLmF4aWFsID8gJyNkYzI2MjYnIDogJyM5NGEzYjgn<\/span><span class=\"msosfc-js-chunk\">Ow0KICAgICAgICAgICAgaHRtbCArPSAnPGxpbmUgeDE9IjExMCIgeTE9IjIwIiB4Mj0iMTEwIiB5Mj0iNDgiIHN0cm9rZT0iJyArIGNvbCArICciIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNtc29zZmMtYXJyKSIvPic7DQogICAgICAgICAgICBodG1sICs9ICc8bGluZSB4MT0iMTEwIiB5MT0iOTIiIHgyPSIxMTAiIHkyPSIxMjAiIHN0cm9rZT0iJyArIGNvbCArICciIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNtc29zZmMtYXJyKSIvPic7DQogICAgICAgIH0NCiAgICAgICAgaWYgKG1vZGUgPT09ICdzaGVhcicgfHwgbW9kZSA9PT0gJ2NvbWJpbmVkJykgew0KICAgICAgICAgICAgdmFyIGNvbFMgPSBhY3RpdmUuc2hlYXIgPyAnI2Q5NzcwNicgOiAnIzk0YTNiOCc7DQogICAgICAgICAgICBodG1sICs9ICc8bGluZSB4MT0iMzAiIHkxPSI3MCIgeDI9IjU4IiB5Mj0iNzAiIHN0cm9rZT0iJyArIGNvbFMgKyAnIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjbXNvc2ZjLWFycikiLz4nOw0KICAgICAgICB9DQogICAgICAgIGlmIChtb2RlID09PSAnYmVuZGluZycgfHwgbW9kZSA9PT0gJ2NvbWJpbmVkJykgew0KICAgICAgICAgICAgdmFyIGNvbEIgPSBhY3RpdmUuYmVuZGluZyA\/ICcjMDU5NjY5JyA6ICcjOTRhM2I4JzsNCiAgICAgICAgICAgIGh0bWwgKz0gJzxwYXRoIGQ9Ik0xNzAgNzAgQTIwIDIwIDAgMCAxIDE3MCAzMCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSInICsgY29sQiArICciIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNtc29zZmMtYXJyKSIvPic7DQogICAgICAgIH0NCiAgICAgICAgaWYgKG1vZGUgPT09ICd0b3JzaW9uJyB8fCBtb2RlID09PSAnY29tYmluZWQnKSB7DQogICAgICAgICAgICB2YXIgY29sVCA9IGFjdGl2ZS50b3JzaW9uID8gJyM3YzNhZWQnIDogJyM5NGEzYjgnOw0KICAgICAgICAgICAgaHRtbCArPSAnPHBhdGggZD0iTTk1IDcwIEExNSAxNSAwIDEgMSAxMjUgNzAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iJyArIGNvbFQgKyAnIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjbXNvc2ZjLWFycikiLz4nOw0KICAgICAgICB9DQoNCiAgICAgICAgc3ZnLmlubmVySFRNTCA9ICc8ZGVmcz48bWFya2VyIGlkPSJtc29zZmMtYXJyIiBtYXJrZXJXaWR0aD0iOCIgbWFya2VySGVpZ2h0PSI4IiByZWZYPSI2IiByZWZZPSIzIiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wLDAgTDYsMyBMMCw2IFoiIGZpbGw9ImN1cnJlbnRDb2xvciIvPjwvbWFya2VyPjwvZGVmcz4nICsgaHRtbDsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBkcmF3R2F1Z2Uoc3ZnRWwsIHZhbHVlLCBtYXhWYWwsIGxhYmVsLCBjb2xvcikgew0KICAgICAgICBpZiAoIXN2Z0VsKSByZXR1cm47DQogICAgICAgIHZhciBwY3QgPSBNYXRoLm1pbihNYXRoLm1heCh2YWx1ZSAvIG1heFZhbCwgMCksIDEpOw0KICAgICAgICB2YXIgYW5nbGUgPSAtOTAgKyBwY3QgKiAxODA7DQogICAgICAgIHZhciByYWQgPSBhbmdsZSAqIE1hdGguUEkgLyAxODA7DQogICAgICAgIHZhciBjeCA9IDEwMCwgY3kgPSAxMDAsIHIgPSA3MDsNCiAgICAgICAgdmFyIG54ID0gY3ggKyByICogTWF0aC5jb3MocmFkKTsNCiAgICAgICAgdmFyIG55ID0gY3kgKyByICogTWF0aC5zaW4ocmFkKTsNCiAgICAgICAgdmFyIGxhcmdlID0gcGN0ID4gMC41ID8gMSA6IDA7DQoNCiAgICAgICAgc3ZnRWwuaW5uZXJIVE1MID0NCiAgICAgICAgICAgICc8Y2lyY2xlIGN4PSIxMDAiIGN5PSIxMDAiIHI9IjcwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMTIiLz4nICsNCiAgICAgICAgICAgICc8cGF0aCBkPSJNMzAgMTAwIEE3MCA3MCAwICcgKyBsYXJnZSArICcgMSAnICsgbnggKyAnICcgKyBueSArICciIGZpbGw9Im5vbmUiIHN0cm9rZT0iJyArIGNvbG9yICsgJyIgc3Ryb2tlLXdpZHRoPSIxMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+JyArDQogICAgICAgICAgICAnPHRleHQgeD0iMTAwIiB5PSI5NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIyMiIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFhMjMzMiI+JyArIGZtdCh2YWx1ZSwgMikgKyAnPC90ZXh0PicgKw0KICAgICAgICAgICAgJzx0ZXh0IHg9IjEwMCIgeT0iMTE1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEwIiBmaWxsPSIjNWE2Nzc4Ij4nICsgbGFiZWwgKyAnPC90ZXh0Pic7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gcmVuZGVyUmVzdWx0cyhkYXRhLCBzdHJlc3Nlcywgb3ZlcmFsbFNmLCBzdHJlbmd0aExpbWl0LCB1dGlsaXphdGlvbikgew0KICAgICAgICB2YXIgc3UgPSBzdHJlc3NVbml0KCk7DQogICAgICAgIHZhciBzdGF0dXMgPSBjbGFzc2lmeVNhZmV0eShvdmVyYWxsU2YsIGRhdGEudGFyZ2V0U2YsIFtdKTsNCiAgICAgICAgdmFyIHdhcm5pbmdzID0gYnVpbGRXYXJuaW5ncyhkYXRhLCBzdHJlc3Nlcywgb3ZlcmFsbFNmLCBzdHJlbmd0aExpbWl0KTsNCiAgICAgICAgc3RhdHVzID0gY2xhc3NpZnlTYWZldHkob3ZlcmFsbFNmLCBkYXRhLnRhcmdldFNmLCB3YXJuaW5ncyk7DQogICAgICAgIHZhciByZWNzID0gYnVpbGRSZWNvbW1lbmRhdGlvbnMoZGF0YSwgc3RyZXNzZXMsIG92ZXJhbGxTZiwgdXRpbGl6YXRpb24pOw0KDQogICAgICAgIGVscy5yZXN1bHRzSGVyby5jbGFzc05hbWUgPSAnbXNvc2ZjLXJlc3VsdHMtaGVybyBtc29zZmMtJyArIHN0YXR1czsNCiAgICAgICAgZWxzLm92ZXJhbGxTZi50ZXh0Q29udGVudCA9IGZtdChvdmVyYWxsU2YsIDIpOw0KICAgICAgICBlbHMuc3RhdHVzQmFkZ2UudGV4dENvbnRlbnQgPSBzdGF0dXMgPT09ICdzYWZlJyA\/ICdTYWZlJyA6IChzdGF0dXMgPT09ICdjYXV0aW9uJyA\/ICdDYXV0aW9uJyA6ICdVbnNhZmUnKTsNCiAgICAgICAgZWxzLnN0YXR1c0JhZGdlLmNsYXNzTmFtZSA9ICdtc29zZmMtc3RhdHVzLWJhZGdlJzsNCg0KICAgICAgICBlbHMucmVzQXhpYWwudGV4dENvbnRlbnQgPSBmbXQoY29udmVydERpc3BsYXlTdHJlc3Moc3RyZXNzZXMuc2lnbWFBeGlhbCksIDIpICsgJyAnICsgc3U7DQogICAgICAgIGVscy5yZXNTaGVhci50ZXh0Q29udGVudCA9IGZtdChjb252ZXJ0RGlzcGxheVN0cmVzcyhzdHJlc3Nlcy50YXVTaGVhciksIDIpICsgJyAnICsgc3U7DQogICAgICAgIGVscy5yZXNCZW5kaW5nLnRleHRDb250ZW50ID0gZm10KGNvbnZlcnREaXNwbGF5U3RyZXNzKHN0cmVzc2VzLnNpZ21hQmVuZGluZyksIDIpICsgJyAnICsgc3U7DQogICAgICAgIGVscy5yZXNUb3JzaW9uLnRleHRDb250ZW50ID0gZm10KGNvbnZlcnREaXNwbGF5U3RyZXNzKHN0cmVzc2VzLnRhdVRvcnNpb24pLCAyKSArICcgJyArIHN1Ow0KICAgICAgICBlbHMucmVzRXF1aXYudGV4dENvbnRlbnQgPSBmbXQoY29udmVydERpc3BsYXlTdHJlc3Moc3RyZXNzZXMuc2lnbWFFcSksIDIpICsgJyAnICsgc3U7DQogICAgICAgIGVscy5yZXNEZXNpZ24udGV4dENvbnRlbnQgPSBmbXQoY29udmVydERpc3BsYXlTdHJlc3Moc3RyZXNzZXMuc2lnbWFEZXNpZ24pLCAyKSArICcgJyArIHN1Ow0KICAgICAgICBlbHMucmVzU3RyZW5ndGgudGV4dENvbnRlbnQgPSBmbXQoY29udmVydERpc3BsYXlTdHJlc3Moc3RyZW5ndGhMaW1pdCksIDIpICsgJyAnICsgc3U7DQogICAgICAgIGVscy5yZXNUYXJnZXQudGV4dENvbnRlbnQgPSBmbXQoZGF0YS50YXJnZXRTZiwgMik7DQogICAgICAgIGVscy5yZXNVdGlsLnRleHRDb250ZW50ID0gZm10KHV0aWxpemF0aW9uLCAxKSArICclJzsNCiAgICAgICAgZWxzLnJlc0dvdmVybmluZy50ZXh0Q29udGVudCA9IHN0cmVzc2VzLmdvdmVybmluZzsNCg0KICAgICAgICB2YXIgYmFyQ29sb3IgPSB1dGlsaXphdGlvbiA+IDEwMCA\/ICcjZGMyNjI2JyA6ICh1dGlsaXphdGlvbiA+IDg1ID8gJyNkOTc3MDYnIDogJyMwNTk2NjknKTsNCiAgICAgICAgZWxzLnV0aWxCYXJGaWxsLnN0eWxlLndpZHRoID0gTWF0aC5taW4odXRpbGl6YXRpb24sIDEwMCkgKyAnJSc7DQogICAgICAgIGVscy51dGlsQmFyRmlsbC5zdHlsZS5iYWNrZ3JvdW5kID0gYmFyQ29sb3I7DQogICAgICAgIGVscy51dGlsUGN0LnRleHRDb250ZW50ID0gZm10KHV0aWxpemF0aW9uLCAxKSArICclJzsNCg0KICAgICAgICBkcmF3TG9hZERpYWdyYW0oZGF0YS5tb2RlLCB7DQogICAgICAgICAgICBheGlhbDogTWF0aC5hYnMoc3RyZXNzZXMuc2lnbWFBeGlhbCkgPiAwLA0KICAgICAgICAgICAgc2hlYXI6IE1hdGguYWJzKHN0cmVzc2VzLnRhdVNoZWFyKSA+IDAsDQogICAgICAgICAgICBiZW5kaW5nOiBNYXRoLmFicyhzdHJlc3Nlcy5zaWdtYUJlbmRpbmcpID4gMCwNCiAgICAgICAgICAgIHRvcnNpb246IE1hdGguYWJzKHN0cmVzc2VzLnRhdVRvcnNpb24pID4gMA0KICAgICAgICB9KTsNCg0KICAgICAgICBkcmF3R2F1Z2UoZWxzLmVxdWl2R2F1Z2UsIGNvbnZlcnREaXNwbGF5U3RyZXNzKHN0cmVzc2VzLnNpZ21hRXEpLCBjb252ZXJ0RGlzcGxh<\/span><span class=\"msosfc-js-chunk\">eVN0cmVzcyhzdHJlbmd0aExpbWl0KSwgc3UsICcjMWU0ZDhjJyk7DQogICAgICAgIGRyYXdHYXVnZShlbHMuc2ZHYXVnZSwgb3ZlcmFsbFNmIHx8IDAsIE1hdGgubWF4KGRhdGEudGFyZ2V0U2YgKiAyLCBvdmVyYWxsU2YgfHwgMSksICdTRicsIHN0YXR1cyA9PT0gJ3Vuc2FmZScgPyAnI2RjMjYyNicgOiAnIzA1OTY2OScpOw0KDQogICAgICAgIGVscy53YXJuaW5ncy5pbm5lckhUTUwgPSB3YXJuaW5ncy5tYXAoZnVuY3Rpb24gKHcpIHsNCiAgICAgICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0ibXNvc2ZjLXdhcm5pbmctaXRlbSBtc29zZmMtd2Fybi0nICsgdy50eXBlICsgJyI+JyArIHcudGV4dCArICc8L2Rpdj4nOw0KICAgICAgICB9KS5qb2luKCcnKTsNCg0KICAgICAgICBlbHMucmVjb21tZW5kYXRpb25zLmlubmVySFRNTCA9ICc8dWw+JyArIHJlY3MubWFwKGZ1bmN0aW9uIChyKSB7DQogICAgICAgICAgICByZXR1cm4gJzxsaT4nICsgciArICc8L2xpPic7DQogICAgICAgIH0pLmpvaW4oJycpICsgJzwvdWw+JzsNCg0KICAgICAgICBlbHMucmVzdWx0c1BhbmVsLmNsYXNzTGlzdC5yZW1vdmUoJ21zb3NmYy1oaWRkZW4nKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBoaWRlUmVzdWx0cygpIHsNCiAgICAgICAgZWxzLnJlc3VsdHNQYW5lbC5jbGFzc0xpc3QuYWRkKCdtc29zZmMtaGlkZGVuJyk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY2FsY3VsYXRlKCkgew0KICAgICAgICB2YXIgZGF0YSA9IHJlYWRJbnB1dHMoKTsNCiAgICAgICAgaWYgKCF2YWxpZGF0ZUlucHV0cyhkYXRhKSkgew0KICAgICAgICAgICAgaGlkZVJlc3VsdHMoKTsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KDQogICAgICAgIHZhciBuZWVkQXJlYSA9IGRhdGEubW9kZSA9PT0gJ2F4aWFsJyB8fCBkYXRhLm1vZGUgPT09ICdzaGVhcicgfHwgZGF0YS5tb2RlID09PSAnY29tYmluZWQnOw0KICAgICAgICBpZiAobmVlZEFyZWEgJiYgKCFkYXRhLmFyZWEgfHwgZGF0YS5hcmVhIDw9IDApKSB7DQogICAgICAgICAgICBzZXRGaWVsZEVycm9yKCdtc29zZmNBcmVhJywgJ21zb3NmY0FyZWFFcnInLCAnRWZmZWN0aXZlIGFyZWEgaXMgcmVxdWlyZWQuJyk7DQogICAgICAgICAgICBoaWRlUmVzdWx0cygpOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIHN0cmVzc2VzID0gY29tcHV0ZVN0cmVzc2VzKGRhdGEpOw0KICAgICAgICBpZiAoIWlzRmluaXRlKHN0cmVzc2VzLnNpZ21hRXEpIHx8IHN0cmVzc2VzLnNpZ21hRXEgPD0gMCkgew0KICAgICAgICAgICAgc2V0RmllbGRFcnJvcignbXNvc2ZjQXhpYWxMb2FkJywgJycsICdDYW5ub3QgY29tcHV0ZSBzdHJlc3Mg4oCUIGNoZWNrIGdlb21ldHJ5IGFuZCBsb2Fkcy4nKTsNCiAgICAgICAgICAgIGhpZGVSZXN1bHRzKCk7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgc3RyZW5ndGhMaW1pdCA9IGdldFN0cmVuZ3RoTGltaXQoZGF0YSk7DQogICAgICAgIHZhciBvdmVyYWxsU2YgPSBzdHJlbmd0aExpbWl0IC8gc3RyZXNzZXMuc2lnbWFEZXNpZ247DQogICAgICAgIHZhciB1dGlsaXphdGlvbiA9IChzdHJlc3Nlcy5zaWdtYURlc2lnbiAvIHN0cmVuZ3RoTGltaXQpICogMTAwOw0KDQogICAgICAgIHJlbmRlclJlc3VsdHMoZGF0YSwgc3RyZXNzZXMsIG92ZXJhbGxTZiwgc3RyZW5ndGhMaW1pdCwgdXRpbGl6YXRpb24pOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGJpbmRFdmVudHMoKSB7DQogICAgICAgIFsNCiAgICAgICAgICAgIGVscy5jYWxjTW9kZSwgZWxzLnN0cnVjdHVyZVR5cGUsIGVscy5tYXRlcmlhbCwgZWxzLnVuaXRTeXN0ZW0sDQogICAgICAgICAgICBlbHMueWllbGRTdHJlbmd0aCwgZWxzLnVsdGltYXRlU3RyZW5ndGgsIGVscy5hcmVhLCBlbHMuc2VjdGlvbk1vZHVsdXMsDQogICAgICAgICAgICBlbHMubW9tZW50T2ZJbmVydGlhLCBlbHMucG9sYXJNb21lbnQsIGVscy5vdXRlclJhZGl1cywgZWxzLmRpc3RUb0ZpYmVyLA0KICAgICAgICAgICAgZWxzLmF4aWFsTG9hZCwgZWxzLnNoZWFyTG9hZCwgZWxzLmJlbmRpbmdNb21lbnQsIGVscy50b3JxdWUsDQogICAgICAgICAgICBlbHMuZGlyZWN0Tm9ybWFsU3RyZXNzLCBlbHMuZGlyZWN0U2hlYXJTdHJlc3MsIGVscy5zdHJlc3NDcml0ZXJpb24sDQogICAgICAgICAgICBlbHMuc3RyZW5ndGhSZWYsIGVscy5jdXN0b21MaW1pdCwgZWxzLmtEeW5hbWljLCBlbHMua0ltcGFjdCwNCiAgICAgICAgICAgIGVscy5rRmF0aWd1ZSwgZWxzLmtUZW1wLCBlbHMua1VuY2VydGFpbnR5LCBlbHMua1N0cmVzc0NvbmMsDQogICAgICAgICAgICBlbHMudGFyZ2V0U2YsIGVscy5jb2x1bW5MZW5ndGgsIGVscy5zbGVuZGVybmVzcywgZWxzLmN5Y2xpY0xvYWRpbmcsDQogICAgICAgICAgICBlbHMuYXhpYWxMb2FkVW5pdCwgZWxzLnNoZWFyTG9hZFVuaXQsIGVscy5iZW5kaW5nTW9tZW50VW5pdCwgZWxzLnRvcnF1ZVVuaXQNCiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgew0KICAgICAgICAgICAgaWYgKCFlbCkgcmV0dXJuOw0KICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgIGlmIChlbCA9PT0gZWxzLm1hdGVyaWFsKSBtYW51YWxNYXRlcmlhbEVkaXQgPSBlbHMubWF0ZXJpYWwudmFsdWUgPT09ICdjdXN0b20nOw0KICAgICAgICAgICAgICAgIGlmIChlbCA9PT0gZWxzLnlpZWxkU3RyZW5ndGggfHwgZWwgPT09IGVscy51bHRpbWF0ZVN0cmVuZ3RoKSBtYW51YWxTdHJlbmd0aEVkaXQgPSB0cnVlOw0KICAgICAgICAgICAgICAgIGlmIChlbCA9PT0gZWxzLnVuaXRTeXN0ZW0pIHsNCiAgICAgICAgICAgICAgICAgICAgY29udmVydElucHV0c09uVW5pdFN3aXRjaChlbC52YWx1ZSA9PT0gJ21ldHJpYycpOw0KICAgICAgICAgICAgICAgICAgICB1cGRhdGVVbml0TGFiZWxzKCk7DQogICAgICAgICAgICAgICAgICAgIGlmICghbWFudWFsTWF0ZXJpYWxFZGl0KSBhcHBseU1hdGVyaWFsUHJlc2V0KCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChlbCA9PT0gZWxzLm1hdGVyaWFsKSBhcHBseU1hdGVyaWFsUHJlc2V0KCk7DQogICAgICAgICAgICAgICAgdXBkYXRlRmllbGRWaXNpYmlsaXR5KCk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGlmIChlbC50YWdOYW1lID09PSAnSU5QVVQnICYmIGVsLnR5cGUgPT09ICdudW1iZXInKSB7DQogICAgICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgIHVwZGF0ZUZpZWxkVmlzaWJpbGl0eSgpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCg0KICAgICAgICBlbHMuYnRuQ2FsY3VsYXRlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2FsY3VsYXRlKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBpbml0KCkgew0KICAgICAgICByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUk9PVF9JRCk7DQogICAgICAgIGlmICghcm9vdCkgcmV0dXJuOw0KDQogICAgICAgIGVscyA9IHsNCiAgICAgICAgICAgIHVuaXRTeXN0ZW06ICQoJ21zb3NmY1VuaXRTeXN0ZW0nKSwNCiAgICAgICAgICAgIGNhbGNNb2RlOiAkKCdtc29zZmNDYWxjTW9kZScpLA0KICAgICAgICAgICAgc3RydWN0dXJlVHlwZTogJCgnbXNvc2ZjU3RydWN0dXJlVHlwZScpLA0KICAgICAgICAgICAgbWF0ZXJpYWw6ICQoJ21zb3NmY01hdGVyaWFsJyksDQogICAgICAgICAgICB5aWVsZFN0cmVuZ3RoOiAkKCdtc29zZmNZaWVsZFN0cmVuZ3RoJyksDQogICAgICAgICAgICB1bHRpbWF0ZVN0cmVuZ3RoOiAkKCdtc29zZmNVbHRpbWF0ZVN0cmVuZ3RoJyksDQogICAgICAgICAgICBhcmVhOiAkKCdtc29zZmNBcmVhJyksDQogICAgICAgICAgICBzZWN0aW9uTW9kdWx1czogJCgnbXNvc2ZjU2VjdGlvbk1vZHVsdXMnKSwNCiAgICAgICAgICAgIG1vbWVudE9mSW5lcnRpYTogJCgnbXNvc2ZjTW9tZW50T2ZJbmVydGlhJyksDQogICAgICAgICAgICBwb2xhck1vbWVudDogJCgnbXNvc2ZjUG9sYXJNb21lbnQnKSwNCiAgICAgICAgICAgIG91dGVyUmFkaXVzOiAkKCdtc29zZmNPdXRlclJhZGl1cycpLA0KICAgICAgICAgICAgZGlzdFRvRmliZXI6ICQoJ21zb3NmY0Rpc3RUb0ZpYmVyJyksDQogICAgICAgICAgICBheGlhbExvYWQ6ICQoJ21zb3NmY0F4aWFsTG9hZCcpLA0KICAgICAgICAgICAgYXhpYWxMb2FkVW5pdDogJCgnbXNvc2ZjQXhpYWxMb2FkVW5pdCcpLA0KICAgICAgICAgICAgc2hlYXJMb2FkOiAkKCdtc29zZmNTaGVhckxvYWQnKSwNCiAgICAgICAgICAgIHNoZWFyTG9hZFVuaXQ6ICQoJ21zb3NmY1NoZWFyTG9hZFVuaXQnKSwNCiAgICAgICAgICAgIGJlbmRpbmdNb21lbnQ6ICQoJ21zb3NmY0JlbmRpbmdNb21lbnQnKSwNCiAgICAgICAgICAgIGJlbmRpbmdNb21lbnRVbml0OiAkKCdtc29zZmNCZW5k<\/span><span class=\"msosfc-js-chunk\">aW5nTW9tZW50VW5pdCcpLA0KICAgICAgICAgICAgdG9ycXVlOiAkKCdtc29zZmNUb3JxdWUnKSwNCiAgICAgICAgICAgIHRvcnF1ZVVuaXQ6ICQoJ21zb3NmY1RvcnF1ZVVuaXQnKSwNCiAgICAgICAgICAgIGRpcmVjdE5vcm1hbFN0cmVzczogJCgnbXNvc2ZjRGlyZWN0Tm9ybWFsU3RyZXNzJyksDQogICAgICAgICAgICBkaXJlY3RTaGVhclN0cmVzczogJCgnbXNvc2ZjRGlyZWN0U2hlYXJTdHJlc3MnKSwNCiAgICAgICAgICAgIHN0cmVzc0NyaXRlcmlvbjogJCgnbXNvc2ZjU3RyZXNzQ3JpdGVyaW9uJyksDQogICAgICAgICAgICBzdHJlbmd0aFJlZjogJCgnbXNvc2ZjU3RyZW5ndGhSZWYnKSwNCiAgICAgICAgICAgIGN1c3RvbUxpbWl0OiAkKCdtc29zZmNDdXN0b21MaW1pdCcpLA0KICAgICAgICAgICAgY3VzdG9tTGltaXRHcm91cDogJCgnbXNvc2ZjQ3VzdG9tTGltaXRHcm91cCcpLA0KICAgICAgICAgICAga0R5bmFtaWM6ICQoJ21zb3NmY0tEeW5hbWljJyksDQogICAgICAgICAgICBrSW1wYWN0OiAkKCdtc29zZmNLSW1wYWN0JyksDQogICAgICAgICAgICBrRmF0aWd1ZTogJCgnbXNvc2ZjS0ZhdGlndWUnKSwNCiAgICAgICAgICAgIGtUZW1wOiAkKCdtc29zZmNLVGVtcCcpLA0KICAgICAgICAgICAga1VuY2VydGFpbnR5OiAkKCdtc29zZmNLVW5jZXJ0YWludHknKSwNCiAgICAgICAgICAgIGtTdHJlc3NDb25jOiAkKCdtc29zZmNLU3RyZXNzQ29uYycpLA0KICAgICAgICAgICAgdGFyZ2V0U2Y6ICQoJ21zb3NmY1RhcmdldFNmJyksDQogICAgICAgICAgICBjb2x1bW5MZW5ndGg6ICQoJ21zb3NmY0NvbHVtbkxlbmd0aCcpLA0KICAgICAgICAgICAgc2xlbmRlcm5lc3M6ICQoJ21zb3NmY1NsZW5kZXJuZXNzJyksDQogICAgICAgICAgICBjeWNsaWNMb2FkaW5nOiAkKCdtc29zZmNDeWNsaWNMb2FkaW5nJyksDQogICAgICAgICAgICB3ZWxkTm90ZTogJCgnbXNvc2ZjV2VsZE5vdGUnKSwNCiAgICAgICAgICAgIGJ0bkNhbGN1bGF0ZTogJCgnbXNvc2ZjQnRuQ2FsY3VsYXRlJyksDQogICAgICAgICAgICByZXN1bHRzUGFuZWw6ICQoJ21zb3NmY1Jlc3VsdHNQYW5lbCcpLA0KICAgICAgICAgICAgcmVzdWx0c0hlcm86ICQoJ21zb3NmY1Jlc3VsdHNIZXJvJyksDQogICAgICAgICAgICBvdmVyYWxsU2Y6ICQoJ21zb3NmY092ZXJhbGxTZicpLA0KICAgICAgICAgICAgc3RhdHVzQmFkZ2U6ICQoJ21zb3NmY1N0YXR1c0JhZGdlJyksDQogICAgICAgICAgICByZXNBeGlhbDogJCgnbXNvc2ZjUmVzQXhpYWwnKSwNCiAgICAgICAgICAgIHJlc1NoZWFyOiAkKCdtc29zZmNSZXNTaGVhcicpLA0KICAgICAgICAgICAgcmVzQmVuZGluZzogJCgnbXNvc2ZjUmVzQmVuZGluZycpLA0KICAgICAgICAgICAgcmVzVG9yc2lvbjogJCgnbXNvc2ZjUmVzVG9yc2lvbicpLA0KICAgICAgICAgICAgcmVzRXF1aXY6ICQoJ21zb3NmY1Jlc0VxdWl2JyksDQogICAgICAgICAgICByZXNEZXNpZ246ICQoJ21zb3NmY1Jlc0Rlc2lnbicpLA0KICAgICAgICAgICAgcmVzU3RyZW5ndGg6ICQoJ21zb3NmY1Jlc1N0cmVuZ3RoJyksDQogICAgICAgICAgICByZXNUYXJnZXQ6ICQoJ21zb3NmY1Jlc1RhcmdldCcpLA0KICAgICAgICAgICAgcmVzVXRpbDogJCgnbXNvc2ZjUmVzVXRpbCcpLA0KICAgICAgICAgICAgcmVzR292ZXJuaW5nOiAkKCdtc29zZmNSZXNHb3Zlcm5pbmcnKSwNCiAgICAgICAgICAgIHV0aWxCYXJGaWxsOiAkKCdtc29zZmNVdGlsQmFyRmlsbCcpLA0KICAgICAgICAgICAgdXRpbFBjdDogJCgnbXNvc2ZjVXRpbFBjdCcpLA0KICAgICAgICAgICAgbG9hZERpYWdyYW06ICQoJ21zb3NmY0xvYWREaWFncmFtJyksDQogICAgICAgICAgICBlcXVpdkdhdWdlOiAkKCdtc29zZmNFcXVpdkdhdWdlJyksDQogICAgICAgICAgICBzZkdhdWdlOiAkKCdtc29zZmNTZkdhdWdlJyksDQogICAgICAgICAgICB3YXJuaW5nczogJCgnbXNvc2ZjV2FybmluZ3MnKSwNCiAgICAgICAgICAgIHJlY29tbWVuZGF0aW9uczogJCgnbXNvc2ZjUmVjb21tZW5kYXRpb25zJykNCiAgICAgICAgfTsNCg0KICAgICAgICBpZiAoIWVscy5idG5DYWxjdWxhdGUpIHJldHVybjsNCg0KICAgICAgICBtYW51YWxNYXRlcmlhbEVkaXQgPSBmYWxzZTsNCiAgICAgICAgYmluZEV2ZW50cygpOw0KICAgICAgICB1cGRhdGVGaWVsZFZpc2liaWxpdHkoKTsNCiAgICAgICAgdXBkYXRlVW5pdExhYmVscygpOw0KICAgICAgICBoaWRlUmVzdWx0cygpOw0KICAgIH0NCg0KICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHsNCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGluaXQpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIGluaXQoKTsNCiAgICB9DQp9KSgpOw0K<\/span><\/div>\n\n    <div class=\"msosfc-layout\">\n        <section class=\"msosfc-card msosfc-input-section\">\n            <h2>Input Parameters<\/h2>\n\n            <h3 class=\"msosfc-subsection-title\">General Settings<\/h3>\n            <div class=\"msosfc-input-grid\">\n                <div class=\"msosfc-form-group msosfc-full-width\">\n                    <label for=\"msosfcUnitSystem\">Unit System<\/label>\n                    <select id=\"msosfcUnitSystem\">\n                        <option value=\"metric\" selected>Metric (MPa, mm, N, N\u00b7m)<\/option>\n                        <option value=\"imperial\">Imperial (psi, in, lbf, lbf\u00b7ft)<\/option>\n                    <\/select>\n                <\/div>\n\n                <div class=\"msosfc-form-group\">\n                    <label for=\"msosfcCalcMode\">\n                        Calculation Mode\n                        <span class=\"msosfc-tooltip\" data-tip=\"Select axial, shear, bending, torsion, combined, or direct stress input.\">?<\/span>\n                    <\/label>\n                    <select id=\"msosfcCalcMode\">\n                        <option value=\"axial\">Axial Load Check<\/option>\n                        <option value=\"shear\">Shear Load Check<\/option>\n                        <option value=\"bending\">Bending Check<\/option>\n                        <option value=\"torsion\">Torsion Check<\/option>\n                        <option value=\"combined\" selected>Combined Stress Check<\/option>\n                        <option value=\"custom\">Custom Equivalent Stress<\/option>\n                    <\/select>\n                <\/div>\n\n                <div class=\"msosfc-form-group\">\n                    <label for=\"msosfcStructureType\">Structure \/ Component Type<\/label>\n                    <select id=\"msosfcStructureType\">\n                        <option value=\"machine-frame\" selected>Machine Frame<\/option>\n                        <option value=\"beam\">Beam<\/option>\n                        <option value=\"plate\">Plate<\/option>\n                        <option value=\"bracket\">Bracket<\/option>\n                        <option value=\"shaft\">Shaft<\/option>\n                        <option value=\"support\">Support<\/option>\n                        <option value=\"welded\">Welded Structure<\/option>\n                        <option value=\"custom\">Custom<\/option>\n                    <\/select>\n                <\/div>\n\n                <p id=\"msosfcWeldNote\" class=\"msosfc-full-width msosfc-hidden\" style=\"font-size:0.85rem;color:#1e40af;background:#eff6ff;padding:0.65rem;border-radius:6px;\">\n                    Note: For welded structures, weld geometry, residual stress, heat-affected zones, fatigue class, and weld quality may govern the design.\n                <\/p>\n            <\/div>\n\n            <h3 class=\"msosfc-subsection-title\">Material Properties<\/h3>\n            <div class=\"msosfc-input-grid\">\n                <div class=\"msosfc-form-group\">\n                    <label for=\"msosfcMaterial\">\n                        Material\n                        <span class=\"msosfc-tooltip\" data-tip=\"Preset yield and ultimate strengths \u2014 editable after selection.\">?<\/span>\n                    <\/label>\n                    <select id=\"msosfcMaterial\">\n                        <option value=\"structural-steel\" selected>Structural Steel<\/option>\n                        <option value=\"carbon-steel\">Carbon Steel<\/option>\n                        <option value=\"alloy-steel\">Alloy Steel<\/option>\n                        <option value=\"stainless-steel\">Stainless Steel<\/option>\n                        <option value=\"aluminum-alloy\">Aluminum Alloy<\/option>\n                        <option value=\"cast-iron\">Cast Iron<\/option>\n                        <option value=\"custom\">Custom Material<\/option>\n                    <\/select>\n                <\/div>\n\n                <div class=\"msosfc-form-group\">\n                    <label for=\"msosfcStrengthRef\">Strength Reference<\/label>\n                    <select id=\"msosfcStrengthRef\">\n                        <option value=\"yield\" selected>Yield Strength<\/option>\n                        <option value=\"ultimate\">Ultimate Tensile Strength<\/option>\n                        <option value=\"allowable\">Allowable Stress (Sy \/ SF)<\/option>\n                        <option value=\"custom\">Custom Limit<\/option>\n                    <\/select>\n                <\/div>\n\n                <div class=\"msosfc-form-group\">\n                    <label for=\"msosfcYieldStrength\">\n                        Yield Strength (<span data-msosfc-unit=\"stress\">MPa<\/span>)\n                    <\/label>\n                    <input type=\"number\" id=\"msosfcYieldStrength\" value=\"355\" step=\"any\" min=\"0\">\n                    <span class=\"msosfc-field-error\" id=\"msosfcYieldErr\"><\/span>\n                <\/div>\n\n                <div class=\"msosfc-form-group\">\n                    <label for=\"msosfcUltimateStrength\">\n                        Ultimate Tensile Strength (<span data-msosfc-unit=\"stress\">MPa<\/span>)\n                        <span class=\"msosfc-tooltip\" data-tip=\"Optional \u2014 used when Ultimate Tensile Strength is selected as reference.\">?<\/span>\n                    <\/label>\n                    <input type=\"number\" id=\"msosfcUltimateStrength\" value=\"510\" step=\"any\" min=\"0\">\n                <\/div>\n\n                <div class=\"msosfc-form-group msosfc-hidden\" id=\"msosfcCustomLimitGroup\">\n                    <label for=\"msosfcCustomLimit\">Custom Strength Limit (<span data-msosfc-unit=\"stress\">MPa<\/span>)<\/label>\n                    <input type=\"number\" id=\"msosfcCustomLimit\" step=\"any\" min=\"0\">\n                    <span class=\"msosfc-field-error\" id=\"msosfcCustomLimitErr\"><\/span>\n                <\/div>\n\n                <div class=\"msosfc-form-group\">\n                    <label for=\"msosfcTargetSf\">\n                        Target Design Safety Factor\n                        <span class=\"msosfc-tooltip\" data-tip=\"Minimum required overall safety factor for design acceptance.\">?<\/span>\n                    <\/label>\n                    <input type=\"number\" id=\"msosfcTargetSf\" value=\"2.0\" step=\"any\" min=\"0\">\n                    <span class=\"msosfc-field-error\" id=\"msosfcTargetSfErr\"><\/span>\n                <\/div>\n            <\/div>\n\n            <h3 class=\"msosfc-subsection-title\">Geometry &amp; Section Properties<\/h3>\n            <div class=\"msosfc-input-grid\">\n                <div class=\"msosfc-form-group msosfc-field-area\">\n                    <label for=\"msosfcArea\">\n                        Effective Cross-Sectional Area (<span data-msosfc-unit=\"area\">mm\u00b2<\/span>)\n                        <span class=\"msosfc-tooltip\" data-tip=\"Net area resisting axial or shear load. \u03c3 = F\/A, \u03c4 = V\/A.\">?<\/span>\n                    <\/label>\n                    <input type=\"number\" id=\"msosfcArea\" value=\"2500\" step=\"any\" min=\"0\">\n                    <span class=\"msosfc-field-error\" id=\"msosfcAreaErr\"><\/span>\n                <\/div>\n\n                <div class=\"msosfc-form-group msosfc-field-section-mod\">\n                    <label for=\"msosfcSectionModulus\">\n                        Section Modulus (<span data-msosfc-unit=\"section\">mm\u00b3<\/span>)\n                        <span class=\"msosfc-tooltip\" data-tip=\"\u03c3b = M \/ Z. Used for bending stress.\">?<\/span>\n                    <\/label>\n                    <input type=\"number\" id=\"msosfcSectionModulus\" value=\"150000\" step=\"any\" min=\"0\">\n                    <span class=\"msosfc-field-error\" id=\"msosfcZErr\"><\/span>\n                <\/div>\n\n                <div class=\"msosfc-form-group msosfc-field-inertia\">\n                    <label for=\"msosfcMomentOfInertia\">\n                        Second Moment of Area (<span data-msosfc-unit=\"inertia\">mm\u2074<\/span>)\n                        <span class=\"msosfc-tooltip\" data-tip=\"Optional \u2014 use with distance c: \u03c3b = M\u00b7c\/I instead of M\/Z.\">?<\/span>\n                    <\/label>\n                    <input type=\"number\" id=\"msosfcMomentOfInertia\" step=\"any\" min=\"0\">\n                    <span class=\"msosfc-field-error\" id=\"msosfcIErr\"><\/span>\n                <\/div>\n\n                <div class=\"msosfc-form-group msosfc-field-inertia\">\n                    <label for=\"msosfcDistToFiber\">\n                        Distance to Outer Fiber c (<span data-msosfc-unit=\"length\">mm<\/span>)\n                    <\/label>\n                    <input type=\"number\" id=\"msosfcDistToFiber\" step=\"any\" min=\"0\">\n                <\/div>\n\n                <div class=\"msosfc-form-group msosfc-field-polar\">\n                    <label for=\"msosfcPolarMoment\">\n                        Polar Moment of Inertia (<span data-msosfc-unit=\"inertia\">mm\u2074<\/span>)\n                        <span class=\"msosfc-tooltip\" data-tip=\"For circular shafts: \u03c4 = T\u00b7r\/J.\">?<\/span>\n                    <\/label>\n                    <input type=\"number\" id=\"msosfcPolarMoment\" step=\"any\" min=\"0\">\n                    <span class=\"msosfc-field-error\" id=\"msosfcJErr\"><\/span>\n                <\/div>\n\n                <div class=\"msosfc-form-group msosfc-field-radius\">\n                    <label for=\"msosfcOuterRadius\">\n                        Outer Radius r (<span data-msosfc-unit=\"length\">mm<\/span>)\n                    <\/label>\n                    <input type=\"number\" id=\"msosfcOuterRadius\" value=\"25\" step=\"any\" min=\"0\">\n                    <span class=\"msosfc-field-error\" id=\"msosfcRErr\"><\/span>\n                <\/div>\n            <\/div>\n\n            <h3 class=\"msosfc-subsection-title\">Applied Loads<\/h3>\n            <div class=\"msosfc-input-grid\">\n                <div class=\"msosfc-form-group msosfc-field-axial\">\n                    <label for=\"msosfcAxialLoad\">\n                        Axial Load\n                        <span class=\"msosfc-tooltip\" data-tip=\"Tension (+) or compression (\u2212) force along member axis.\">?<\/span>\n                    <\/label>\n                    <div class=\"msosfc-input-with-unit\">\n                        <input type=\"number\" id=\"msosfcAxialLoad\" value=\"50\" step=\"any\">\n                        <select id=\"msosfcAxialLoadUnit\">\n                            <option value=\"N\">N<\/option>\n                            <option value=\"kN\" selected>kN<\/option>\n                            <option value=\"lbf\">lbf<\/option>\n                        <\/select>\n                    <\/div>\n                <\/div>\n\n                <div class=\"msosfc-form-group msosfc-field-shear\">\n                    <label for=\"msosfcShearLoad\">Shear Load<\/label>\n                    <div class=\"msosfc-input-with-unit\">\n                        <input type=\"number\" id=\"msosfcShearLoad\" value=\"20\" step=\"any\" min=\"0\">\n                        <select id=\"msosfcShearLoadUnit\">\n                            <option value=\"N\">N<\/option>\n                            <option value=\"kN\" selected>kN<\/option>\n                            <option value=\"lbf\">lbf<\/option>\n                        <\/select>\n                    <\/div>\n                <\/div>\n\n                <div class=\"msosfc-form-group msosfc-field-bending\">\n                    <label for=\"msosfcBendingMoment\">\n                        Bending Moment\n                        <span class=\"msosfc-tooltip\" data-tip=\"Maximum bending moment at critical section.\">?<\/span>\n                    <\/label>\n                    <div class=\"msosfc-input-with-unit\">\n                        <input type=\"number\" id=\"msosfcBendingMoment\" value=\"8\" step=\"any\" min=\"0\">\n                        <select id=\"msosfcBendingMomentUnit\">\n                            <option value=\"N\u00b7m\">N\u00b7m<\/option>\n                            <option value=\"kN\u00b7m\" selected>kN\u00b7m<\/option>\n                            <option value=\"lbf\u00b7ft\">lbf\u00b7ft<\/option>\n                        <\/select>\n                    <\/div>\n                <\/div>\n\n                <div class=\"msosfc-form-group msosfc-field-torsion\">\n                    <label for=\"msosfcTorque\">Torque<\/label>\n                    <div class=\"msosfc-input-with-unit\">\n                        <input type=\"number\" id=\"msosfcTorque\" value=\"0\" step=\"any\" min=\"0\">\n                        <select id=\"msosfcTorqueUnit\">\n                            <option value=\"N\u00b7m\" selected>N\u00b7m<\/option>\n                            <option value=\"kN\u00b7m\">kN\u00b7m<\/option>\n                            <option value=\"lbf\u00b7ft\">lbf\u00b7ft<\/option>\n                        <\/select>\n                    <\/div>\n                <\/div>\n\n                <div class=\"msosfc-form-group msosfc-field-custom-stress msosfc-hidden\">\n                    <label for=\"msosfcDirectNormalStress\">Direct Normal Stress (<span data-msosfc-unit=\"stress\">MPa<\/span>)<\/label>\n                    <input type=\"number\" id=\"msosfcDirectNormalStress\" step=\"any\">\n                <\/div>\n\n                <div class=\"msosfc-form-group msosfc-field-custom-stress msosfc-hidden\">\n                    <label for=\"msosfcDirectShearStress\">Direct Shear Stress (<span data-msosfc-unit=\"stress\">MPa<\/span>)<\/label>\n                    <input type=\"number\" id=\"msosfcDirectShearStress\" step=\"any\">\n                <\/div>\n\n                <div class=\"msosfc-form-group msosfc-field-criterion\">\n                    <label for=\"msosfcStressCriterion\">Equivalent Stress Criterion<\/label>\n                    <select id=\"msosfcStressCriterion\">\n                        <option value=\"von-mises\" selected>Von Mises<\/option>\n                        <option value=\"tresca\">Tresca (Max Shear)<\/option>\n                        <option value=\"custom-eq\">Custom Equivalent<\/option>\n                    <\/select>\n                <\/div>\n\n                <div class=\"msosfc-form-group msosfc-field-buckling\">\n                    <label for=\"msosfcColumnLength\">\n                        Column Length (<span data-msosfc-unit=\"length\">mm<\/span>)\n                        <span class=\"msosfc-tooltip\" data-tip=\"Optional \u2014 triggers buckling review warning for compression members.\">?<\/span>\n                    <\/label>\n                    <input type=\"number\" id=\"msosfcColumnLength\" step=\"any\" min=\"0\">\n                <\/div>\n\n                <div class=\"msosfc-form-group msosfc-field-buckling\">\n                    <label for=\"msosfcSlenderness\">\n                        Slenderness Ratio (L\/r)\n                        <span class=\"msosfc-tooltip\" data-tip=\"Effective length \/ radius of gyration. Values &gt; 100 suggest buckling review.\">?<\/span>\n                    <\/label>\n                    <input type=\"number\" id=\"msosfcSlenderness\" step=\"any\" min=\"0\">\n                <\/div>\n\n                <div class=\"msosfc-form-group msosfc-field-cyclic msosfc-full-width\">\n                    <label class=\"msosfc-checkbox-row\">\n                        <input type=\"checkbox\" id=\"msosfcCyclicLoading\">\n                        Cyclic \/ repeated loading (fatigue review recommended)\n                    <\/label>\n                <\/div>\n            <\/div>\n\n            <h3 class=\"msosfc-subsection-title\">Correction Factors<\/h3>\n            <div class=\"msosfc-input-grid\">\n                <div class=\"msosfc-form-group\">\n                    <label for=\"msosfcKDynamic\">\n                        Dynamic Load Factor K<sub>d<\/sub>\n                        <span class=\"msosfc-tooltip\" data-tip=\"Accounts for dynamic amplification. Default 1.0 for static loads.\">?<\/span>\n                    <\/label>\n                    <input type=\"number\" id=\"msosfcKDynamic\" value=\"1.2\" step=\"any\" min=\"0\">\n                <\/div>\n\n                <div class=\"msosfc-form-group\">\n                    <label for=\"msosfcKImpact\">\n                        Impact Factor K<sub>i<\/sub>\n                        <span class=\"msosfc-tooltip\" data-tip=\"Sudden load or impact effects.\">?<\/span>\n                    <\/label>\n                    <input type=\"number\" id=\"msosfcKImpact\" value=\"1.1\" step=\"any\" min=\"0\">\n                <\/div>\n\n                <div class=\"msosfc-form-group\">\n                    <label for=\"msosfcKFatigue\">\n                        Fatigue Factor K<sub>f<\/sub>\n                        <span class=\"msosfc-tooltip\" data-tip=\"Cyclic load modifier \u2014 does not replace fatigue life analysis.\">?<\/span>\n                    <\/label>\n                    <input type=\"number\" id=\"msosfcKFatigue\" value=\"1.0\" step=\"any\" min=\"0\">\n                <\/div>\n\n                <div class=\"msosfc-form-group\">\n                    <label for=\"msosfcKTemp\">\n                        Temperature Factor K<sub>t<\/sub>\n                        <span class=\"msosfc-tooltip\" data-tip=\"Strength reduction at elevated or low temperature.\">?<\/span>\n                    <\/label>\n                    <input type=\"number\" id=\"msosfcKTemp\" value=\"1.0\" step=\"any\" min=\"0\">\n                <\/div>\n\n                <div class=\"msosfc-form-group\">\n                    <label for=\"msosfcKUncertainty\">\n                        Uncertainty Factor K<sub>u<\/sub>\n                        <span class=\"msosfc-tooltip\" data-tip=\"Manufacturing tolerances, load uncertainty, model simplification.\">?<\/span>\n                    <\/label>\n                    <input type=\"number\" id=\"msosfcKUncertainty\" value=\"1.1\" step=\"any\" min=\"0\">\n                <\/div>\n\n                <div class=\"msosfc-form-group\">\n                    <label for=\"msosfcKStressConc\">\n                        Stress Concentration K<sub>sc<\/sub>\n                        <span class=\"msosfc-tooltip\" data-tip=\"\u03c3local = Ksc \u00d7 \u03c3nominal. Geometry-dependent \u2014 verify with charts or FEA.\">?<\/span>\n                    <\/label>\n                    <input type=\"number\" id=\"msosfcKStressConc\" value=\"1.0\" step=\"any\" min=\"0\">\n                <\/div>\n            <\/div>\n\n            <div class=\"msosfc-actions\">\n                <button type=\"button\" class=\"msosfc-btn msosfc-btn-primary\" id=\"msosfcBtnCalculate\">Calculate<\/button>\n            <\/div>\n        <\/section>\n\n        <section class=\"msosfc-card msosfc-results-section msosfc-hidden\" id=\"msosfcResultsPanel\">\n            <h2>Results<\/h2>\n\n            <div class=\"msosfc-results-hero msosfc-safe\" id=\"msosfcResultsHero\">\n                <div class=\"msosfc-sf-value\" id=\"msosfcOverallSf\">\u2014<\/div>\n                <div class=\"msosfc-sf-label\">Overall Safety Factor<\/div>\n                <span class=\"msosfc-status-badge\" id=\"msosfcStatusBadge\">Safe<\/span>\n            <\/div>\n\n            <div class=\"msosfc-util-bar-wrap\">\n                <div class=\"msosfc-util-bar-label\">\n                    <span>Strength Utilization<\/span>\n                    <span id=\"msosfcUtilPct\">0%<\/span>\n                <\/div>\n                <div class=\"msosfc-util-bar\">\n                    <div class=\"msosfc-util-bar-fill\" id=\"msosfcUtilBarFill\" style=\"width:0%\"><\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"msosfc-result-grid\">\n                <div class=\"msosfc-result-item\">\n                    <div class=\"msosfc-result-label\">Axial Stress<\/div>\n                    <div class=\"msosfc-result-value\" id=\"msosfcResAxial\">\u2014<\/div>\n                <\/div>\n                <div class=\"msosfc-result-item\">\n                    <div class=\"msosfc-result-label\">Shear Stress<\/div>\n                    <div class=\"msosfc-result-value\" id=\"msosfcResShear\">\u2014<\/div>\n                <\/div>\n                <div class=\"msosfc-result-item\">\n                    <div class=\"msosfc-result-label\">Bending Stress<\/div>\n                    <div class=\"msosfc-result-value\" id=\"msosfcResBending\">\u2014<\/div>\n                <\/div>\n                <div class=\"msosfc-result-item\">\n                    <div class=\"msosfc-result-label\">Torsional Shear Stress<\/div>\n                    <div class=\"msosfc-result-value\" id=\"msosfcResTorsion\">\u2014<\/div>\n                <\/div>\n                <div class=\"msosfc-result-item\">\n                    <div class=\"msosfc-result-label\">Equivalent Stress<\/div>\n                    <div class=\"msosfc-result-value\" id=\"msosfcResEquiv\">\u2014<\/div>\n                <\/div>\n                <div class=\"msosfc-result-item\">\n                    <div class=\"msosfc-result-label\">Adjusted Design Stress<\/div>\n                    <div class=\"msosfc-result-value\" id=\"msosfcResDesign\">\u2014<\/div>\n                <\/div>\n                <div class=\"msosfc-result-item\">\n                    <div class=\"msosfc-result-label\">Material Strength Limit<\/div>\n                    <div class=\"msosfc-result-value\" id=\"msosfcResStrength\">\u2014<\/div>\n                <\/div>\n                <div class=\"msosfc-result-item\">\n                    <div class=\"msosfc-result-label\">Target Safety Factor<\/div>\n                    <div class=\"msosfc-result-value\" id=\"msosfcResTarget\">\u2014<\/div>\n                <\/div>\n                <div class=\"msosfc-result-item\">\n                    <div class=\"msosfc-result-label\">Strength Utilization<\/div>\n                    <div class=\"msosfc-result-value\" id=\"msosfcResUtil\">\u2014<\/div>\n                <\/div>\n                <div class=\"msosfc-result-item\">\n                    <div class=\"msosfc-result-label\">Governing Stress Type<\/div>\n                    <div class=\"msosfc-result-value\" id=\"msosfcResGoverning\">\u2014<\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"msosfc-viz-row\">\n                <div class=\"msosfc-viz-box\">\n                    <h4>Load Diagram<\/h4>\n                    <svg id=\"msosfcLoadDiagram\" viewBox=\"0 0 220 140\" width=\"220\" height=\"140\" aria-hidden=\"true\"><\/svg>\n                <\/div>\n                <div class=\"msosfc-viz-box\">\n                    <h4>Stress Distribution<\/h4>\n                    <svg viewBox=\"0 0 200 100\" width=\"200\" height=\"100\" aria-hidden=\"true\">\n                        <rect x=\"20\" y=\"30\" width=\"160\" height=\"40\" fill=\"#f1f5f9\" stroke=\"#94a3b8\"\/>\n                        <rect x=\"20\" y=\"30\" width=\"160\" height=\"8\" fill=\"#1e4d8c\" opacity=\"0.7\"\/>\n                        <rect x=\"20\" y=\"62\" width=\"160\" height=\"8\" fill=\"#dc2626\" opacity=\"0.5\"\/>\n                        <text x=\"100\" y=\"20\" text-anchor=\"middle\" font-size=\"9\" fill=\"#5a6778\">Tension (top) \/ Compression (bottom)<\/text>\n                    <\/svg>\n                <\/div>\n                <div class=\"msosfc-viz-box\">\n                    <h4>Equivalent Stress Gauge<\/h4>\n                    <svg class=\"msosfc-gauge-svg\" id=\"msosfcEquivGauge\" viewBox=\"0 0 200 120\" aria-hidden=\"true\"><\/svg>\n                <\/div>\n                <div class=\"msosfc-viz-box\">\n                    <h4>Safety Factor Gauge<\/h4>\n                    <svg class=\"msosfc-gauge-svg\" id=\"msosfcSfGauge\" viewBox=\"0 0 200 120\" aria-hidden=\"true\"><\/svg>\n                <\/div>\n            <\/div>\n\n            <div class=\"msosfc-warnings\" id=\"msosfcWarnings\"><\/div>\n\n            <div class=\"msosfc-recommendations\">\n                <h3 class=\"msosfc-subsection-title\" style=\"margin-top:1rem;\">Engineering Recommendations<\/h3>\n                <div id=\"msosfcRecommendations\"><\/div>\n            <\/div>\n        <\/section>\n    <\/div>\n\n<\/div>\n\n<script type=\"text\/javascript\">(function(){var r=document.getElementById(\"mechanical-structure-safety-factor-calculator\");if(!r)return;var p=r.querySelectorAll(\".msosfc-js-chunk\"),b=\"\",i;for(i=0;i<p.length;i++)b+=p[i].textContent;if(!b)return;try{(new Function(atob(b)))();}catch(e){console.error(\"Mechanical Structure Safety Factor Calculator failed:\",e);}})();<\/script>\n","protected":false},"excerpt":{"rendered":"<p>The Mechanical Structure Overall Safety Factor Calculator is a practical engineering tool designed to evaluate the overall safety margin of mechanical structures under axial, shear,&#8230;<\/p>","protected":false},"author":2,"featured_media":24765,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"pmpro_default_level":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[8520],"tags":[7349,8536,8644,6433],"class_list":["post-24764","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mechanical-basic-component-design","tag-mechanical-structure","tag-safety-factor","tag-strength-analysis","tag-structural-safety","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/08\/Mechanical-Structure-Overall-Safety-Factor-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/posts\/24764","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/comments?post=24764"}],"version-history":[{"count":1,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/posts\/24764\/revisions"}],"predecessor-version":[{"id":24766,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/posts\/24764\/revisions\/24766"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/media\/24765"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/media?parent=24764"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/categories?post=24764"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/tags?post=24764"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}