{
    "hints": {
        "change_admin_1(account)void": {
            "call_config": {
                "no_op": "CALL"
            }
        },
        "change_admin_2()void": {
            "call_config": {
                "no_op": "CALL"
            }
        },
        "change_fee_addr(account)void": {
            "call_config": {
                "no_op": "CALL"
            }
        },
        "change_default_fee_bps(uint64)void": {
            "call_config": {
                "no_op": "CALL"
            }
        },
        "change_setup_fee(uint64)void": {
            "call_config": {
                "no_op": "CALL"
            }
        },
        "change_abel_app_id(uint64)void": {
            "call_config": {
                "no_op": "CALL"
            }
        },
        "change_allowlist_labels(string[])void": {
            "call_config": {
                "no_op": "CALL"
            }
        },
        "change_banlist_labels(string[])void": {
            "call_config": {
                "no_op": "CALL"
            }
        },
        "optin(asset)void": {
            "call_config": {
                "no_op": "CALL"
            }
        },
        "create(account,uint64,uint64,asset,uint64,asset,uint64,uint64,uint64,string)(uint64,uint64)": {
            "call_config": {
                "no_op": "CALL"
            }
        },
        "set_id_counter(uint64)void": {
            "call_config": {
                "no_op": "CALL"
            }
        },
        "get_meta((uint32,uint32,uint32,uint64,uint64,uint64,uint64))string": {
            "call_config": {
                "no_op": "CALL"
            },
            "structs": {
                "registry_key": {
                    "name": "RegistryKey",
                    "elements": [
                        [
                            "id",
                            "uint32"
                        ],
                        [
                            "original_time_start",
                            "uint32"
                        ],
                        [
                            "original_time_end",
                            "uint32"
                        ],
                        [
                            "selling_asset_id",
                            "uint64"
                        ],
                        [
                            "selling_amount",
                            "uint64"
                        ],
                        [
                            "purchase_asset_id",
                            "uint64"
                        ],
                        [
                            "purchase_price_per_100m",
                            "uint64"
                        ]
                    ]
                }
            }
        },
        "set_meta((uint32,uint32,uint32,uint64,uint64,uint64,uint64),string)void": {
            "call_config": {
                "no_op": "CALL"
            },
            "structs": {
                "registry_key": {
                    "name": "RegistryKey",
                    "elements": [
                        [
                            "id",
                            "uint32"
                        ],
                        [
                            "original_time_start",
                            "uint32"
                        ],
                        [
                            "original_time_end",
                            "uint32"
                        ],
                        [
                            "selling_asset_id",
                            "uint64"
                        ],
                        [
                            "selling_amount",
                            "uint64"
                        ],
                        [
                            "purchase_asset_id",
                            "uint64"
                        ],
                        [
                            "purchase_price_per_100m",
                            "uint64"
                        ]
                    ]
                }
            }
        },
        "cleanup(account,uint32,uint32,uint32,asset,uint64,asset,uint64)void": {
            "call_config": {
                "no_op": "CALL"
            }
        },
        "get_registry_key(uint32,uint64,uint64,uint64,uint64,uint32,uint32)(uint32,uint32,uint32,uint64,uint64,uint64,uint64)": {
            "call_config": {
                "no_op": "CALL"
            },
            "structs": {
                "output": {
                    "name": "RegistryKey",
                    "elements": [
                        [
                            "id",
                            "uint32"
                        ],
                        [
                            "original_time_start",
                            "uint32"
                        ],
                        [
                            "original_time_end",
                            "uint32"
                        ],
                        [
                            "selling_asset_id",
                            "uint64"
                        ],
                        [
                            "selling_amount",
                            "uint64"
                        ],
                        [
                            "purchase_asset_id",
                            "uint64"
                        ],
                        [
                            "purchase_price_per_100m",
                            "uint64"
                        ]
                    ]
                }
            }
        },
        "get_app_ids((uint32,uint32,uint32,uint64,uint64,uint64,uint64)[])uint64[]": {
            "read_only": true,
            "call_config": {
                "no_op": "CALL"
            }
        },
        "get_bench_states((uint32,uint32,uint32,uint64,uint64,uint64,uint64)[])(uint32,uint64,address,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,address,uint64,uint64,byte[],uint8,byte[],uint8)[]": {
            "read_only": true,
            "call_config": {
                "no_op": "CALL"
            }
        },
        "log_bench_states((uint32,uint32,uint32,uint64,uint64,uint64,uint64)[])void": {
            "read_only": true,
            "call_config": {
                "no_op": "CALL"
            }
        },
        "log_bench_states_with_meta((uint32,uint32,uint32,uint64,uint64,uint64,uint64)[])void": {
            "read_only": true,
            "call_config": {
                "no_op": "CALL"
            }
        },
        "log_bench_meta((uint32,uint32,uint32,uint64,uint64,uint64,uint64)[])void": {
            "read_only": true,
            "call_config": {
                "no_op": "CALL"
            }
        },
        "noop()void": {
            "call_config": {
                "no_op": "CALL"
            }
        }
    },
    "source": {
        "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMucmVnaXN0cnkuY29udHJhY3QuUmVnaXN0cnkuX19hbGdvcHlfZW50cnlwb2ludF93aXRoX2luaXQoKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDIgNgogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1ICJpZF9jb3VudGVyIiAweCAweDAwICJzZXR1cF9mZWUiICJhYmVsX2FwcF9pZCIgImJhbmxpc3RfbGFiZWxzIiAiYWxsb3dsaXN0X2xhYmVscyIgMHg3ZjE5ZjlkNCAiYWRtaW5fYWRkciIgImZlZV9hZGRyIiAiZGVmYXVsdF9mZWVfYnBzIiAweDdlYTc1NDYxIDB4ZWRlYzg5NWIgMHg4NGM1YTY0ZCAiRVJSOlVOQVVUSCIgIkVSUjoxU1QgQVBQIElEIiAiRVJSOjFTVCBBUFAgU0lHIiAiRVJSOjFTVCBBUFAgT0MiICJFUlI6TUVUQUxFTiIgMHgwMDBhICJFUlI6Tk9URk9VTkQiIDB4MDAwMCAweDAwMDIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo2NwogICAgLy8gc2VsZi5pZF9jb3VudGVyID0gVUludDY0KDApCiAgICBieXRlY18xIC8vICJpZF9jb3VudGVyIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NjgKICAgIC8vIHNlbGYuYWRtaW5fYWRkciA9IFR4bi5zZW5kZXIKICAgIGJ5dGVjIDkgLy8gImFkbWluX2FkZHIiCiAgICB0eG4gU2VuZGVyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjY5CiAgICAvLyBzZWxmLmZlZV9hZGRyID0gVHhuLnNlbmRlcgogICAgYnl0ZWMgMTAgLy8gImZlZV9hZGRyIgogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo3MAogICAgLy8gc2VsZi5kZWZhdWx0X2ZlZV9icHMgPSBVSW50NjQoMTApCiAgICBieXRlYyAxMSAvLyAiZGVmYXVsdF9mZWVfYnBzIgogICAgcHVzaGludCAxMCAvLyAxMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo3MQogICAgLy8gc2VsZi5zZXR1cF9mZWUgPSBVSW50NjQoMV8zMDBfMDAwKQogICAgYnl0ZWMgNCAvLyAic2V0dXBfZmVlIgogICAgcHVzaGludCAxMzAwMDAwIC8vIDEzMDAwMDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NzIKICAgIC8vIHNlbGYuYWJlbF9hcHBfaWQgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDUgLy8gImFiZWxfYXBwX2lkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NzMKICAgIC8vIHNlbGYuYmFubGlzdF9sYWJlbHMgPSBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlN0cmluZ10oYXJjNC5TdHJpbmcoIm1iIikpCiAgICBieXRlYyA2IC8vICJiYW5saXN0X2xhYmVscyIKICAgIHB1c2hieXRlcyAweDAwMDEwMDAyMDAwMjZkNjIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NzQKICAgIC8vIHNlbGYuYWxsb3dsaXN0X2xhYmVscyA9IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXSgKICAgIGJ5dGVjIDcgLy8gImFsbG93bGlzdF9sYWJlbHMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NzQtNzYKICAgIC8vIHNlbGYuYWxsb3dsaXN0X2xhYmVscyA9IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXSgKICAgIC8vICAgICBhcmM0LlN0cmluZygicHYiKSwgYXJjNC5TdHJpbmcoIm1mIikKICAgIC8vICkKICAgIHB1c2hieXRlcyAweDAwMDIwMDA0MDAwODAwMDI3MDc2MDAwMjZkNjYKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo1OC02NQogICAgLy8gY2xhc3MgUmVnaXN0cnkoCiAgICAvLyAgICAgQVJDNENvbnRyYWN0LAogICAgLy8gICAgIHNjcmF0Y2hfc2xvdHM9WzIxM10sCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9MTYsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz00OCwKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AyNgogICAgYnl0ZWMgMTMgLy8gbWV0aG9kICJjaGFuZ2VfYWRtaW5fMShhY2NvdW50KXZvaWQiCiAgICBwdXNoYnl0ZXNzIDB4NzA2MGZkZjQgMHhkN2FkYzU1ZSAweDlhZjcwZmYxIDB4ZTJhNzRmMDIgMHg1YzI3YTc2MyAweDM0Mzg1NTkzIDB4ZmM3MTczMTYgLy8gbWV0aG9kICJjaGFuZ2VfYWRtaW5fMigpdm9pZCIsIG1ldGhvZCAiY2hhbmdlX2ZlZV9hZGRyKGFjY291bnQpdm9pZCIsIG1ldGhvZCAiY2hhbmdlX2RlZmF1bHRfZmVlX2Jwcyh1aW50NjQpdm9pZCIsIG1ldGhvZCAiY2hhbmdlX3NldHVwX2ZlZSh1aW50NjQpdm9pZCIsIG1ldGhvZCAiY2hhbmdlX2FiZWxfYXBwX2lkKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJjaGFuZ2VfYWxsb3dsaXN0X2xhYmVscyhzdHJpbmdbXSl2b2lkIiwgbWV0aG9kICJjaGFuZ2VfYmFubGlzdF9sYWJlbHMoc3RyaW5nW10pdm9pZCIKICAgIGJ5dGVjIDggLy8gbWV0aG9kICJvcHRpbihhc3NldCl2b2lkIgogICAgYnl0ZWMgMTQgLy8gbWV0aG9kICJjcmVhdGUoYWNjb3VudCx1aW50NjQsdWludDY0LGFzc2V0LHVpbnQ2NCxhc3NldCx1aW50NjQsdWludDY0LHVpbnQ2NCxzdHJpbmcpKHVpbnQ2NCx1aW50NjQpIgogICAgcHVzaGJ5dGVzcyAweDMxZWI2Y2Q4IDB4MTM0OTRhNGUgMHg3MGQ0MjA5NSAweDFiMGE4YmQzIDB4MDNmODI4ZmMgMHg4MTBkN2M0YyAweDgwMTZhZDQ0IDB4ZmUwZjJjOGIgMHg0ZDU1MzNmZSAweDg5ZWU5N2ZlIDB4ZTgzYTg3YWIgLy8gbWV0aG9kICJzZXRfaWRfY291bnRlcih1aW50NjQpdm9pZCIsIG1ldGhvZCAiZ2V0X21ldGEoKHVpbnQzMix1aW50MzIsdWludDMyLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkpc3RyaW5nIiwgbWV0aG9kICJzZXRfbWV0YSgodWludDMyLHVpbnQzMix1aW50MzIsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSxzdHJpbmcpdm9pZCIsIG1ldGhvZCAiY2xlYW51cChhY2NvdW50LHVpbnQzMix1aW50MzIsdWludDMyLGFzc2V0LHVpbnQ2NCxhc3NldCx1aW50NjQpdm9pZCIsIG1ldGhvZCAiZ2V0X3JlZ2lzdHJ5X2tleSh1aW50MzIsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQzMix1aW50MzIpKHVpbnQzMix1aW50MzIsdWludDMyLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiLCBtZXRob2QgImdldF9hcHBfaWRzKCh1aW50MzIsdWludDMyLHVpbnQzMix1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpW10pdWludDY0W10iLCBtZXRob2QgImdldF9iZW5jaF9zdGF0ZXMoKHVpbnQzMix1aW50MzIsdWludDMyLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NClbXSkodWludDMyLHVpbnQ2NCxhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsYWRkcmVzcyx1aW50NjQsdWludDY0LGJ5dGVbXSx1aW50OCxieXRlW10sdWludDgpW10iLCBtZXRob2QgImxvZ19iZW5jaF9zdGF0ZXMoKHVpbnQzMix1aW50MzIsdWludDMyLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NClbXSl2b2lkIiwgbWV0aG9kICJsb2dfYmVuY2hfc3RhdGVzX3dpdGhfbWV0YSgodWludDMyLHVpbnQzMix1aW50MzIsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KVtdKXZvaWQiLCBtZXRob2QgImxvZ19iZW5jaF9tZXRhKCh1aW50MzIsdWludDMyLHVpbnQzMix1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpW10pdm9pZCIsIG1ldGhvZCAibm9vcCgpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY2hhbmdlX2FkbWluXzFfcm91dGVANSBtYWluX2NoYW5nZV9hZG1pbl8yX3JvdXRlQDYgbWFpbl9jaGFuZ2VfZmVlX2FkZHJfcm91dGVANyBtYWluX2NoYW5nZV9kZWZhdWx0X2ZlZV9icHNfcm91dGVAOCBtYWluX2NoYW5nZV9zZXR1cF9mZWVfcm91dGVAOSBtYWluX2NoYW5nZV9hYmVsX2FwcF9pZF9yb3V0ZUAxMCBtYWluX2NoYW5nZV9hbGxvd2xpc3RfbGFiZWxzX3JvdXRlQDExIG1haW5fY2hhbmdlX2Jhbmxpc3RfbGFiZWxzX3JvdXRlQDEyIG1haW5fb3B0aW5fcm91dGVAMTMgbWFpbl9jcmVhdGVfcm91dGVAMTQgbWFpbl9zZXRfaWRfY291bnRlcl9yb3V0ZUAxNSBtYWluX2dldF9tZXRhX3JvdXRlQDE2IG1haW5fc2V0X21ldGFfcm91dGVAMTcgbWFpbl9jbGVhbnVwX3JvdXRlQDE4IG1haW5fZ2V0X3JlZ2lzdHJ5X2tleV9yb3V0ZUAxOSBtYWluX2dldF9hcHBfaWRzX3JvdXRlQDIwIG1haW5fZ2V0X2JlbmNoX3N0YXRlc19yb3V0ZUAyMSBtYWluX2xvZ19iZW5jaF9zdGF0ZXNfcm91dGVAMjIgbWFpbl9sb2dfYmVuY2hfc3RhdGVzX3dpdGhfbWV0YV9yb3V0ZUAyMyBtYWluX2xvZ19iZW5jaF9tZXRhX3JvdXRlQDI0IG1haW5fbm9vcF9yb3V0ZUAyNQoKbWFpbl9hZnRlcl9pZl9lbHNlQDMwOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU4LTY1CiAgICAvLyBjbGFzcyBSZWdpc3RyeSgKICAgIC8vICAgICBBUkM0Q29udHJhY3QsCiAgICAvLyAgICAgc2NyYXRjaF9zbG90cz1bMjEzXSwKICAgIC8vICAgICBzdGF0ZV90b3RhbHM9U3RhdGVUb3RhbHMoCiAgICAvLyAgICAgICAgIGdsb2JhbF9ieXRlcz0xNiwKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPTQ4LAogICAgLy8gICAgICksCiAgICAvLyApOgogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl9ub29wX3JvdXRlQDI1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ2NwogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2xvZ19iZW5jaF9tZXRhX3JvdXRlQDI0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ1OAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NTgtNjUKICAgIC8vIGNsYXNzIFJlZ2lzdHJ5KAogICAgLy8gICAgIEFSQzRDb250cmFjdCwKICAgIC8vICAgICBzY3JhdGNoX3Nsb3RzPVsyMTNdLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPTE2LAogICAgLy8gICAgICAgICBnbG9iYWxfdWludHM9NDgsCiAgICAvLyAgICAgKSwKICAgIC8vICk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDU4CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGxvZ19iZW5jaF9tZXRhCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2xvZ19iZW5jaF9zdGF0ZXNfd2l0aF9tZXRhX3JvdXRlQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQxMAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NTgtNjUKICAgIC8vIGNsYXNzIFJlZ2lzdHJ5KAogICAgLy8gICAgIEFSQzRDb250cmFjdCwKICAgIC8vICAgICBzY3JhdGNoX3Nsb3RzPVsyMTNdLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPTE2LAogICAgLy8gICAgICAgICBnbG9iYWxfdWludHM9NDgsCiAgICAvLyAgICAgKSwKICAgIC8vICk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDEwCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGxvZ19iZW5jaF9zdGF0ZXNfd2l0aF9tZXRhCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2xvZ19iZW5jaF9zdGF0ZXNfcm91dGVAMjI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6Mzk3CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo1OC02NQogICAgLy8gY2xhc3MgUmVnaXN0cnkoCiAgICAvLyAgICAgQVJDNENvbnRyYWN0LAogICAgLy8gICAgIHNjcmF0Y2hfc2xvdHM9WzIxM10sCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9MTYsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz00OCwKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozOTcKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgbG9nX2JlbmNoX3N0YXRlcwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYmVuY2hfc3RhdGVzX3JvdXRlQDIxOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM4MAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NTgtNjUKICAgIC8vIGNsYXNzIFJlZ2lzdHJ5KAogICAgLy8gICAgIEFSQzRDb250cmFjdCwKICAgIC8vICAgICBzY3JhdGNoX3Nsb3RzPVsyMTNdLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPTE2LAogICAgLy8gICAgICAgICBnbG9iYWxfdWludHM9NDgsCiAgICAvLyAgICAgKSwKICAgIC8vICk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MzgwCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9iZW5jaF9zdGF0ZXMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2FwcF9pZHNfcm91dGVAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MzY5CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo1OC02NQogICAgLy8gY2xhc3MgUmVnaXN0cnkoCiAgICAvLyAgICAgQVJDNENvbnRyYWN0LAogICAgLy8gICAgIHNjcmF0Y2hfc2xvdHM9WzIxM10sCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9MTYsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz00OCwKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozNjkKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2FwcF9pZHMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X3JlZ2lzdHJ5X2tleV9yb3V0ZUAxOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozNDgKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NTgtNjUKICAgIC8vIGNsYXNzIFJlZ2lzdHJ5KAogICAgLy8gICAgIEFSQzRDb250cmFjdCwKICAgIC8vICAgICBzY3JhdGNoX3Nsb3RzPVsyMTNdLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPTE2LAogICAgLy8gICAgICAgICBnbG9iYWxfdWludHM9NDgsCiAgICAvLyAgICAgKSwKICAgIC8vICk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MzQ4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgZ2V0X3JlZ2lzdHJ5X2tleQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jbGVhbnVwX3JvdXRlQDE4OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMxNwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo1OC02NQogICAgLy8gY2xhc3MgUmVnaXN0cnkoCiAgICAvLyAgICAgQVJDNENvbnRyYWN0LAogICAgLy8gICAgIHNjcmF0Y2hfc2xvdHM9WzIxM10sCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9MTYsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz00OCwKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDcKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMxNwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGNsZWFudXAKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X21ldGFfcm91dGVAMTc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MzAwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU4LTY1CiAgICAvLyBjbGFzcyBSZWdpc3RyeSgKICAgIC8vICAgICBBUkM0Q29udHJhY3QsCiAgICAvLyAgICAgc2NyYXRjaF9zbG90cz1bMjEzXSwKICAgIC8vICAgICBzdGF0ZV90b3RhbHM9U3RhdGVUb3RhbHMoCiAgICAvLyAgICAgICAgIGdsb2JhbF9ieXRlcz0xNiwKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPTQ4LAogICAgLy8gICAgICksCiAgICAvLyApOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozMDAKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBzZXRfbWV0YQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfbWV0YV9yb3V0ZUAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToyOTQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NTgtNjUKICAgIC8vIGNsYXNzIFJlZ2lzdHJ5KAogICAgLy8gICAgIEFSQzRDb250cmFjdCwKICAgIC8vICAgICBzY3JhdGNoX3Nsb3RzPVsyMTNdLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPTE2LAogICAgLy8gICAgICAgICBnbG9iYWxfdWludHM9NDgsCiAgICAvLyAgICAgKSwKICAgIC8vICk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6Mjk0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgZ2V0X21ldGEKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0X2lkX2NvdW50ZXJfcm91dGVAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6Mjg4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU4LTY1CiAgICAvLyBjbGFzcyBSZWdpc3RyeSgKICAgIC8vICAgICBBUkM0Q29udHJhY3QsCiAgICAvLyAgICAgc2NyYXRjaF9zbG90cz1bMjEzXSwKICAgIC8vICAgICBzdGF0ZV90b3RhbHM9U3RhdGVUb3RhbHMoCiAgICAvLyAgICAgICAgIGdsb2JhbF9ieXRlcz0xNiwKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPTQ4LAogICAgLy8gICAgICksCiAgICAvLyApOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI4OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHNldF9pZF9jb3VudGVyCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2NyZWF0ZV9yb3V0ZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxNTMKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NTgtNjUKICAgIC8vIGNsYXNzIFJlZ2lzdHJ5KAogICAgLy8gICAgIEFSQzRDb250cmFjdCwKICAgIC8vICAgICBzY3JhdGNoX3Nsb3RzPVsyMTNdLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPTE2LAogICAgLy8gICAgICAgICBnbG9iYWxfdWludHM9NDgsCiAgICAvLyAgICAgKSwKICAgIC8vICk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDcKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDgKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDkKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE1MwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGNyZWF0ZQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9vcHRpbl9yb3V0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxNDgKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NTgtNjUKICAgIC8vIGNsYXNzIFJlZ2lzdHJ5KAogICAgLy8gICAgIEFSQzRDb250cmFjdCwKICAgIC8vICAgICBzY3JhdGNoX3Nsb3RzPVsyMTNdLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPTE2LAogICAgLy8gICAgICAgICBnbG9iYWxfdWludHM9NDgsCiAgICAvLyAgICAgKSwKICAgIC8vICk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBc3NldHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxNDgKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBvcHRpbgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jaGFuZ2VfYmFubGlzdF9sYWJlbHNfcm91dGVAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTQxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU4LTY1CiAgICAvLyBjbGFzcyBSZWdpc3RyeSgKICAgIC8vICAgICBBUkM0Q29udHJhY3QsCiAgICAvLyAgICAgc2NyYXRjaF9zbG90cz1bMjEzXSwKICAgIC8vICAgICBzdGF0ZV90b3RhbHM9U3RhdGVUb3RhbHMoCiAgICAvLyAgICAgICAgIGdsb2JhbF9ieXRlcz0xNiwKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPTQ4LAogICAgLy8gICAgICksCiAgICAvLyApOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE0MQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGNoYW5nZV9iYW5saXN0X2xhYmVscwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jaGFuZ2VfYWxsb3dsaXN0X2xhYmVsc19yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxMzQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NTgtNjUKICAgIC8vIGNsYXNzIFJlZ2lzdHJ5KAogICAgLy8gICAgIEFSQzRDb250cmFjdCwKICAgIC8vICAgICBzY3JhdGNoX3Nsb3RzPVsyMTNdLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPTE2LAogICAgLy8gICAgICAgICBnbG9iYWxfdWludHM9NDgsCiAgICAvLyAgICAgKSwKICAgIC8vICk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTM0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgY2hhbmdlX2FsbG93bGlzdF9sYWJlbHMKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fY2hhbmdlX2FiZWxfYXBwX2lkX3JvdXRlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyOQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo1OC02NQogICAgLy8gY2xhc3MgUmVnaXN0cnkoCiAgICAvLyAgICAgQVJDNENvbnRyYWN0LAogICAgLy8gICAgIHNjcmF0Y2hfc2xvdHM9WzIxM10sCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9MTYsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz00OCwKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxMjkKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBjaGFuZ2VfYWJlbF9hcHBfaWQKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fY2hhbmdlX3NldHVwX2ZlZV9yb3V0ZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEyNAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo1OC02NQogICAgLy8gY2xhc3MgUmVnaXN0cnkoCiAgICAvLyAgICAgQVJDNENvbnRyYWN0LAogICAgLy8gICAgIHNjcmF0Y2hfc2xvdHM9WzIxM10sCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9MTYsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz00OCwKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxMjQKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBjaGFuZ2Vfc2V0dXBfZmVlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2NoYW5nZV9kZWZhdWx0X2ZlZV9icHNfcm91dGVAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxMTkKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NTgtNjUKICAgIC8vIGNsYXNzIFJlZ2lzdHJ5KAogICAgLy8gICAgIEFSQzRDb250cmFjdCwKICAgIC8vICAgICBzY3JhdGNoX3Nsb3RzPVsyMTNdLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPTE2LAogICAgLy8gICAgICAgICBnbG9iYWxfdWludHM9NDgsCiAgICAvLyAgICAgKSwKICAgIC8vICk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTE5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgY2hhbmdlX2RlZmF1bHRfZmVlX2JwcwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jaGFuZ2VfZmVlX2FkZHJfcm91dGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxMTQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NTgtNjUKICAgIC8vIGNsYXNzIFJlZ2lzdHJ5KAogICAgLy8gICAgIEFSQzRDb250cmFjdCwKICAgIC8vICAgICBzY3JhdGNoX3Nsb3RzPVsyMTNdLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPTE2LAogICAgLy8gICAgICAgICBnbG9iYWxfdWludHM9NDgsCiAgICAvLyAgICAgKSwKICAgIC8vICk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExNAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGNoYW5nZV9mZWVfYWRkcgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jaGFuZ2VfYWRtaW5fMl9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjkyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBjaGFuZ2VfYWRtaW5fMgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jaGFuZ2VfYWRtaW5fMV9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU4LTY1CiAgICAvLyBjbGFzcyBSZWdpc3RyeSgKICAgIC8vICAgICBBUkM0Q29udHJhY3QsCiAgICAvLyAgICAgc2NyYXRjaF9zbG90cz1bMjEzXSwKICAgIC8vICAgICBzdGF0ZV90b3RhbHM9U3RhdGVUb3RhbHMoCiAgICAvLyAgICAgICAgIGdsb2JhbF9ieXRlcz0xNiwKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPTQ4LAogICAgLy8gICAgICksCiAgICAvLyApOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo4NwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGNoYW5nZV9hZG1pbl8xCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AyNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo1OC02NQogICAgLy8gY2xhc3MgUmVnaXN0cnkoCiAgICAvLyAgICAgQVJDNENvbnRyYWN0LAogICAgLy8gICAgIHNjcmF0Y2hfc2xvdHM9WzIxM10sCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9MTYsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz00OCwKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHN3aXRjaCBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDI5IG1haW5fYWZ0ZXJfaWZfZWxzZUAzMCBtYWluX2FmdGVyX2lmX2Vsc2VAMzAgbWFpbl9hZnRlcl9pZl9lbHNlQDMwIG1haW5fdXBkYXRlQDI3IG1haW5fZGVsZXRlQDI4CiAgICBiIG1haW5fYWZ0ZXJfaWZfZWxzZUAzMAoKbWFpbl9kZWxldGVAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6ODMKICAgIC8vIEBhcmM0LmJhcmVtZXRob2QoYWxsb3dfYWN0aW9ucz0oIkRlbGV0ZUFwcGxpY2F0aW9uIiwpKQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6ODMtODQKICAgIC8vIEBhcmM0LmJhcmVtZXRob2QoYWxsb3dfYWN0aW9ucz0oIkRlbGV0ZUFwcGxpY2F0aW9uIiwpKQogICAgLy8gZGVmIGRlbGV0ZShzZWxmKSAtPiBOb25lOgogICAgY2FsbHN1YiBkZWxldGUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fdXBkYXRlQDI3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojc5CiAgICAvLyBAYXJjNC5iYXJlbWV0aG9kKGFsbG93X2FjdGlvbnM9KCJVcGRhdGVBcHBsaWNhdGlvbiIsKSkKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojc5LTgwCiAgICAvLyBAYXJjNC5iYXJlbWV0aG9kKGFsbG93X2FjdGlvbnM9KCJVcGRhdGVBcHBsaWNhdGlvbiIsKSkKICAgIC8vIGRlZiB1cGRhdGUoc2VsZikgLT4gTm9uZToKICAgIGNhbGxzdWIgdXBkYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDI5OgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMucmVnaXN0cnkuY29udHJhY3QuUmVnaXN0cnkuY2hhbmdlX2FkbWluXzEobmV3X2FkbWluOiBieXRlcykgLT4gdm9pZDoKY2hhbmdlX2FkbWluXzE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6ODctODgKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGNoYW5nZV9hZG1pbl8xKHNlbGYsIG5ld19hZG1pbjogQWNjb3VudCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojg5CiAgICAvLyBzZWxmLnZhbGlkYXRlX2FkbWluX2NhbGxlcigpCiAgICBjYWxsc3ViIHZhbGlkYXRlX2FkbWluX2NhbGxlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjkwCiAgICAvLyBvcC5TY3JhdGNoLnN0b3JlKDIxMywgbmV3X2FkbWluLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBzdG9yZSAyMTMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5yZWdpc3RyeS5jb250cmFjdC5SZWdpc3RyeS52YWxpZGF0ZV9hZG1pbl9jYWxsZXIoKSAtPiB2b2lkOgp2YWxpZGF0ZV9hZG1pbl9jYWxsZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDcxLTQ3MgogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiB2YWxpZGF0ZV9hZG1pbl9jYWxsZXIoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ3MwogICAgLy8gY3VzdG9tLmVuc3VyZShUeG4uc2VuZGVyID09IHNlbGYuYWRtaW5fYWRkciwgUygiRVJSOlVOQVVUSCIpKQogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDkgLy8gImFkbWluX2FkZHIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWRtaW5fYWRkciBleGlzdHMKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMQogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogdmFsaWRhdGVfYWRtaW5fY2FsbGVyX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ3MwogICAgLy8gY3VzdG9tLmVuc3VyZShUeG4uc2VuZGVyID09IHNlbGYuYWRtaW5fYWRkciwgUygiRVJSOlVOQVVUSCIpKQogICAgYnl0ZWMgMTUgLy8gIkVSUjpVTkFVVEgiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMgogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTMKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnZhbGlkYXRlX2FkbWluX2NhbGxlcl9hZnRlcl9pZl9lbHNlQDM6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMucmVnaXN0cnkuY29udHJhY3QuUmVnaXN0cnkuY2hhbmdlX2FkbWluXzIoKSAtPiB2b2lkOgpjaGFuZ2VfYWRtaW5fMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo5Mi05MwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgY2hhbmdlX2FkbWluXzIoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojk0LTk2CiAgICAvLyAjIHZhbGlkYXRpbmcgdGhhdCB0aGlzIGlzIGNhbGxlZCByaWdodCBhZnRlciBjaGFuZ2VfYWRtaW5fY2FsbGVyXzEKICAgIC8vICMgYW5kIGJ5IHRoZSBuZXcgYWRtaW4KICAgIC8vIGZpcnN0X2NhbGxfaWR4ID0gVHhuLmdyb3VwX2luZGV4IC0gVUludDY0KDEpCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5Ojk3CiAgICAvLyBmaXJzdF9jYWxsID0gZ3R4bi5BcHBsaWNhdGlvbkNhbGxUcmFuc2FjdGlvbihmaXJzdF9jYWxsX2lkeCkKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzMgLy8gYXBwbAogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGFwcGwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo5OQogICAgLy8gZmlyc3RfY2FsbC5hcHBfaWQgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQsIFMoIkVSUjoxU1QgQVBQIElEIikKICAgIGd0eG5zIEFwcGxpY2F0aW9uSUQKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25JRAogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vY3VzdG9tLnB5OjExCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiBjaGFuZ2VfYWRtaW5fMl9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo5OQogICAgLy8gZmlyc3RfY2FsbC5hcHBfaWQgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQsIFMoIkVSUjoxU1QgQVBQIElEIikKICAgIGJ5dGVjIDE2IC8vICJFUlI6MVNUIEFQUCBJRCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vY3VzdG9tLnB5OjEyCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMwogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKY2hhbmdlX2FkbWluXzJfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEwMgogICAgLy8gZmlyc3RfY2FsbC5hcHBfYXJncygwKSA9PSBhcmM0X3NpZ25hdHVyZSgiY2hhbmdlX2FkbWluXzEoYWNjb3VudCl2b2lkIiksCiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18wIC8vIDAKICAgIGd0eG5zYXMgQXBwbGljYXRpb25BcmdzCiAgICBieXRlYyAxMyAvLyBtZXRob2QgImNoYW5nZV9hZG1pbl8xKGFjY291bnQpdm9pZCIKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMQogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogY2hhbmdlX2FkbWluXzJfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTAzCiAgICAvLyBTKCJFUlI6MVNUIEFQUCBTSUciKSwKICAgIGJ5dGVjIDE3IC8vICJFUlI6MVNUIEFQUCBTSUciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMgogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTMKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmNoYW5nZV9hZG1pbl8yX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxMDYKICAgIC8vIGZpcnN0X2NhbGwub25fY29tcGxldGlvbiA9PSBPbkNvbXBsZXRlQWN0aW9uLk5vT3AsIFMoIkVSUjoxU1QgQVBQIE9DIikKICAgIGZyYW1lX2RpZyAwCiAgICBndHhucyBPbkNvbXBsZXRpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vY3VzdG9tLnB5OjExCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJ6IGNoYW5nZV9hZG1pbl8yX2FmdGVyX2lmX2Vsc2VAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxMDYKICAgIC8vIGZpcnN0X2NhbGwub25fY29tcGxldGlvbiA9PSBPbkNvbXBsZXRlQWN0aW9uLk5vT3AsIFMoIkVSUjoxU1QgQVBQIE9DIikKICAgIGJ5dGVjIDE4IC8vICJFUlI6MVNUIEFQUCBPQyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vY3VzdG9tLnB5OjEyCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMwogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKY2hhbmdlX2FkbWluXzJfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxMDkKICAgIC8vIFR4bi5zZW5kZXIuYnl0ZXMgPT0gb3AuZ2xvYWRfYnl0ZXMoZmlyc3RfY2FsbF9pZHgsIDIxMyksCiAgICB0eG4gU2VuZGVyCiAgICBmcmFtZV9kaWcgMAogICAgZ2xvYWRzIDIxMwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vY3VzdG9tLnB5OjExCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiBjaGFuZ2VfYWRtaW5fMl9hZnRlcl9pZl9lbHNlQDE1CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTEwCiAgICAvLyBTKCJFUlI6Q0FMTEVSIiksICAjIGltcG9ydD8/CiAgICBwdXNoYnl0ZXMgIkVSUjpDQUxMRVIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMgogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTMKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmNoYW5nZV9hZG1pbl8yX2FmdGVyX2lmX2Vsc2VAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTEyCiAgICAvLyBzZWxmLmFkbWluX2FkZHIgPSBUeG4uc2VuZGVyCiAgICBieXRlYyA5IC8vICJhZG1pbl9hZGRyIgogICAgdHhuIFNlbmRlcgogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5yZWdpc3RyeS5jb250cmFjdC5SZWdpc3RyeS5jaGFuZ2VfZmVlX2FkZHIobmV3X2ZlZV9hZGRyOiBieXRlcykgLT4gdm9pZDoKY2hhbmdlX2ZlZV9hZGRyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjExNC0xMTUKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGNoYW5nZV9mZWVfYWRkcihzZWxmLCBuZXdfZmVlX2FkZHI6IEFjY291bnQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxMTYKICAgIC8vIHNlbGYudmFsaWRhdGVfYWRtaW5fY2FsbGVyKCkKICAgIGNhbGxzdWIgdmFsaWRhdGVfYWRtaW5fY2FsbGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTE3CiAgICAvLyBzZWxmLmZlZV9hZGRyID0gbmV3X2ZlZV9hZGRyCiAgICBieXRlYyAxMCAvLyAiZmVlX2FkZHIiCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMucmVnaXN0cnkuY29udHJhY3QuUmVnaXN0cnkuY2hhbmdlX2RlZmF1bHRfZmVlX2JwcyhuZXdfZGVmYXVsdF9mZWVfYnBzOiB1aW50NjQpIC0+IHZvaWQ6CmNoYW5nZV9kZWZhdWx0X2ZlZV9icHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTE5LTEyMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgY2hhbmdlX2RlZmF1bHRfZmVlX2JwcyhzZWxmLCBuZXdfZGVmYXVsdF9mZWVfYnBzOiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxMjEKICAgIC8vIHNlbGYudmFsaWRhdGVfYWRtaW5fY2FsbGVyKCkKICAgIGNhbGxzdWIgdmFsaWRhdGVfYWRtaW5fY2FsbGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTIyCiAgICAvLyBzZWxmLmRlZmF1bHRfZmVlX2JwcyA9IG5ld19kZWZhdWx0X2ZlZV9icHMKICAgIGJ5dGVjIDExIC8vICJkZWZhdWx0X2ZlZV9icHMiCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMucmVnaXN0cnkuY29udHJhY3QuUmVnaXN0cnkuY2hhbmdlX3NldHVwX2ZlZShuZXdfc2V0dXBfZmVlOiB1aW50NjQpIC0+IHZvaWQ6CmNoYW5nZV9zZXR1cF9mZWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTI0LTEyNQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgY2hhbmdlX3NldHVwX2ZlZShzZWxmLCBuZXdfc2V0dXBfZmVlOiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxMjYKICAgIC8vIHNlbGYudmFsaWRhdGVfYWRtaW5fY2FsbGVyKCkKICAgIGNhbGxzdWIgdmFsaWRhdGVfYWRtaW5fY2FsbGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTI3CiAgICAvLyBzZWxmLnNldHVwX2ZlZSA9IG5ld19zZXR1cF9mZWUKICAgIGJ5dGVjIDQgLy8gInNldHVwX2ZlZSIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5yZWdpc3RyeS5jb250cmFjdC5SZWdpc3RyeS5jaGFuZ2VfYWJlbF9hcHBfaWQobmV3X2FiZWxfYXBwX2lkOiB1aW50NjQpIC0+IHZvaWQ6CmNoYW5nZV9hYmVsX2FwcF9pZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxMjktMTMwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBjaGFuZ2VfYWJlbF9hcHBfaWQoc2VsZiwgbmV3X2FiZWxfYXBwX2lkOiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxMzEKICAgIC8vIHNlbGYudmFsaWRhdGVfYWRtaW5fY2FsbGVyKCkKICAgIGNhbGxzdWIgdmFsaWRhdGVfYWRtaW5fY2FsbGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTMyCiAgICAvLyBzZWxmLmFiZWxfYXBwX2lkID0gbmV3X2FiZWxfYXBwX2lkCiAgICBieXRlYyA1IC8vICJhYmVsX2FwcF9pZCIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5yZWdpc3RyeS5jb250cmFjdC5SZWdpc3RyeS5jaGFuZ2VfYWxsb3dsaXN0X2xhYmVscyhuZXdfYWxsb3dsaXN0X2xhYmVsczogYnl0ZXMpIC0+IHZvaWQ6CmNoYW5nZV9hbGxvd2xpc3RfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzNC0xMzcKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGNoYW5nZV9hbGxvd2xpc3RfbGFiZWxzKAogICAgLy8gICAgIHNlbGYsIG5ld19hbGxvd2xpc3RfbGFiZWxzOiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlN0cmluZ10KICAgIC8vICkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjEzOAogICAgLy8gc2VsZi52YWxpZGF0ZV9hZG1pbl9jYWxsZXIoKQogICAgY2FsbHN1YiB2YWxpZGF0ZV9hZG1pbl9jYWxsZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxMzkKICAgIC8vIHNlbGYuYWxsb3dsaXN0X2xhYmVscyA9IG5ld19hbGxvd2xpc3RfbGFiZWxzLmNvcHkoKQogICAgYnl0ZWMgNyAvLyAiYWxsb3dsaXN0X2xhYmVscyIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5yZWdpc3RyeS5jb250cmFjdC5SZWdpc3RyeS5jaGFuZ2VfYmFubGlzdF9sYWJlbHMobmV3X2Jhbmxpc3RfbGFiZWxzOiBieXRlcykgLT4gdm9pZDoKY2hhbmdlX2Jhbmxpc3RfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE0MS0xNDQKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGNoYW5nZV9iYW5saXN0X2xhYmVscygKICAgIC8vICAgICBzZWxmLCBuZXdfYmFubGlzdF9sYWJlbHM6IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXQogICAgLy8gKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTQ1CiAgICAvLyBzZWxmLnZhbGlkYXRlX2FkbWluX2NhbGxlcigpCiAgICBjYWxsc3ViIHZhbGlkYXRlX2FkbWluX2NhbGxlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE0NgogICAgLy8gc2VsZi5iYW5saXN0X2xhYmVscyA9IG5ld19iYW5saXN0X2xhYmVscy5jb3B5KCkKICAgIGJ5dGVjIDYgLy8gImJhbmxpc3RfbGFiZWxzIgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnJlZ2lzdHJ5LmNvbnRyYWN0LlJlZ2lzdHJ5Lm9wdGluKGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6Cm9wdGluOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE0OC0xNDkKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIG9wdGluKHNlbGYsIGFzc2V0OiBBc3NldCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ2CiAgICAvLyB0eG4gPSBndHhuLkFwcGxpY2F0aW9uQ2FsbFRyYW5zYWN0aW9uKFR4bi5ncm91cF9pbmRleCArIDIpCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGR1cG4gMgogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMyAvLyBhcHBsCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXBwbAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ3CiAgICAvLyBjdXN0b20uZW5zdXJlKHR4bi5hcHBfaWQgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQsIFMoIkVSUjo0VEggQVBQIElEIikpCiAgICBndHhucyBBcHBsaWNhdGlvbklECiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMQogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogb3B0aW5fYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDcKICAgIC8vIGN1c3RvbS5lbnN1cmUodHhuLmFwcF9pZCA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9pZCwgUygiRVJSOjRUSCBBUFAgSUQiKSkKICAgIHB1c2hieXRlcyAiRVJSOjRUSCBBUFAgSUQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMgogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTMKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCm9wdGluX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0OQogICAgLy8gdHhuLmFwcF9hcmdzKDApCiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18wIC8vIDAKICAgIGd0eG5zYXMgQXBwbGljYXRpb25BcmdzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NTAtNTIKICAgIC8vID09IGFyYzRfc2lnbmF0dXJlKAogICAgLy8gICAgICJjcmVhdGUoYWNjb3VudCx1aW50NjQsdWludDY0LGFzc2V0LHVpbnQ2NCxhc3NldCx1aW50NjQsdWludDY0LHVpbnQ2NCxzdHJpbmcpKHVpbnQ2NCx1aW50NjQpIgogICAgLy8gKSwKICAgIGJ5dGVjIDE0IC8vIG1ldGhvZCAiY3JlYXRlKGFjY291bnQsdWludDY0LHVpbnQ2NCxhc3NldCx1aW50NjQsYXNzZXQsdWludDY0LHVpbnQ2NCx1aW50NjQsc3RyaW5nKSh1aW50NjQsdWludDY0KSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0OS01MgogICAgLy8gdHhuLmFwcF9hcmdzKDApCiAgICAvLyA9PSBhcmM0X3NpZ25hdHVyZSgKICAgIC8vICAgICAiY3JlYXRlKGFjY291bnQsdWludDY0LHVpbnQ2NCxhc3NldCx1aW50NjQsYXNzZXQsdWludDY0LHVpbnQ2NCx1aW50NjQsc3RyaW5nKSh1aW50NjQsdWludDY0KSIKICAgIC8vICksCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTEKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IG9wdGluX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjUzCiAgICAvLyBTKCJFUlI6NFRIIEFQUCBTSUciKSwKICAgIHB1c2hieXRlcyAiRVJSOjRUSCBBUFAgU0lHIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTIKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vY3VzdG9tLnB5OjEzCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpvcHRpbl9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NTUKICAgIC8vIGN1c3RvbS5lbnN1cmUodHhuLm9uX2NvbXBsZXRpb24gPT0gT25Db21wbGV0ZUFjdGlvbi5Ob09wLCBTKCJFUlI6NFRIIEFQUCBPQyIpKQogICAgZnJhbWVfZGlnIDAKICAgIGd0eG5zIE9uQ29tcGxldGlvbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTEKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYnogb3B0aW5fYWZ0ZXJfaWZfZWxzZUAxMQogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjU1CiAgICAvLyBjdXN0b20uZW5zdXJlKHR4bi5vbl9jb21wbGV0aW9uID09IE9uQ29tcGxldGVBY3Rpb24uTm9PcCwgUygiRVJSOjRUSCBBUFAgT0MiKSkKICAgIHB1c2hieXRlcyAiRVJSOjRUSCBBUFAgT0MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMgogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTMKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCm9wdGluX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL3NlbmQucHk6NgogICAgLy8gYXhmZXIoYXNzZXQsIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsIFVJbnQ2NCgwKSkKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL3NlbmQucHk6MjAtMjIKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LCBhc3NldF9yZWNlaXZlcj1yZWNlaXZlciwgYXNzZXRfYW1vdW50PWFtb3VudCwgZmVlPTAKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vc2VuZC5weTo2CiAgICAvLyBheGZlcihhc3NldCwgR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywgVUludDY0KDApKQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9zZW5kLnB5OjIwCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vc2VuZC5weToyMQogICAgLy8geGZlcl9hc3NldD1hc3NldCwgYXNzZXRfcmVjZWl2ZXI9cmVjZWl2ZXIsIGFzc2V0X2Ftb3VudD1hbW91bnQsIGZlZT0wCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vc2VuZC5weToyMC0yMgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsIGFzc2V0X3JlY2VpdmVyPXJlY2VpdmVyLCBhc3NldF9hbW91bnQ9YW1vdW50LCBmZWU9MAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5yZWdpc3RyeS5jb250cmFjdC5SZWdpc3RyeS5jcmVhdGUob3duZXJfYWRkcjogYnl0ZXMsIHRpbWVfc3RhcnQ6IHVpbnQ2NCwgdGltZV9lbmQ6IHVpbnQ2NCwgc2VsbGluZ19hc3NldDogdWludDY0LCBzZWxsaW5nX2Ftb3VudDogdWludDY0LCBwdXJjaGFzZV9hc3NldDogdWludDY0LCBwdXJjaGFzZV9wcmljZV9wZXJfMTAwbTogdWludDY0LCBwdXJjaGFzZV9saW1pdDogdWludDY0LCBjYW5jZWxsYWJsZTogdWludDY0LCBtZXRhOiBieXRlcykgLT4gYnl0ZXM6CmNyZWF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxNTMtMTY2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBjcmVhdGUoCiAgICAvLyAgICAgc2VsZiwKICAgIC8vICAgICBvd25lcl9hZGRyOiBBY2NvdW50LAogICAgLy8gICAgIHRpbWVfc3RhcnQ6IFVJbnQ2NCwKICAgIC8vICAgICB0aW1lX2VuZDogVUludDY0LAogICAgLy8gICAgIHNlbGxpbmdfYXNzZXQ6IEFzc2V0LAogICAgLy8gICAgIHNlbGxpbmdfYW1vdW50OiBVSW50NjQsCiAgICAvLyAgICAgcHVyY2hhc2VfYXNzZXQ6IEFzc2V0LAogICAgLy8gICAgIHB1cmNoYXNlX3ByaWNlX3Blcl8xMDBtOiBVSW50NjQsCiAgICAvLyAgICAgcHVyY2hhc2VfbGltaXQ6IFVJbnQ2NCwKICAgIC8vICAgICBjYW5jZWxsYWJsZTogVUludDY0LAogICAgLy8gICAgIG1ldGE6IFN0cmluZywKICAgIC8vICkgLT4gYXJjNC5UdXBsZVthcmM0LlVJbnQ2NCwgYXJjNC5VSW50NjRdOgogICAgcHJvdG8gMTAgMQogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgYnl0ZWNfMiAvLyAiIgogICAgZHVwbiA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTY3LTE2OAogICAgLy8gIyB2YWxpZGF0ZSBhc3NldHMgcGFzcyBhbGxvdy9iYW4gbGlzdAogICAgLy8gaWYgc2VsZi5hYmVsX2FwcF9pZCAhPSBVSW50NjQoMCk6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAiYWJlbF9hcHBfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWJlbF9hcHBfaWQgZXhpc3RzCiAgICBieiBjcmVhdGVfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTY5CiAgICAvLyBzZWxmLnZhbGlkYXRlX2Fzc2V0KHB1cmNoYXNlX2Fzc2V0KQogICAgZnJhbWVfZGlnIC01CiAgICBjYWxsc3ViIHZhbGlkYXRlX2Fzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTcwCiAgICAvLyBzZWxmLnZhbGlkYXRlX2Fzc2V0KHNlbGxpbmdfYXNzZXQpCiAgICBmcmFtZV9kaWcgLTcKICAgIGNhbGxzdWIgdmFsaWRhdGVfYXNzZXQKCmNyZWF0ZV9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTc2CiAgICAvLyBpZiBwdXJjaGFzZV9hc3NldC5pZCAhPSAwIGFuZCBzZWxsaW5nX2Fzc2V0LmlkICE9IDAKICAgIGZyYW1lX2RpZyAtNQogICAgYnogY3JlYXRlX2Jvb2xfZmFsc2VANQogICAgZnJhbWVfZGlnIC03CiAgICBieiBjcmVhdGVfYm9vbF9mYWxzZUA1CiAgICBpbnRjXzEgLy8gMQoKY3JlYXRlX2Jvb2xfbWVyZ2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxNzcKICAgIC8vIGVsc2UgVUludDY0KDIwMDAwMCkKICAgIHB1c2hpbnRzIDIwMDAwMCAzMDAwMDAgLy8gMjAwMDAwLCAzMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxNzItMTc4CiAgICAvLyAjIGFsZ28gdG8gcGF5IHRvIHRoZSBpbnN0YW5jZSBjb250cmFjdC4gMC4xICsgMnggb3B0aW5zIHVzdWFsbHkKICAgIC8vICMgaWYgZWl0aGVyIHNlbGwgb3IgcHVyY2hzZSBhc3NldHMgYXJlIEFMR08sIHRoZW4gMXggb3B0aW4KICAgIC8vIGFsZ29fc2VlZF9hbXQgPSAoCiAgICAvLyAgICAgVUludDY0KDMwMDAwMCkKICAgIC8vICAgICBpZiBwdXJjaGFzZV9hc3NldC5pZCAhPSAwIGFuZCBzZWxsaW5nX2Fzc2V0LmlkICE9IDAKICAgIC8vICAgICBlbHNlIFVJbnQ2NCgyMDAwMDApCiAgICAvLyApCiAgICB1bmNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxNzUtMTc3CiAgICAvLyBVSW50NjQoMzAwMDAwKQogICAgLy8gaWYgcHVyY2hhc2VfYXNzZXQuaWQgIT0gMCBhbmQgc2VsbGluZ19hc3NldC5pZCAhPSAwCiAgICAvLyBlbHNlIFVJbnQ2NCgyMDAwMDApCiAgICBzZWxlY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxNzItMTc4CiAgICAvLyAjIGFsZ28gdG8gcGF5IHRvIHRoZSBpbnN0YW5jZSBjb250cmFjdC4gMC4xICsgMnggb3B0aW5zIHVzdWFsbHkKICAgIC8vICMgaWYgZWl0aGVyIHNlbGwgb3IgcHVyY2hzZSBhc3NldHMgYXJlIEFMR08sIHRoZW4gMXggb3B0aW4KICAgIC8vIGFsZ29fc2VlZF9hbXQgPSAoCiAgICAvLyAgICAgVUludDY0KDMwMDAwMCkKICAgIC8vICAgICBpZiBwdXJjaGFzZV9hc3NldC5pZCAhPSAwIGFuZCBzZWxsaW5nX2Fzc2V0LmlkICE9IDAKICAgIC8vICAgICBlbHNlIFVJbnQ2NCgyMDAwMDApCiAgICAvLyApCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMgogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTgwLTE4MQogICAgLy8gIyBpZiB3ZSBhcmUgc2VsbGluZyBBTEdPLCBhZGQgaXQgdG8gc2VlZCBhbW91bnQKICAgIC8vIGlmIHNlbGxpbmdfYXNzZXQuaWQgPT0gMDoKICAgIGZyYW1lX2RpZyAtNwogICAgYm56IGNyZWF0ZV9hZnRlcl9pZl9lbHNlQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxODIKICAgIC8vIGFsZ29fc2VlZF9hbXQgKz0gc2VsbGluZ19hbW91bnQKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgLTYKICAgICsKICAgIGZyYW1lX2J1cnkgMwoKY3JlYXRlX2FmdGVyX2lmX2Vsc2VAODoKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxODQtMTg1CiAgICAvLyAjIGlmIHdlIGFyZSBzZWxsaW5nIGEgbm9uIGFsZ28gYXNzZXQsIG11c3QgaGF2ZSBhbiBvcHRpbgogICAgLy8gaWYgc2VsbGluZ19hc3NldC5pZCAhPSAwOgogICAgZnJhbWVfZGlnIC03CiAgICBieiBjcmVhdGVfZWxzZV9ib2R5QDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTg2CiAgICAvLyB2YWxpZGF0ZV9vcHRpbl9hcHBfY2FsbChUeG4uZ3JvdXBfaW5kZXggLSBVSW50NjQoMikpCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18yIC8vIDIKICAgIC0KICAgIGR1cAogICAgZnJhbWVfYnVyeSA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MzYKICAgIC8vIHR4biA9IGd0eG4uQXBwbGljYXRpb25DYWxsVHJhbnNhY3Rpb24odHhuX2lkeCkKICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMyAvLyBhcHBsCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXBwbAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM3CiAgICAvLyBjdXN0b20uZW5zdXJlKHR4bi5hcHBfaWQgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25faWQsIFMoIkVSUjoxU1QgQVBQIElEIikpCiAgICBndHhucyBBcHBsaWNhdGlvbklECiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMQogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogY3JlYXRlX2FmdGVyX2lmX2Vsc2VAMzUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozNwogICAgLy8gY3VzdG9tLmVuc3VyZSh0eG4uYXBwX2lkID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2lkLCBTKCJFUlI6MVNUIEFQUCBJRCIpKQogICAgYnl0ZWMgMTYgLy8gIkVSUjoxU1QgQVBQIElEIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTIKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vY3VzdG9tLnB5OjEzCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpjcmVhdGVfYWZ0ZXJfaWZfZWxzZUAzNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozOQogICAgLy8gdHhuLmFwcF9hcmdzKDApID09IGFyYzRfc2lnbmF0dXJlKCJvcHRpbihhc3NldCl2b2lkIiksIFMoIkVSUjoxU1QgQVBQIFNJRyIpCiAgICBmcmFtZV9kaWcgNgogICAgaW50Y18wIC8vIDAKICAgIGd0eG5zYXMgQXBwbGljYXRpb25BcmdzCiAgICBieXRlYyA4IC8vIG1ldGhvZCAib3B0aW4oYXNzZXQpdm9pZCIKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMQogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogY3JlYXRlX2FmdGVyX2lmX2Vsc2VAMzkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozOQogICAgLy8gdHhuLmFwcF9hcmdzKDApID09IGFyYzRfc2lnbmF0dXJlKCJvcHRpbihhc3NldCl2b2lkIiksIFMoIkVSUjoxU1QgQVBQIFNJRyIpCiAgICBieXRlYyAxNyAvLyAiRVJSOjFTVCBBUFAgU0lHIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTIKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vY3VzdG9tLnB5OjEzCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpjcmVhdGVfYWZ0ZXJfaWZfZWxzZUAzOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0MQogICAgLy8gY3VzdG9tLmVuc3VyZSh0eG4ub25fY29tcGxldGlvbiA9PSBPbkNvbXBsZXRlQWN0aW9uLk5vT3AsIFMoIkVSUjoxU1QgQVBQIE9DIikpCiAgICBmcmFtZV9kaWcgNgogICAgZ3R4bnMgT25Db21wbGV0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMQogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBieiBjcmVhdGVfYWZ0ZXJfaWZfZWxzZUA0MwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQxCiAgICAvLyBjdXN0b20uZW5zdXJlKHR4bi5vbl9jb21wbGV0aW9uID09IE9uQ29tcGxldGVBY3Rpb24uTm9PcCwgUygiRVJSOjFTVCBBUFAgT0MiKSkKICAgIGJ5dGVjIDE4IC8vICJFUlI6MVNUIEFQUCBPQyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vY3VzdG9tLnB5OjEyCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMwogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKY3JlYXRlX2FmdGVyX2lmX2Vsc2VANDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTg4CiAgICAvLyBUeG4uZ3JvdXBfaW5kZXggLSBVSW50NjQoMyksIHNlbGYuc2V0dXBfZmVlICsgYWxnb19zZWVkX2FtdAogICAgdHhuIEdyb3VwSW5kZXgKICAgIHB1c2hpbnQgMyAvLyAzCiAgICAtCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAic2V0dXBfZmVlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNldHVwX2ZlZSBleGlzdHMKICAgIGZyYW1lX2RpZyAyCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTg3LTE4OQogICAgLy8gdmFsaWRhdGUucGF5bWVudF9hbW91bnRfbWluKAogICAgLy8gICAgIFR4bi5ncm91cF9pbmRleCAtIFVJbnQ2NCgzKSwgc2VsZi5zZXR1cF9mZWUgKyBhbGdvX3NlZWRfYW10CiAgICAvLyApCiAgICBjYWxsc3ViIHBheW1lbnRfYW1vdW50X21pbgoKY3JlYXRlX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjAwLTIwOAogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT1jb21waWxlZC5hcHByb3ZhbF9wcm9ncmFtLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09Y29tcGlsZWQuY2xlYXJfc3RhdGVfcHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxfbnVtX2J5dGVzPTIsCiAgICAvLyAgICAgZ2xvYmFsX251bV91aW50PTE2LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gICAgIGV4dHJhX3Byb2dyYW1fcGFnZXM9MSwKICAgIC8vICkKICAgIC8vIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIwNgogICAgLy8gZXh0cmFfcHJvZ3JhbV9wYWdlcz0xLAogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgRXh0cmFQcm9ncmFtUGFnZXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToyMDQKICAgIC8vIGdsb2JhbF9udW1fdWludD0xNiwKICAgIHB1c2hpbnQgMTYgLy8gMTYKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtVWludAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIwMwogICAgLy8gZ2xvYmFsX251bV9ieXRlcz0yLAogICAgaW50Y18yIC8vIDIKICAgIGl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTk3LTE5OAogICAgLy8gIyBjcmVhdGUgYXBwCiAgICAvLyBjb21waWxlZCA9IGNvbXBpbGVfY29udHJhY3QoYmVuY2hfY29udHJhY3QuQmVuY2gpCiAgICBwdXNoYnl0ZXMgYmFzZTY0KENvRUJRdz09KQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbVBhZ2VzCiAgICBwdXNoYnl0ZXMgYmFzZTY0KENpQUZBQUVHQW9EQzF5OG1GdzV3ZFhKamFHRnpaVjloYzNObGRBMXpaV3hzYVc1blgyRnpjMlYwQ0hScGJXVmZaVzVrQ205M2JtVnlYMkZrWkhJTVptVmxjMTloWTJOeWRXVmtFSEpsYldGcGJtbHVaMTloYlc5MWJuUUtkR2x0WlY5emRHRnlkQmR3ZFhKamFHRnpaVjl3Y21salpWOXdaWEpmTVRBd2JRZG1aV1ZmWW5CekNHWmxaVjloWkdSeURuTmxiR3hwYm1kZllXMXZkVzUwRG5CMWNtTm9ZWE5sWDJ4cGJXbDBBbWxrRTI5eWFXZHBibUZzWDNScGJXVmZjM1JoY25RUmIzSnBaMmx1WVd4ZmRHbHRaVjlsYm1RTFkyRnVZMlZzYkdGaWJHVUVGUjk4ZFFSQlRFZFBDMFZTVWpwUFVGUWdVMDVFQ0VWU1VqcFBWa1ZTQzBWU1VqcFFVa2xEUlNBd0NrVlNVanBWVGtGVlZFZ01SVkpTT2s1UFZDQlBWa1ZTTVJoQUFFb3JNZ05uSnd3aVp5Y0dJbWNuRFNKbktpSm5KdzRpWnlraVp5Y0tJbWNuQlNKbktDSm5Kd2NpWnljTEltY25DSUVLWnljSk1nTm5Kd1FpWnljUEltZUFCM1psY25OcGIyNGxaekViUVFHSmdnNEVmeG41MUFUd0YxWDJCQnBtSGUwRUdneVhod1RnbXZDVEJFZ0RPZ2dFSWZIZC93UU5FeGRSQkN3Sjg2VUVsbFlFZWdRYXJiZ3dCSGNFWjVBRWZxZFVZUVFUREJtdE5ob0FqZzRCRGdEMkFMZ0FxQUNVQUlnQWVBQm9BRndBVUFCQkFDb0FHUUFDSWtNeEdSUkVNUmhFTmhvQkY4QXlpQWtaSnhCTVVMQWpRekVaRkVReEdFU0lCK1VuRUV4UXNDTkRNUmtVUkRFWVJEWWFBUmZBTW9nSFB5Y1FURkN3STBNeEdSUkVNUmhFTmhvQmlBYmNJME14R1JSRU1SaEVpQVlOSTBNeEdSUkVNUmhFaUFYQUkwTXhHUlJFTVJoRU5ob0JGNGdGZ3lORE1Sa1VSREVZUkRZYUFSZUlCUG9qUXpFWkZFUXhHRVNJQXU4alF6RVpGRVF4R0VRMkdnR0lBc0VuRUV4UXNDTkRNUmtVUkRFWVJEWWFBUmVJQW5NalF6RVpGRVF4R0VRMkdnRVhOaG9DTmhvRE5ob0VGellhQlJjMkdnWVhOaG9IRjhBd05ob0lGellhQ1JmQU1EWWFDaGMyR2dzWE5ob01GNGdBaUNORE1Sa1VSREVZUkRZYUFSZkFNRFlhQWhmQU1JZ0FVQ05ETVJrVVJERVlSRFlhQVJmQU1JZ0FEU05ETVJsQS90c3hHQlJFSTBPS0FRQXhBRElKRWtBQUJDY1NzQUNML3pJS0lvZ0FBWW1LQXdDeGkvK3lFb3Yrc2hTTC9iSVJnUVN5RUNLeUFiT0ppZ0lBTVFBeUNSSkFBQVFuRXJBQWkvNHlDaUtJLzlDTC96SUtJb2oveUltS0RBQXlBeUlyWlVRU1FBQU9nQXBGVWxJNlNVNUpWRVZFc0FBeEFESUpFa0FBQkNjU3NBQW5ESXYwWnl1TDlXY25DWXYyWnljSWkvZG5pL2hCQUNTTCtVRUFINHY0aS9rTVFBQVhnQk5GVWxJNlUxUkJVbFFnUVVaVVJWSWdSVTVFc0FDTCtVRUFHeklIaS9rTVFBQVRnQTlGVWxJNlJVNUVJRWxPSUZCQlUxU3dBQ0lxWlVSQUFDS0wveU1TUUFBYmdCZEZVbEk2UTBGT1EwVk1JRmN2VHlCRlRrUWdWRWxOUmJBQUp3YUwrR2NuRFl2NFp5cUwrV2NuRG92NVo0djZRUUFUaS9xQURFVlNVanBUUlV4TUlFRkpSSWdBeGltTCttZUwrMEFBRW9BT1JWSlNPbE5GVEV3Z1FVMVVJREN3QUNjS2kvdG5Kd1dMKzJlTC9FRUFFb3Y4Z0F0RlVsSTZVRlZTSUVGSlJJZ0FpaWlML0dlTC9VQUFCQ2NVc0FBbkI0djlaeWNMaS81bmkvOUJBQWVML3lNU1FRQmpJMEFBQkNjVXNBQW5ENHYvWnlJcFpVUkFBRU15Q25NQVJESUtjd0ZFQ1l2N0VrQUFFSUFNUlZKU09sTkZURXdnUVUxVXNBQ0wvRUVBSERJS2kveHdBRVVCUUFBUmdBMUZVbEk2VUZWU0lFOVFWRWxPc0FDSk1nb2lLV1ZFY0FCRVF2KzhJa0wvbW9vQ0FJditjUUJFUUFBRWkvK3dBSW1LQVFDSUFDQWlKd2hsUkl2L0RVQUFENEFMUlZKU09rOVdSVkpHUlVXd0FDY0lpLzluaVlvQUFERUFJaWNKWlVRU1FBQUVKeFd3QUltS0FRR0wvNGdBQWhhSmlnRUJpLys5UlFGQkFBaUwvNzVNRjB4RWlTS0ppZ0FBZ0FCSEJpSW5CbVZFUVFBZUlpY0daVVF5Qnc1QUFCT0FEMFZTVWpwT1QxUWdVMVJCVWxSRlJMQUFJaXBsUkVFQUZ5SXFaVVF5QncxQUFBMkFDVVZTVWpwRlRrUkZSTEFBTVJZakNZd0ZJaWhsUkVBQkZZc0ZpQUZYakFRaUp3dGxSRUVBU1RFQWlQOS9TWXdDUUFBYU1SWWxDWWdCTzRIRWtBRVBRQUFMZ0FkRlVsSTZUVUpTc0FDTEFvc0VDRW1NQUNJbkMyVkVEa0FBRFlBSlJWSlNPbEZWVDFSQnNBQXhBSXNBRnIrTEJCYUFCQVgxNFFDaklpY0haVVFXb2hkSmpBWkFBQkNBREVWU1VqcGFSVkpQSUVGTlZMQUFJaWNGWlVTTEJnOUFBQkNBREVWU1VqcFBWa1ZTVTBWTVRMQUFJaWNHWlVSQUFCTWlKd1ZsUkNJbkNtVkVFa0VBQlNjR01nZG5JaWNGWlVTTEJna25CVXhuSWljRlpVeU1BMFFpSndkbFJDRUVUQXBKakFGQkFBZ2hCSXNCR0VFQU1DT0xBUWlMQXcxQkFBUXFNZ2RuSWlsbFJERUFpd2FJQUlvaUp3aGxSSXNFQzRHUVRnb2lKd1JsUkFnbkJFeG5pU0pDLzgwaUtHVkVpd1ZKT0JDQkJCSkVPQkVTUUFBUWdBeEZVbEk2UVZoR1JWSWdTVVN3QUlzRk9CUXlDaEpBQUJHQURVVlNVanBCV0VaRlVpQlNRMWF3QUlzRk9CS01CRUwrcTRvQkFZdi9PQkFqRWtTTC96Z0hNZ29TUUFBUGdBdEZVbEk2VUVGWklGSkRWckFBaS84NENJbUtBd0NML1VBQUViR0wvN0lJaS82eUJ5T3lFQ0t5QWJPSmkvMkwvb3YvaVB2RWlZb0JBSWdBTG9nQVVJdi9EMEFBQkNjVHNBQ0lBRU9ML3draUp3UmxSQTlBQUFRbkU3QUFJaWhsUkNJclpVU0wvNGovcW9tS0FBQXhBQ0luQ1dWRUVrQUFDakVBSWl0bFJCSkJBQWtqUUFBRUp4V3dBSWtpUXYvMGlnQUJJaWhsUkVBQURESUtjd0JFTWdwekFVUUppVElLSWlobFJIQUFSSW1LQVFDSS9WQWlKd1JsUkl2L0QwQUFCQ2NUc0FBaUtHVkVNUUNMLzRqL1JDSW5CR1ZFaS84Skp3Uk1aNG1LQUFDSS80Z2lKd1ZsUkVFQUhTSW5EMlZFUUFBVklpcGxSRUVBRGlJcVpVUXlCd3hBQUFRbkZyQUFJaXBsUkVFQUNpSXFaVVF5QncxQkFBUXFNZ2RuaVlvQUFJai9SNGdBakNJbkJHVkVRUUFSSWlobFJDSW5DV1ZFSWljRVpVU0kvdFFpS0dWRVFRQW9JaXRsUkNJb1pVUndBRVVCUUFBT2dBcEZVbEk2VDFCVVNVNVFzQUFpS0dWRUlpdGxSSWdBVmlJcFpVUkJBQ2dpSzJWRUlpbGxSSEFBUlFGQUFBNkFDa1ZTVWpwUFVGUkpUbE93QUNJcFpVUWlLMlZFaUFBbklpdGxSTEZKc2draXNnaXlCeU95RUNLeUFiT0ppZ0FBSWlwbFJESUhEa0FBQkNjV3NBQ0ppZ0lBc1l2L3NoVWlzaEtMLzdJVWkvNnlFWUVFc2hBaXNnR3ppWW9CQUlBQWlQL0tpUDUvaS84aVdTS0xBb3NCREVtTUFFRUFNNHYvVndJQWl3QkVpd0lsQzBzQlRGbEtXU1VJV0ZjQ0FMeEFBQTZBQ2tWU1VqcENUMWhFUlV5d0FJc0NJd2lNQWtML3dvbUtBUUdMLzRnQUFZbUtBUUdMLzNJSVJESUpFa0FBRDRBTFJWSlNPbEpGUjE5QlVGQ3dBQ0luREdWRUZsY0VCQ0luRFdWRUZsY0VCQ0luRG1WRUZsY0VCQ0lwWlVRV0lpY0taVVFXSWlobFJCWWlKd2RsUkJaUEJrOEdVRThGVUU4RVVFOERVRThDVUV4UXNZdi9zaGlBQkJOSlNrNnlHcklhSkxJUUlySUJzN1ErU1ZjRUFFeFhBQVFuRUJKRWlZb0FBU0pIQXljTVpVUVdWd1FFTWdnV0lpdGxSQ0luQm1WRUZpSW5EV1ZFRmlJcVpVUVdJaWNPWlVRV0lpbGxSQllpSndwbFJCWWlKd1ZsUkJZaUtHVkVGaUluQjJWRUZpSW5DMlZFRmlJbkNHVkVGaUluQ1dWRUlpY0VaVVFXSWljUFpVUVdJaWxsUkVFQXNpSXBaVVJ4QTBSSkZSWlhCZ0pNVUl3QUlpbGxSRUVBbGlJcFpVUnhBVVFXVndjQmpBSWlLR1ZFUVFCOUlpaGxSSEVEUkVrVkZsY0dBa3hRakFFaUtHVkVRUUJoSWlobFJIRUJSQlpYQndHTEE0c0VVSXNGVUlzR1VJc0hVSXNJVUlzSlVJc0tVSXNMVUlzTVVJc05VSXNPVUlzUFVJc1FVSXNSVUlzU1VJc1RVSUFDQUxwUWl3QkpUZ0lWZ2JvQkNFeUxBbEJNRmxjR0FsQlBBbEJNVUlzQlVJd0FpU1JDLzZJbkVVTC9oU1JDLzIwbkVVTC9VSW9CQVNKSEFvdi9pUDVNSWljTVpVUVdWd1FFTWdnV0lpdGxSQ0luQm1WRUZpSW5EV1ZFRmlJcVpVUVdJaWNPWlVRV0lpbGxSQllpSndwbFJCWWlKd1ZsUkJZaUtHVkVGaUluQjJWRUZpSW5DMlZFRmlJbkNHVkVGaUluQ1dWRUlpY0VaVVFXSWljUFpVUVdJaWxsUkVFQTB5SXBaVVJ4QTBSSkZSWlhCZ0pNVUl3QUlpbGxSRUVBdHlJcFpVUnhBVVFXVndjQmpBSWlLR1ZFUVFDZUlpaGxSSEVEUkVrVkZsY0dBa3hRakFFaUtHVkVRUUNDSWlobFJIRUJSQlpYQndFeEFFbUkrWG9XaXdTTEJWQ0xCbENMQjFDTENGQ0xDVkNMQ2xDTEMxQ0xERkNMRFZDTERsQ0xEMUNMRUZDTEVWQ0xFbENMRTFDTEZGQ0FBZ0RrVUlzQVNVNENGWUhrQVFoTWl3SlFTd0VXVndZQ1VJc0JTVTRERlU4Q0NFeFBCbEJQQlZCUEJGQk1GbGNHQWxCUEFsQk1VSXNEVUl3QWlTUkMvNEVuRVVML1pDUkMvMHduRVVML0x3PT0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjAwCiAgICAvLyBpdHhuLkFwcGxpY2F0aW9uQ2FsbCgKICAgIGludGNfMyAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjA1CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIwMC0yMDgKICAgIC8vIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgIGFwcHJvdmFsX3Byb2dyYW09Y29tcGlsZWQuYXBwcm92YWxfcHJvZ3JhbSwKICAgIC8vICAgICBjbGVhcl9zdGF0ZV9wcm9ncmFtPWNvbXBpbGVkLmNsZWFyX3N0YXRlX3Byb2dyYW0sCiAgICAvLyAgICAgZ2xvYmFsX251bV9ieXRlcz0yLAogICAgLy8gICAgIGdsb2JhbF9udW1fdWludD0xNiwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICAgICBleHRyYV9wcm9ncmFtX3BhZ2VzPTEsCiAgICAvLyApCiAgICAvLyAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjAwLTIwOQogICAgLy8gaXR4bi5BcHBsaWNhdGlvbkNhbGwoCiAgICAvLyAgICAgYXBwcm92YWxfcHJvZ3JhbT1jb21waWxlZC5hcHByb3ZhbF9wcm9ncmFtLAogICAgLy8gICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09Y29tcGlsZWQuY2xlYXJfc3RhdGVfcHJvZ3JhbSwKICAgIC8vICAgICBnbG9iYWxfbnVtX2J5dGVzPTIsCiAgICAvLyAgICAgZ2xvYmFsX251bV91aW50PTE2LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gICAgIGV4dHJhX3Byb2dyYW1fcGFnZXM9MSwKICAgIC8vICkKICAgIC8vIC5zdWJtaXQoKQogICAgLy8gLmNyZWF0ZWRfYXBwCiAgICBpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MTk5LTIxMAogICAgLy8gYmVuY2hfYXBwID0gKAogICAgLy8gICAgIGl0eG4uQXBwbGljYXRpb25DYWxsKAogICAgLy8gICAgICAgICBhcHByb3ZhbF9wcm9ncmFtPWNvbXBpbGVkLmFwcHJvdmFsX3Byb2dyYW0sCiAgICAvLyAgICAgICAgIGNsZWFyX3N0YXRlX3Byb2dyYW09Y29tcGlsZWQuY2xlYXJfc3RhdGVfcHJvZ3JhbSwKICAgIC8vICAgICAgICAgZ2xvYmFsX251bV9ieXRlcz0yLAogICAgLy8gICAgICAgICBnbG9iYWxfbnVtX3VpbnQ9MTYsCiAgICAvLyAgICAgICAgIGZlZT0wLAogICAgLy8gICAgICAgICBleHRyYV9wcm9ncmFtX3BhZ2VzPTEsCiAgICAvLyAgICAgKQogICAgLy8gICAgIC5zdWJtaXQoKQogICAgLy8gICAgIC5jcmVhdGVkX2FwcAogICAgLy8gKQogICAgZnJhbWVfYnVyeSA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjEyLTIxMwogICAgLy8gIyBvcHRpbiBpbnN0YW5jZSBjb250cmFjdCBpbnRvIGFzc2V0KHMpCiAgICAvLyBpZiBzZWxsaW5nX2Fzc2V0LmlkICE9IDAgYW5kIHB1cmNoYXNlX2Fzc2V0LmlkICE9IDA6CiAgICBmcmFtZV9kaWcgLTcKICAgIGJ6IGNyZWF0ZV9lbHNlX2JvZHlAMTYKICAgIGZyYW1lX2RpZyAtNQogICAgYnogY3JlYXRlX2Vsc2VfYm9keUAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIxNC0yMTkKICAgIC8vIGFiaV9jYWxsKAogICAgLy8gICAgIGJlbmNoX2NvbnRyYWN0LkJlbmNoLm9wdGluMiwKICAgIC8vICAgICBzZWxsaW5nX2Fzc2V0LAogICAgLy8gICAgIHB1cmNoYXNlX2Fzc2V0LAogICAgLy8gICAgIGFwcF9pZD1iZW5jaF9hcHAuaWQsCiAgICAvLyApCiAgICBpdHhuX2JlZ2luCiAgICBmcmFtZV9kaWcgNAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBmcmFtZV9kaWcgLTcKICAgIGl0eG5fZmllbGQgQXNzZXRzCiAgICBmcmFtZV9kaWcgLTUKICAgIGl0eG5fZmllbGQgQXNzZXRzCiAgICBwdXNoYnl0ZXMgMHhmMDE3NTVmNiAvLyBtZXRob2QgIm9wdGluMihhc3NldCxhc3NldCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToyMTYKICAgIC8vIHNlbGxpbmdfYXNzZXQsCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjE3CiAgICAvLyBwdXJjaGFzZV9hc3NldCwKICAgIHB1c2hieXRlcyAweDAxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIxNC0yMTkKICAgIC8vIGFiaV9jYWxsKAogICAgLy8gICAgIGJlbmNoX2NvbnRyYWN0LkJlbmNoLm9wdGluMiwKICAgIC8vICAgICBzZWxsaW5nX2Fzc2V0LAogICAgLy8gICAgIHB1cmNoYXNlX2Fzc2V0LAogICAgLy8gICAgIGFwcF9pZD1iZW5jaF9hcHAuaWQsCiAgICAvLyApCiAgICBpbnRjXzMgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKY3JlYXRlX2FmdGVyX2lmX2Vsc2VAMjQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjMzLTIzOAogICAgLy8gIyBwYXkgc2VlZCBhbW91bnQgaW50byB0aGUgaW5zdGFuY2UgY29udHJhY3QKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1iZW5jaF9hcHAuYWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ9YWxnb19zZWVkX2FtdCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToyMzUKICAgIC8vIHJlY2VpdmVyPWJlbmNoX2FwcC5hZGRyZXNzLAogICAgZnJhbWVfZGlnIDQKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIGZyYW1lX2RpZyAyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIzMy0yMzQKICAgIC8vICMgcGF5IHNlZWQgYW1vdW50IGludG8gdGhlIGluc3RhbmNlIGNvbnRyYWN0CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjM3CiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIzMy0yMzgKICAgIC8vICMgcGF5IHNlZWQgYW1vdW50IGludG8gdGhlIGluc3RhbmNlIGNvbnRyYWN0CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9YmVuY2hfYXBwLmFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50PWFsZ29fc2VlZF9hbXQsCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI0MC0yNDEKICAgIC8vICMgdHJhbnNmZXIgc2VsbGluZyBhc3NldCBpbnRvIGluc3RhbmNlIGNvbnRyYWN0CiAgICAvLyBpZiBzZWxsaW5nX2Fzc2V0LmlkICE9IDA6CiAgICBmcmFtZV9kaWcgLTcKICAgIGJ6IGNyZWF0ZV9hZnRlcl9pZl9lbHNlQDI4CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjQyLTI0NwogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPWJlbmNoX2FwcC5hZGRyZXNzLAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsbGluZ19hc3NldCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9c2VsbGluZ19hbW91bnQsCiAgICAvLyAgICAgYXNzZXRfY2xvc2VfdG89YmVuY2hfYXBwLmFkZHJlc3MsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjQzCiAgICAvLyBhc3NldF9yZWNlaXZlcj1iZW5jaF9hcHAuYWRkcmVzcywKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToyNDYKICAgIC8vIGFzc2V0X2Nsb3NlX3RvPWJlbmNoX2FwcC5hZGRyZXNzLAogICAgc3dhcAogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgaXR4bl9maWVsZCBBc3NldENsb3NlVG8KICAgIGZyYW1lX2RpZyAtNgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC03CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjQyCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI0Mi0yNDcKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1iZW5jaF9hcHAuYWRkcmVzcywKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGxpbmdfYXNzZXQsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PXNlbGxpbmdfYW1vdW50LAogICAgLy8gICAgIGFzc2V0X2Nsb3NlX3RvPWJlbmNoX2FwcC5hZGRyZXNzLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKCmNyZWF0ZV9hZnRlcl9pZl9lbHNlQDI4OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI0OQogICAgLy8gc2VsZi5pZF9jb3VudGVyICs9IFVJbnQ2NCgxKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImlkX2NvdW50ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaWRfY291bnRlciBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBieXRlY18xIC8vICJpZF9jb3VudGVyIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToyNTAKICAgIC8vIGFyYzQuZW1pdCgiQ3JlYXRlZCh1aW50NjQsdWludDY0KSIsIHNlbGYuaWRfY291bnRlciwgYmVuY2hfYXBwLmlkKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImlkX2NvdW50ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaWRfY291bnRlciBleGlzdHMKICAgIGl0b2IKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0b2IKICAgIGR1cAogICAgZnJhbWVfYnVyeSAxCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGMxMDhlOGI3IC8vIG1ldGhvZCAiQ3JlYXRlZCh1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjUyLTI2OAogICAgLy8gIyBjYWxsIHNldHVwIGluIHRoZSBpbnN0YW5jZSBjb250cmFjdAogICAgLy8gYWJpX2NhbGwoCiAgICAvLyAgICAgYmVuY2hfY29udHJhY3QuQmVuY2guc2V0dXAsCiAgICAvLyAgICAgc2VsZi5pZF9jb3VudGVyLAogICAgLy8gICAgIG93bmVyX2FkZHIsCiAgICAvLyAgICAgc2VsZi5mZWVfYWRkciwKICAgIC8vICAgICBzZWxmLmRlZmF1bHRfZmVlX2JwcywKICAgIC8vICAgICB0aW1lX3N0YXJ0LAogICAgLy8gICAgIHRpbWVfZW5kLAogICAgLy8gICAgIHNlbGxpbmdfYXNzZXQsCiAgICAvLyAgICAgc2VsbGluZ19hbW91bnQsCiAgICAvLyAgICAgcHVyY2hhc2VfYXNzZXQsCiAgICAvLyAgICAgcHVyY2hhc2VfcHJpY2VfcGVyXzEwMG0sCiAgICAvLyAgICAgcHVyY2hhc2VfbGltaXQsCiAgICAvLyAgICAgY2FuY2VsbGFibGUsCiAgICAvLyAgICAgYXBwX2lkPWJlbmNoX2FwcC5pZCwKICAgIC8vICkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToyNTUKICAgIC8vIHNlbGYuaWRfY291bnRlciwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJpZF9jb3VudGVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmlkX2NvdW50ZXIgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjU3CiAgICAvLyBzZWxmLmZlZV9hZGRyLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEwIC8vICJmZWVfYWRkciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5mZWVfYWRkciBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToyNTgKICAgIC8vIHNlbGYuZGVmYXVsdF9mZWVfYnBzLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDExIC8vICJkZWZhdWx0X2ZlZV9icHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGVmYXVsdF9mZWVfYnBzIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI1OQogICAgLy8gdGltZV9zdGFydCwKICAgIGZyYW1lX2RpZyAtOQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI2MAogICAgLy8gdGltZV9lbmQsCiAgICBmcmFtZV9kaWcgLTgKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToyNjIKICAgIC8vIHNlbGxpbmdfYW1vdW50LAogICAgZnJhbWVfZGlnIC02CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjY0CiAgICAvLyBwdXJjaGFzZV9wcmljZV9wZXJfMTAwbSwKICAgIGZyYW1lX2RpZyAtNAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI2NQogICAgLy8gcHVyY2hhc2VfbGltaXQsCiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToyNjYKICAgIC8vIGNhbmNlbGxhYmxlLAogICAgZnJhbWVfZGlnIC0yCiAgICBpdG9iCiAgICB1bmNvdmVyIDkKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgZnJhbWVfZGlnIC03CiAgICBpdHhuX2ZpZWxkIEFzc2V0cwogICAgZnJhbWVfZGlnIC01CiAgICBpdHhuX2ZpZWxkIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI1Mi0yNjgKICAgIC8vICMgY2FsbCBzZXR1cCBpbiB0aGUgaW5zdGFuY2UgY29udHJhY3QKICAgIC8vIGFiaV9jYWxsKAogICAgLy8gICAgIGJlbmNoX2NvbnRyYWN0LkJlbmNoLnNldHVwLAogICAgLy8gICAgIHNlbGYuaWRfY291bnRlciwKICAgIC8vICAgICBvd25lcl9hZGRyLAogICAgLy8gICAgIHNlbGYuZmVlX2FkZHIsCiAgICAvLyAgICAgc2VsZi5kZWZhdWx0X2ZlZV9icHMsCiAgICAvLyAgICAgdGltZV9zdGFydCwKICAgIC8vICAgICB0aW1lX2VuZCwKICAgIC8vICAgICBzZWxsaW5nX2Fzc2V0LAogICAgLy8gICAgIHNlbGxpbmdfYW1vdW50LAogICAgLy8gICAgIHB1cmNoYXNlX2Fzc2V0LAogICAgLy8gICAgIHB1cmNoYXNlX3ByaWNlX3Blcl8xMDBtLAogICAgLy8gICAgIHB1cmNoYXNlX2xpbWl0LAogICAgLy8gICAgIGNhbmNlbGxhYmxlLAogICAgLy8gICAgIGFwcF9pZD1iZW5jaF9hcHAuaWQsCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHgxYTY2MWRlZCAvLyBtZXRob2QgInNldHVwKHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsYXNzZXQsdWludDY0LGFzc2V0LHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciA4CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xMAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHVuY292ZXIgNwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHVuY292ZXIgNgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGRpZyA1CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZGlnIDQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjYxCiAgICAvLyBzZWxsaW5nX2Fzc2V0LAogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZGlnIDMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjYzCiAgICAvLyBwdXJjaGFzZV9hc3NldCwKICAgIHB1c2hieXRlcyAweDAxCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZGlnIDIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToyNTItMjY4CiAgICAvLyAjIGNhbGwgc2V0dXAgaW4gdGhlIGluc3RhbmNlIGNvbnRyYWN0CiAgICAvLyBhYmlfY2FsbCgKICAgIC8vICAgICBiZW5jaF9jb250cmFjdC5CZW5jaC5zZXR1cCwKICAgIC8vICAgICBzZWxmLmlkX2NvdW50ZXIsCiAgICAvLyAgICAgb3duZXJfYWRkciwKICAgIC8vICAgICBzZWxmLmZlZV9hZGRyLAogICAgLy8gICAgIHNlbGYuZGVmYXVsdF9mZWVfYnBzLAogICAgLy8gICAgIHRpbWVfc3RhcnQsCiAgICAvLyAgICAgdGltZV9lbmQsCiAgICAvLyAgICAgc2VsbGluZ19hc3NldCwKICAgIC8vICAgICBzZWxsaW5nX2Ftb3VudCwKICAgIC8vICAgICBwdXJjaGFzZV9hc3NldCwKICAgIC8vICAgICBwdXJjaGFzZV9wcmljZV9wZXJfMTAwbSwKICAgIC8vICAgICBwdXJjaGFzZV9saW1pdCwKICAgIC8vICAgICBjYW5jZWxsYWJsZSwKICAgIC8vICAgICBhcHBfaWQ9YmVuY2hfYXBwLmlkLAogICAgLy8gKQogICAgaW50Y18zIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToyNzIKICAgIC8vIGlkPWFyYzQuVUludDMyKHNlbGYuaWRfY291bnRlciksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiaWRfY291bnRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pZF9jb3VudGVyIGV4aXN0cwogICAgaXRvYgogICAgZXh0cmFjdCA0IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToyNzMKICAgIC8vIG9yaWdpbmFsX3RpbWVfc3RhcnQ9YXJjNC5VSW50MzIodGltZV9zdGFydCksCiAgICB1bmNvdmVyIDQKICAgIGV4dHJhY3QgNCA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6Mjc0CiAgICAvLyBvcmlnaW5hbF90aW1lX2VuZD1hcmM0LlVJbnQzMih0aW1lX2VuZCksCiAgICB1bmNvdmVyIDQKICAgIGV4dHJhY3QgNCA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6Mjc1CiAgICAvLyBzZWxsaW5nX2Fzc2V0X2lkPWFyYzQuVUludDY0KHNlbGxpbmdfYXNzZXQuaWQpLAogICAgZnJhbWVfZGlnIC03CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6Mjc3CiAgICAvLyBwdXJjaGFzZV9hc3NldF9pZD1hcmM0LlVJbnQ2NChwdXJjaGFzZV9hc3NldC5pZCksCiAgICBmcmFtZV9kaWcgLTUKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToyNzAtMjc5CiAgICAvLyAjIGVudHJ5IGluIHJlZ2lzdHJ5IGJveAogICAgLy8gcmVnaXN0cnlfa2V5ID0gUmVnaXN0cnlLZXkoCiAgICAvLyAgICAgaWQ9YXJjNC5VSW50MzIoc2VsZi5pZF9jb3VudGVyKSwKICAgIC8vICAgICBvcmlnaW5hbF90aW1lX3N0YXJ0PWFyYzQuVUludDMyKHRpbWVfc3RhcnQpLAogICAgLy8gICAgIG9yaWdpbmFsX3RpbWVfZW5kPWFyYzQuVUludDMyKHRpbWVfZW5kKSwKICAgIC8vICAgICBzZWxsaW5nX2Fzc2V0X2lkPWFyYzQuVUludDY0KHNlbGxpbmdfYXNzZXQuaWQpLAogICAgLy8gICAgIHNlbGxpbmdfYW1vdW50PWFyYzQuVUludDY0KHNlbGxpbmdfYW1vdW50KSwKICAgIC8vICAgICBwdXJjaGFzZV9hc3NldF9pZD1hcmM0LlVJbnQ2NChwdXJjaGFzZV9hc3NldC5pZCksCiAgICAvLyAgICAgcHVyY2hhc2VfcHJpY2VfcGVyXzEwMG09YXJjNC5VSW50NjQocHVyY2hhc2VfcHJpY2VfcGVyXzEwMG0pLAogICAgLy8gKQogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI4MQogICAgLy8gY3VzdG9tLmVuc3VyZShtZXRhLmJ5dGVzLmxlbmd0aCA8PSBNRVRBX01BWF9MRU5HVEgsIFMoIkVSUjpNRVRBTEVOIikpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDUKICAgIHB1c2hpbnQgMTAxNCAvLyAxMDE0CiAgICA8PQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTEKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IGNyZWF0ZV9hZnRlcl9pZl9lbHNlQDMxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjgxCiAgICAvLyBjdXN0b20uZW5zdXJlKG1ldGEuYnl0ZXMubGVuZ3RoIDw9IE1FVEFfTUFYX0xFTkdUSCwgUygiRVJSOk1FVEFMRU4iKSkKICAgIGJ5dGVjIDE5IC8vICJFUlI6TUVUQUxFTiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vY3VzdG9tLnB5OjEyCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMwogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKY3JlYXRlX2FmdGVyX2lmX2Vsc2VAMzE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjgzCiAgICAvLyBiZW5jaF9hcHBfaWQ9YXJjNC5VSW50NjQoYmVuY2hfYXBwLmlkKSwgbWV0YT1hcmM0LlN0cmluZyhtZXRhKQogICAgZnJhbWVfZGlnIDUKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI4Mi0yODQKICAgIC8vIHNlbGYucmVnaXN0cnlbcmVnaXN0cnlfa2V5XSA9IFJlZ2lzdHJ5VmFsdWUoCiAgICAvLyAgICAgYmVuY2hfYXBwX2lkPWFyYzQuVUludDY0KGJlbmNoX2FwcC5pZCksIG1ldGE9YXJjNC5TdHJpbmcobWV0YSkKICAgIC8vICkKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJ5dGVjIDIwIC8vIDB4MDAwYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI4NgogICAgLy8gcmV0dXJuIGFyYzQuVHVwbGUoKGFyYzQuVUludDY0KHNlbGYuaWRfY291bnRlciksIGFyYzQuVUludDY0KGJlbmNoX2FwcC5pZCkpKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImlkX2NvdW50ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaWRfY291bnRlciBleGlzdHMKICAgIGl0b2IKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNyZWF0ZV9lbHNlX2JvZHlAMTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjIwCiAgICAvLyBlbGlmIHB1cmNoYXNlX2Fzc2V0LmlkICE9IDA6CiAgICBmcmFtZV9kaWcgLTUKICAgIGJ6IGNyZWF0ZV9lbHNlX2JvZHlAMTkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToyMjEtMjI1CiAgICAvLyBhYmlfY2FsbCgKICAgIC8vICAgICBiZW5jaF9jb250cmFjdC5CZW5jaC5vcHRpbiwKICAgIC8vICAgICBwdXJjaGFzZV9hc3NldCwKICAgIC8vICAgICBhcHBfaWQ9YmVuY2hfYXBwLmlkLAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIDQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgZnJhbWVfZGlnIC01CiAgICBpdHhuX2ZpZWxkIEFzc2V0cwogICAgYnl0ZWMgOCAvLyBtZXRob2QgIm9wdGluKGFzc2V0KXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIyMwogICAgLy8gcHVyY2hhc2VfYXNzZXQsCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjIxLTIyNQogICAgLy8gYWJpX2NhbGwoCiAgICAvLyAgICAgYmVuY2hfY29udHJhY3QuQmVuY2gub3B0aW4sCiAgICAvLyAgICAgcHVyY2hhc2VfYXNzZXQsCiAgICAvLyAgICAgYXBwX2lkPWJlbmNoX2FwcC5pZCwKICAgIC8vICkKICAgIGludGNfMyAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBiIGNyZWF0ZV9hZnRlcl9pZl9lbHNlQDI0CgpjcmVhdGVfZWxzZV9ib2R5QDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIyNgogICAgLy8gZWxpZiBzZWxsaW5nX2Fzc2V0LmlkICE9IDA6CiAgICBmcmFtZV9kaWcgLTcKICAgIGJ6IGNyZWF0ZV9hZnRlcl9pZl9lbHNlQDI0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjI3LTIzMQogICAgLy8gYWJpX2NhbGwoCiAgICAvLyAgICAgYmVuY2hfY29udHJhY3QuQmVuY2gub3B0aW4sCiAgICAvLyAgICAgc2VsbGluZ19hc3NldCwKICAgIC8vICAgICBhcHBfaWQ9YmVuY2hfYXBwLmlkLAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIDQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgZnJhbWVfZGlnIC03CiAgICBpdHhuX2ZpZWxkIEFzc2V0cwogICAgYnl0ZWMgOCAvLyBtZXRob2QgIm9wdGluKGFzc2V0KXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjIyOQogICAgLy8gc2VsbGluZ19hc3NldCwKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToyMjctMjMxCiAgICAvLyBhYmlfY2FsbCgKICAgIC8vICAgICBiZW5jaF9jb250cmFjdC5CZW5jaC5vcHRpbiwKICAgIC8vICAgICBzZWxsaW5nX2Fzc2V0LAogICAgLy8gICAgIGFwcF9pZD1iZW5jaF9hcHAuaWQsCiAgICAvLyApCiAgICBpbnRjXzMgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgYiBjcmVhdGVfYWZ0ZXJfaWZfZWxzZUAyNAoKY3JlYXRlX2Vsc2VfYm9keUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToxOTMKICAgIC8vIFR4bi5ncm91cF9pbmRleCAtIFVJbnQ2NCgxKSwKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE5NAogICAgLy8gc2VsZi5zZXR1cF9mZWUgKyBhbGdvX3NlZWRfYW10LAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gInNldHVwX2ZlZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zZXR1cF9mZWUgZXhpc3RzCiAgICBmcmFtZV9kaWcgMgogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjE5MS0xOTUKICAgIC8vICMgc2VsbGluZyBBTEdPLCBubyBvcHRpbiBvciBheGZlciBuZWVkZWQKICAgIC8vIHZhbGlkYXRlLnBheW1lbnRfYW1vdW50X21pbigKICAgIC8vICAgICBUeG4uZ3JvdXBfaW5kZXggLSBVSW50NjQoMSksCiAgICAvLyAgICAgc2VsZi5zZXR1cF9mZWUgKyBhbGdvX3NlZWRfYW10LAogICAgLy8gKQogICAgY2FsbHN1YiBwYXltZW50X2Ftb3VudF9taW4KICAgIGIgY3JlYXRlX2FmdGVyX2lmX2Vsc2VAMTEKCmNyZWF0ZV9ib29sX2ZhbHNlQDU6CiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVhdGVfYm9vbF9tZXJnZUA2CgoKLy8gc21hcnRfY29udHJhY3RzLnJlZ2lzdHJ5LmNvbnRyYWN0LlJlZ2lzdHJ5LnZhbGlkYXRlX2Fzc2V0KGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CnZhbGlkYXRlX2Fzc2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ3NS00NzYKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgdmFsaWRhdGVfYXNzZXQoc2VsZiwgYXNzZXQ6IEFzc2V0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiAzCiAgICBieXRlY18yIC8vICIiCiAgICBkdXBuIDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0NzcKICAgIC8vIGlmIGFzc2V0LmlkID09IFVJbnQ2NCgwKToKICAgIGZyYW1lX2RpZyAtMQogICAgYm56IHZhbGlkYXRlX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ3OAogICAgLy8gcmV0dXJuCiAgICByZXRzdWIKCnZhbGlkYXRlX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0NzktNDgxCiAgICAvLyBsYWJlbHMsIGF0eG4gPSBhYmlfY2FsbCgKICAgIC8vICAgICBhYmVsX2NvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVscywgYXNzZXQsIGFwcF9pZD1zZWxmLmFiZWxfYXBwX2lkCiAgICAvLyApCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDgwCiAgICAvLyBhYmVsX2NvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVscywgYXNzZXQsIGFwcF9pZD1zZWxmLmFiZWxfYXBwX2lkCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAiYWJlbF9hcHBfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWJlbF9hcHBfaWQgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0NzktNDgxCiAgICAvLyBsYWJlbHMsIGF0eG4gPSBhYmlfY2FsbCgKICAgIC8vICAgICBhYmVsX2NvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X2xhYmVscywgYXNzZXQsIGFwcF9pZD1zZWxmLmFiZWxfYXBwX2lkCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHhjMmVkNzQzZiAvLyBtZXRob2QgImdldF9hc3NldF9sYWJlbHMoYXNzZXQpc3RyaW5nW10iCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ4MAogICAgLy8gYWJlbF9jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF9sYWJlbHMsIGFzc2V0LCBhcHBfaWQ9c2VsZi5hYmVsX2FwcF9pZAogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ3OS00ODEKICAgIC8vIGxhYmVscywgYXR4biA9IGFiaV9jYWxsKAogICAgLy8gICAgIGFiZWxfY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRfbGFiZWxzLCBhc3NldCwgYXBwX2lkPXNlbGYuYWJlbF9hcHBfaWQKICAgIC8vICkKICAgIGludGNfMyAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIGZyYW1lX2J1cnkgMQogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ4MgogICAgLy8gaWYgc2VsZi5iYW5saXN0X2xhYmVscy5sZW5ndGggPiBVSW50NjQoMCk6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAiYmFubGlzdF9sYWJlbHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYmFubGlzdF9sYWJlbHMgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGJ6IHZhbGlkYXRlX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0ODMKICAgIC8vIGZvciBrLCBsYWJlbCBpbiB1ZW51bWVyYXRlKGxhYmVscyk6ICAjIG5vcWE6QjAwNwogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSA0CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSA4Cgp2YWxpZGF0ZV9hc3NldF9mb3JfaGVhZGVyQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDgzCiAgICAvLyBmb3IgaywgbGFiZWwgaW4gdWVudW1lcmF0ZShsYWJlbHMpOiAgIyBub3FhOkIwMDcKICAgIGZyYW1lX2RpZyA4CiAgICBmcmFtZV9kaWcgNAogICAgPAogICAgYnogdmFsaWRhdGVfYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxNQogICAgZnJhbWVfZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgOAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDg0CiAgICAvLyBmb3IgazIsIGJfbGFiZWwgaW4gdWVudW1lcmF0ZShzZWxmLmJhbmxpc3RfbGFiZWxzKTogICMgbm9xYTpCMDA3CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAiYmFubGlzdF9sYWJlbHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDIKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJhbmxpc3RfbGFiZWxzIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9idXJ5IDUKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDkKCnZhbGlkYXRlX2Fzc2V0X2Zvcl9oZWFkZXJANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0ODQKICAgIC8vIGZvciBrMiwgYl9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYuYmFubGlzdF9sYWJlbHMpOiAgIyBub3FhOkIwMDcKICAgIGZyYW1lX2RpZyA5CiAgICBmcmFtZV9kaWcgNQogICAgPAogICAgYnogdmFsaWRhdGVfYXNzZXRfYWZ0ZXJfZm9yQDEyCiAgICBmcmFtZV9kaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyA5CiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDEKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDg1CiAgICAvLyBpZiBsYWJlbCA9PSBiX2xhYmVsOgogICAgZnJhbWVfZGlnIDAKICAgID09CiAgICBieiB2YWxpZGF0ZV9hc3NldF9hZnRlcl9pZl9lbHNlQDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDg2CiAgICAvLyBsb2coIkVSUjpCQU4iKQogICAgcHVzaGJ5dGVzICJFUlI6QkFOIgogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDg3CiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgp2YWxpZGF0ZV9hc3NldF9hZnRlcl9pZl9lbHNlQDEwOgogICAgZnJhbWVfZGlnIDkKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDkKICAgIGIgdmFsaWRhdGVfYXNzZXRfZm9yX2hlYWRlckA3Cgp2YWxpZGF0ZV9hc3NldF9hZnRlcl9mb3JAMTI6CiAgICBmcmFtZV9kaWcgOAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgOAogICAgYiB2YWxpZGF0ZV9hc3NldF9mb3JfaGVhZGVyQDUKCnZhbGlkYXRlX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDg4LTQ4OQogICAgLy8gIyBkaXNhYmxlIHdoaXRlbGlzdCBieSBzZXR0aW5nIGVtcHR5IGxhYmVscwogICAgLy8gaWYgc2VsZi5hbGxvd2xpc3RfbGFiZWxzLmxlbmd0aCA9PSBVSW50NjQoMCk6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAiYWxsb3dsaXN0X2xhYmVscyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hbGxvd2xpc3RfbGFiZWxzIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBibnogdmFsaWRhdGVfYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxNwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ5MAogICAgLy8gcmV0dXJuCiAgICByZXRzdWIKCnZhbGlkYXRlX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDkxCiAgICAvLyBmb3IgaywgbGFiZWwgaW4gdWVudW1lcmF0ZShsYWJlbHMpOiAgIyBub3FhOkIwMDcKICAgIGZyYW1lX2RpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2J1cnkgNgogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgOAoKdmFsaWRhdGVfYXNzZXRfZm9yX2hlYWRlckAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0OTEKICAgIC8vIGZvciBrLCBsYWJlbCBpbiB1ZW51bWVyYXRlKGxhYmVscyk6ICAjIG5vcWE6QjAwNwogICAgZnJhbWVfZGlnIDgKICAgIGZyYW1lX2RpZyA2CiAgICA8CiAgICBieiB2YWxpZGF0ZV9hc3NldF9hZnRlcl9mb3JAMjcKICAgIGZyYW1lX2RpZyAxCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDgKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZXh0cmFjdDMKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ5MgogICAgLy8gZm9yIGsyLCB3X2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5hbGxvd2xpc3RfbGFiZWxzKTogICMgbm9xYTpCMDA3CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAiYWxsb3dsaXN0X2xhYmVscyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMwogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWxsb3dsaXN0X2xhYmVscyBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfYnVyeSA3CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSA5Cgp2YWxpZGF0ZV9hc3NldF9mb3JfaGVhZGVyQDIwOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ5MgogICAgLy8gZm9yIGsyLCB3X2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5hbGxvd2xpc3RfbGFiZWxzKTogICMgbm9xYTpCMDA3CiAgICBmcmFtZV9kaWcgOQogICAgZnJhbWVfZGlnIDcKICAgIDwKICAgIGJ6IHZhbGlkYXRlX2Fzc2V0X2FmdGVyX2ZvckAyNQogICAgZnJhbWVfZGlnIDMKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgOQogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ5MwogICAgLy8gaWYgbGFiZWwgPT0gd19sYWJlbDoKICAgIGZyYW1lX2RpZyAwCiAgICA9PQogICAgYnogdmFsaWRhdGVfYXNzZXRfYWZ0ZXJfaWZfZWxzZUAyMwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ5NAogICAgLy8gcmV0dXJuCiAgICByZXRzdWIKCnZhbGlkYXRlX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMjM6CiAgICBmcmFtZV9kaWcgOQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgOQogICAgYiB2YWxpZGF0ZV9hc3NldF9mb3JfaGVhZGVyQDIwCgp2YWxpZGF0ZV9hc3NldF9hZnRlcl9mb3JAMjU6CiAgICBmcmFtZV9kaWcgOAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgOAogICAgYiB2YWxpZGF0ZV9hc3NldF9mb3JfaGVhZGVyQDE4Cgp2YWxpZGF0ZV9hc3NldF9hZnRlcl9mb3JAMjc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDk1CiAgICAvLyBsb2coIkVSUjpOV0wiKQogICAgcHVzaGJ5dGVzICJFUlI6TldMIgogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDk2CiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgoKLy8gc21hcnRfY29udHJhY3RzLmNvbW1vbi52YWxpZGF0ZS5wYXltZW50X2Ftb3VudF9taW4ocGF5bWVudF90eG5faWR4OiB1aW50NjQsIGV4cGVjdGVkX2Ftb3VudDogdWludDY0KSAtPiB2b2lkOgpwYXltZW50X2Ftb3VudF9taW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL3ZhbGlkYXRlLnB5OjM2LTM3CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIHBheW1lbnRfYW1vdW50X21pbihwYXltZW50X3R4bl9pZHg6IFVJbnQ2NCwgZXhwZWN0ZWRfYW1vdW50OiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vdmFsaWRhdGUucHk6MjgKICAgIC8vIHBheV90eG4gPSBndHhuLlBheW1lbnRUcmFuc2FjdGlvbih0eG5faWR4KQogICAgZnJhbWVfZGlnIC0yCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi92YWxpZGF0ZS5weTozMAogICAgLy8gcGF5X3R4bi5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZnJhbWVfZGlnIC0yCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMQogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcGF5bWVudF9hbW91bnRfbWluX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi92YWxpZGF0ZS5weTozMQogICAgLy8gUygiRVJSOlBBWSBSQ1YiKSwKICAgIHB1c2hieXRlcyAiRVJSOlBBWSBSQ1YiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMgogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTMKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnBheW1lbnRfYW1vdW50X21pbl9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL3ZhbGlkYXRlLnB5OjMzCiAgICAvLyByZXR1cm4gcGF5X3R4bi5hbW91bnQKICAgIGZyYW1lX2RpZyAtMgogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL3ZhbGlkYXRlLnB5OjM4CiAgICAvLyBjdXN0b20uZW5zdXJlKHBheW1lbnQocGF5bWVudF90eG5faWR4KSA+PSBleHBlY3RlZF9hbW91bnQsIFMoIkVSUjpQQVkgQU1UIikpCiAgICBmcmFtZV9kaWcgLTEKICAgID49CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMQogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcGF5bWVudF9hbW91bnRfbWluX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi92YWxpZGF0ZS5weTozOAogICAgLy8gY3VzdG9tLmVuc3VyZShwYXltZW50KHBheW1lbnRfdHhuX2lkeCkgPj0gZXhwZWN0ZWRfYW1vdW50LCBTKCJFUlI6UEFZIEFNVCIpKQogICAgcHVzaGJ5dGVzICJFUlI6UEFZIEFNVCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vY3VzdG9tLnB5OjEyCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMwogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKcGF5bWVudF9hbW91bnRfbWluX2FmdGVyX2lmX2Vsc2VANzoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5yZWdpc3RyeS5jb250cmFjdC5SZWdpc3RyeS5zZXRfaWRfY291bnRlcihuZXdfaWRfY291bnRlcjogdWludDY0KSAtPiB2b2lkOgpzZXRfaWRfY291bnRlcjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToyODgtMjg5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBzZXRfaWRfY291bnRlcihzZWxmLCBuZXdfaWRfY291bnRlcjogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjkwCiAgICAvLyBzZWxmLnZhbGlkYXRlX2FkbWluX2NhbGxlcigpCiAgICBjYWxsc3ViIHZhbGlkYXRlX2FkbWluX2NhbGxlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI5MQogICAgLy8gY3VzdG9tLmVuc3VyZShuZXdfaWRfY291bnRlciA+IHNlbGYuaWRfY291bnRlciwgUygiRVJSOlZBTCIpKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImlkX2NvdW50ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaWRfY291bnRlciBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgPAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTEKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IHNldF9pZF9jb3VudGVyX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjI5MQogICAgLy8gY3VzdG9tLmVuc3VyZShuZXdfaWRfY291bnRlciA+IHNlbGYuaWRfY291bnRlciwgUygiRVJSOlZBTCIpKQogICAgcHVzaGJ5dGVzICJFUlI6VkFMIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTIKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vY3VzdG9tLnB5OjEzCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpzZXRfaWRfY291bnRlcl9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MjkyCiAgICAvLyBzZWxmLmlkX2NvdW50ZXIgPSBuZXdfaWRfY291bnRlcgogICAgYnl0ZWNfMSAvLyAiaWRfY291bnRlciIKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5yZWdpc3RyeS5jb250cmFjdC5SZWdpc3RyeS5nZXRfbWV0YShyZWdpc3RyeV9rZXk6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X21ldGE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6Mjk0LTI5NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgZ2V0X21ldGEoc2VsZiwgcmVnaXN0cnlfa2V5OiBSZWdpc3RyeUtleSkgLT4gYXJjNC5TdHJpbmc6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weToyOTYtMjk3CiAgICAvLyAjIGVuc3VyZSBrZXkgZXhpc3RzCiAgICAvLyBjdXN0b20uZW5zdXJlKHJlZ2lzdHJ5X2tleSBpbiBzZWxmLnJlZ2lzdHJ5LCBTKCJFUlI6Tk9URk9VTkQiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMQogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogZ2V0X21ldGFfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6Mjk2LTI5NwogICAgLy8gIyBlbnN1cmUga2V5IGV4aXN0cwogICAgLy8gY3VzdG9tLmVuc3VyZShyZWdpc3RyeV9rZXkgaW4gc2VsZi5yZWdpc3RyeSwgUygiRVJSOk5PVEZPVU5EIikpCiAgICBieXRlYyAyMSAvLyAiRVJSOk5PVEZPVU5EIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTIKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vY3VzdG9tLnB5OjEzCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpnZXRfbWV0YV9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6Mjk4CiAgICAvLyByZXR1cm4gc2VsZi5yZWdpc3RyeVtyZWdpc3RyeV9rZXldLm1ldGEKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVnaXN0cnkgZW50cnkgZXhpc3RzCiAgICBkdXAKICAgIHB1c2hpbnQgOCAvLyA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnJlZ2lzdHJ5LmNvbnRyYWN0LlJlZ2lzdHJ5LnNldF9tZXRhKHJlZ2lzdHJ5X2tleTogYnl0ZXMsIG1ldGE6IGJ5dGVzKSAtPiB2b2lkOgpzZXRfbWV0YToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozMDAtMzAxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBzZXRfbWV0YShzZWxmLCByZWdpc3RyeV9rZXk6IFJlZ2lzdHJ5S2V5LCBtZXRhOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MzAyLTMwMwogICAgLy8gIyBlbnN1cmUga2V5IGV4aXN0cwogICAgLy8gY3VzdG9tLmVuc3VyZShyZWdpc3RyeV9rZXkgaW4gc2VsZi5yZWdpc3RyeSwgUygiRVJSOk5PVEZPVU5EIikpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTEKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IHNldF9tZXRhX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMwMi0zMDMKICAgIC8vICMgZW5zdXJlIGtleSBleGlzdHMKICAgIC8vIGN1c3RvbS5lbnN1cmUocmVnaXN0cnlfa2V5IGluIHNlbGYucmVnaXN0cnksIFMoIkVSUjpOT1RGT1VORCIpKQogICAgYnl0ZWMgMjEgLy8gIkVSUjpOT1RGT1VORCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vY3VzdG9tLnB5OjEyCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMwogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKc2V0X21ldGFfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMwNC0zMDUKICAgIC8vICMgZW5zdXJlIGNhbGxlZCBieSBvd25lci4gZmV0Y2ggYmVuY2ggZ2xvYmFsIHN0YXRlID4gb3duZXJfYWRkcgogICAgLy8gcmVnaXN0cnlfdmFsdWUgPSBzZWxmLnJlZ2lzdHJ5W3JlZ2lzdHJ5X2tleV0uY29weSgpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlZ2lzdHJ5IGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMwNwogICAgLy8gcmVnaXN0cnlfdmFsdWUuYmVuY2hfYXBwX2lkLm5hdGl2ZSwgYiJvd25lcl9hZGRyIgogICAgZXh0cmFjdCAwIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgYnRvaQogICAgcHVzaGJ5dGVzIDB4NmY3NzZlNjU3MjVmNjE2NDY0NzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozMDYtMzA4CiAgICAvLyBvd25lcl9hZGRyLCBleGlzdHMgPSBvcC5BcHBHbG9iYWwuZ2V0X2V4X2J5dGVzKAogICAgLy8gICAgIHJlZ2lzdHJ5X3ZhbHVlLmJlbmNoX2FwcF9pZC5uYXRpdmUsIGIib3duZXJfYWRkciIKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozMDkKICAgIC8vIGN1c3RvbS5lbnN1cmUoVHhuLnNlbmRlci5ieXRlcyA9PSBvd25lcl9hZGRyLCBTKCJFUlI6VU5BVVRIIikpCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTEKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IHNldF9tZXRhX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMwOQogICAgLy8gY3VzdG9tLmVuc3VyZShUeG4uc2VuZGVyLmJ5dGVzID09IG93bmVyX2FkZHIsIFMoIkVSUjpVTkFVVEgiKSkKICAgIGJ5dGVjIDE1IC8vICJFUlI6VU5BVVRIIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTIKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vY3VzdG9tLnB5OjEzCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpzZXRfbWV0YV9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MzEwLTMxMQogICAgLy8gIyBlbnN1cmUgd2l0aGluIGxlbmd0aCBib3VuZHMKICAgIC8vIGN1c3RvbS5lbnN1cmUobWV0YS5ieXRlcy5sZW5ndGggPD0gTUVUQV9NQVhfTEVOR1RILCBTKCJFUlI6TUVUQUxFTiIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGR1cAogICAgZnJhbWVfYnVyeSAxCiAgICBwdXNoaW50IDEwMTQgLy8gMTAxNAogICAgPD0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vY3VzdG9tLnB5OjExCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiBzZXRfbWV0YV9hZnRlcl9pZl9lbHNlQDExCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MzEwLTMxMQogICAgLy8gIyBlbnN1cmUgd2l0aGluIGxlbmd0aCBib3VuZHMKICAgIC8vIGN1c3RvbS5lbnN1cmUobWV0YS5ieXRlcy5sZW5ndGggPD0gTUVUQV9NQVhfTEVOR1RILCBTKCJFUlI6TUVUQUxFTiIpKQogICAgYnl0ZWMgMTkgLy8gIkVSUjpNRVRBTEVOIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTIKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb21tb24vY3VzdG9tLnB5OjEzCiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpzZXRfbWV0YV9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMxNAogICAgLy8gYmVuY2hfYXBwX2lkPXJlZ2lzdHJ5X3ZhbHVlLmJlbmNoX2FwcF9pZCwgbWV0YT1hcmM0LlN0cmluZyhtZXRhKQogICAgZnJhbWVfZGlnIDEKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMxMi0zMTUKICAgIC8vICMgc2F2ZQogICAgLy8gc2VsZi5yZWdpc3RyeVtyZWdpc3RyeV9rZXldID0gUmVnaXN0cnlWYWx1ZSgKICAgIC8vICAgICBiZW5jaF9hcHBfaWQ9cmVnaXN0cnlfdmFsdWUuYmVuY2hfYXBwX2lkLCBtZXRhPWFyYzQuU3RyaW5nKG1ldGEpCiAgICAvLyApCiAgICBmcmFtZV9kaWcgMAogICAgYnl0ZWMgMjAgLy8gMHgwMDBhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnJlZ2lzdHJ5LmNvbnRyYWN0LlJlZ2lzdHJ5LmNsZWFudXAob3duZXI6IGJ5dGVzLCBpZDogYnl0ZXMsIHRpbWVfc3RhcnQ6IGJ5dGVzLCB0aW1lX2VuZDogYnl0ZXMsIHNlbGxpbmdfYXNzZXQ6IHVpbnQ2NCwgc2VsbGluZ19hbW91bnQ6IHVpbnQ2NCwgcHVyY2hhc2VfYXNzZXQ6IHVpbnQ2NCwgcHVyY2hhc2VfcHJpY2VfcGVyXzEwMG06IHVpbnQ2NCkgLT4gdm9pZDoKY2xlYW51cDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozMTctMzI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBjbGVhbnVwKAogICAgLy8gICAgIHNlbGYsCiAgICAvLyAgICAgb3duZXI6IEFjY291bnQsCiAgICAvLyAgICAgaWQ6IGFyYzQuVUludDMyLCAgIyBub3FhOiBBMDAyCiAgICAvLyAgICAgdGltZV9zdGFydDogYXJjNC5VSW50MzIsCiAgICAvLyAgICAgdGltZV9lbmQ6IGFyYzQuVUludDMyLAogICAgLy8gICAgIHNlbGxpbmdfYXNzZXQ6IEFzc2V0LAogICAgLy8gICAgIHNlbGxpbmdfYW1vdW50OiBVSW50NjQsCiAgICAvLyAgICAgcHVyY2hhc2VfYXNzZXQ6IEFzc2V0LAogICAgLy8gICAgIHB1cmNoYXNlX3ByaWNlX3Blcl8xMDBtOiBVSW50NjQsCiAgICAvLyApIC0+IE5vbmU6CiAgICBwcm90byA4IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozMjkKICAgIC8vIHNlbGYudmFsaWRhdGVfYWRtaW5fY2FsbGVyKCkKICAgIGNhbGxzdWIgdmFsaWRhdGVfYWRtaW5fY2FsbGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MzM0CiAgICAvLyBzZWxsaW5nX2Fzc2V0X2lkPWFyYzQuVUludDY0KHNlbGxpbmdfYXNzZXQuaWQpLAogICAgZnJhbWVfZGlnIC00CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MzM1CiAgICAvLyBzZWxsaW5nX2Ftb3VudD1hcmM0LlVJbnQ2NChzZWxsaW5nX2Ftb3VudCksCiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozMzYKICAgIC8vIHB1cmNoYXNlX2Fzc2V0X2lkPWFyYzQuVUludDY0KHB1cmNoYXNlX2Fzc2V0LmlkKSwKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjMzNwogICAgLy8gcHVyY2hhc2VfcHJpY2VfcGVyXzEwMG09YXJjNC5VSW50NjQocHVyY2hhc2VfcHJpY2VfcGVyXzEwMG0pLAogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MzMwLTMzOAogICAgLy8gcmVnID0gUmVnaXN0cnlLZXkoCiAgICAvLyAgICAgaWQ9aWQsCiAgICAvLyAgICAgb3JpZ2luYWxfdGltZV9zdGFydD10aW1lX3N0YXJ0LAogICAgLy8gICAgIG9yaWdpbmFsX3RpbWVfZW5kPXRpbWVfZW5kLAogICAgLy8gICAgIHNlbGxpbmdfYXNzZXRfaWQ9YXJjNC5VSW50NjQoc2VsbGluZ19hc3NldC5pZCksCiAgICAvLyAgICAgc2VsbGluZ19hbW91bnQ9YXJjNC5VSW50NjQoc2VsbGluZ19hbW91bnQpLAogICAgLy8gICAgIHB1cmNoYXNlX2Fzc2V0X2lkPWFyYzQuVUludDY0KHB1cmNoYXNlX2Fzc2V0LmlkKSwKICAgIC8vICAgICBwdXJjaGFzZV9wcmljZV9wZXJfMTAwbT1hcmM0LlVJbnQ2NChwdXJjaGFzZV9wcmljZV9wZXJfMTAwbSksCiAgICAvLyApCiAgICBmcmFtZV9kaWcgLTcKICAgIGZyYW1lX2RpZyAtNgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTUKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozMzkKICAgIC8vIGN1c3RvbS5lbnN1cmUocmVnIGluIHNlbGYucmVnaXN0cnksIFMoIkVSUjpOQiIpKQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMQogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogY2xlYW51cF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozMzkKICAgIC8vIGN1c3RvbS5lbnN1cmUocmVnIGluIHNlbGYucmVnaXN0cnksIFMoIkVSUjpOQiIpKQogICAgcHVzaGJ5dGVzICJFUlI6TkIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMgogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTMKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmNsZWFudXBfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM0MQogICAgLy8gYmVuY2hfYXBwX2lkID0gc2VsZi5yZWdpc3RyeVtyZWddLmJlbmNoX2FwcF9pZC5uYXRpdmUKICAgIGZyYW1lX2RpZyAwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZWdpc3RyeSBlbnRyeSBleGlzdHMKICAgIGV4dHJhY3QgMCA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM0NAogICAgLy8gY3VzdG9tLmVuc3VyZShvcC5iYWxhbmNlKGJlbmNoX2FwcC5hZGRyZXNzKSA9PSAwLCBTKCJFUlI6QkFMIikpCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBiYWxhbmNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMQogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBieiBjbGVhbnVwX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM0NAogICAgLy8gY3VzdG9tLmVuc3VyZShvcC5iYWxhbmNlKGJlbmNoX2FwcC5hZGRyZXNzKSA9PSAwLCBTKCJFUlI6QkFMIikpCiAgICBwdXNoYnl0ZXMgIkVSUjpCQUwiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29tbW9uL2N1c3RvbS5weToxMgogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbW1vbi9jdXN0b20ucHk6MTMKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmNsZWFudXBfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM0NgogICAgLy8gZGVsIHNlbGYucmVnaXN0cnlbcmVnXQogICAgZnJhbWVfZGlnIDAKICAgIGJveF9kZWwKICAgIHBvcAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnJlZ2lzdHJ5LmNvbnRyYWN0LlJlZ2lzdHJ5LmdldF9yZWdpc3RyeV9rZXkoaWQ6IGJ5dGVzLCBwdXJjaGFzZV9hc3NldF9pZDogYnl0ZXMsIHB1cmNoYXNlX3ByaWNlX3Blcl8xMDBtOiBieXRlcywgc2VsbGluZ19hc3NldF9pZDogYnl0ZXMsIHNlbGxpbmdfYW1vdW50OiBieXRlcywgdGltZV9zdGFydDogYnl0ZXMsIHRpbWVfZW5kOiBieXRlcykgLT4gYnl0ZXM6CmdldF9yZWdpc3RyeV9rZXk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MzQ4LTM1OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgZ2V0X3JlZ2lzdHJ5X2tleSgKICAgIC8vICAgICBzZWxmLAogICAgLy8gICAgIGlkOiBhcmM0LlVJbnQzMiwgICMgbm9xYTpBMDAyCiAgICAvLyAgICAgcHVyY2hhc2VfYXNzZXRfaWQ6IGFyYzQuVUludDY0LAogICAgLy8gICAgIHB1cmNoYXNlX3ByaWNlX3Blcl8xMDBtOiBhcmM0LlVJbnQ2NCwKICAgIC8vICAgICBzZWxsaW5nX2Fzc2V0X2lkOiBhcmM0LlVJbnQ2NCwKICAgIC8vICAgICBzZWxsaW5nX2Ftb3VudDogYXJjNC5VSW50NjQsCiAgICAvLyAgICAgdGltZV9zdGFydDogYXJjNC5VSW50MzIsCiAgICAvLyAgICAgdGltZV9lbmQ6IGFyYzQuVUludDMyLAogICAgLy8gKSAtPiBSZWdpc3RyeUtleToKICAgIHByb3RvIDcgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM1OS0zNjcKICAgIC8vIHJldHVybiBSZWdpc3RyeUtleSgKICAgIC8vICAgICBpZD1pZCwKICAgIC8vICAgICBwdXJjaGFzZV9hc3NldF9pZD1wdXJjaGFzZV9hc3NldF9pZCwKICAgIC8vICAgICBwdXJjaGFzZV9wcmljZV9wZXJfMTAwbT1wdXJjaGFzZV9wcmljZV9wZXJfMTAwbSwKICAgIC8vICAgICBzZWxsaW5nX2Fzc2V0X2lkPXNlbGxpbmdfYXNzZXRfaWQsCiAgICAvLyAgICAgc2VsbGluZ19hbW91bnQ9c2VsbGluZ19hbW91bnQsCiAgICAvLyAgICAgb3JpZ2luYWxfdGltZV9zdGFydD10aW1lX3N0YXJ0LAogICAgLy8gICAgIG9yaWdpbmFsX3RpbWVfZW5kPXRpbWVfZW5kLAogICAgLy8gKQogICAgZnJhbWVfZGlnIC03CiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC02CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNQogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMucmVnaXN0cnkuY29udHJhY3QuUmVnaXN0cnkuZ2V0X2FwcF9pZHMoYm94X25hbWVzOiBieXRlcykgLT4gYnl0ZXM6CmdldF9hcHBfaWRzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM2OS0zNzIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXBwX2lkcygKICAgIC8vICAgICBzZWxmLCBib3hfbmFtZXM6IGFyYzQuRHluYW1pY0FycmF5W1JlZ2lzdHJ5S2V5XQogICAgLy8gKSAtPiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlVJbnQ2NF06CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozNzMKICAgIC8vIGFwcF9pZHMgPSBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlVJbnQ2NF0oKQogICAgYnl0ZWMgMjIgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6Mzc0CiAgICAvLyBmb3IgayBpbiB1cmFuZ2UoYm94X25hbWVzLmxlbmd0aCk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18wIC8vIDAKCmdldF9hcHBfaWRzX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozNzQKICAgIC8vIGZvciBrIGluIHVyYW5nZShib3hfbmFtZXMubGVuZ3RoKToKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9kaWcgMwogICAgPAogICAgYnogZ2V0X2FwcF9pZHNfYWZ0ZXJfZm9yQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozNzUKICAgIC8vIGlmIGJveF9uYW1lc1trXSBpbiBzZWxmLnJlZ2lzdHJ5OgogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDQKICAgIHB1c2hpbnQgNDQgLy8gNDQKICAgICoKICAgIHB1c2hpbnQgNDQgLy8gNDQKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2J1cnkgMAogICAgYnogZ2V0X2FwcF9pZHNfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6Mzc2CiAgICAvLyBhcHBfaWQgPSBzZWxmLnJlZ2lzdHJ5W2JveF9uYW1lc1trXV0uYmVuY2hfYXBwX2lkCiAgICBmcmFtZV9kaWcgMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVnaXN0cnkgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozNzcKICAgIC8vIGFwcF9pZHMuYXBwZW5kKGFwcF9pZCkKICAgIGZyYW1lX2RpZyAyCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAoKZ2V0X2FwcF9pZHNfYWZ0ZXJfaWZfZWxzZUA0OgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2J1cnkgMgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM3NAogICAgLy8gZm9yIGsgaW4gdXJhbmdlKGJveF9uYW1lcy5sZW5ndGgpOgogICAgZnJhbWVfZGlnIDQKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDQKICAgIGIgZ2V0X2FwcF9pZHNfZm9yX2hlYWRlckAxCgpnZXRfYXBwX2lkc19hZnRlcl9mb3JANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozNzgKICAgIC8vIHJldHVybiBhcHBfaWRzCiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMucmVnaXN0cnkuY29udHJhY3QuUmVnaXN0cnkuZ2V0X2JlbmNoX3N0YXRlcyhib3hfbmFtZXM6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X2JlbmNoX3N0YXRlczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozODAtMzgzCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2JlbmNoX3N0YXRlcygKICAgIC8vICAgICBzZWxmLCBib3hfbmFtZXM6IGFyYzQuRHluYW1pY0FycmF5W1JlZ2lzdHJ5S2V5XQogICAgLy8gKSAtPiBhcmM0LkR5bmFtaWNBcnJheVtiZW5jaF9jb250cmFjdC5TdGF0ZV06CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6Mzg0CiAgICAvLyBzdGF0ZXMgPSBhcmM0LkR5bmFtaWNBcnJheVtiZW5jaF9jb250cmFjdC5TdGF0ZV0oKQogICAgYnl0ZWMgMjIgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6Mzg1CiAgICAvLyBmb3IgayBpbiB1cmFuZ2UoYm94X25hbWVzLmxlbmd0aCk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18wIC8vIDAKCmdldF9iZW5jaF9zdGF0ZXNfZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM4NQogICAgLy8gZm9yIGsgaW4gdXJhbmdlKGJveF9uYW1lcy5sZW5ndGgpOgogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAyCiAgICA8CiAgICBieiBnZXRfYmVuY2hfc3RhdGVzX2FmdGVyX2ZvckA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6Mzg2CiAgICAvLyBpZiBib3hfbmFtZXNba10gaW4gc2VsZi5yZWdpc3RyeToKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAzCiAgICBwdXNoaW50IDQ0IC8vIDQ0CiAgICAqCiAgICBwdXNoaW50IDQ0IC8vIDQ0CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGdldF9iZW5jaF9zdGF0ZXNfZWxzZV9ib2R5QDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozODcKICAgIC8vIGFwcF9pZCA9IHNlbGYucmVnaXN0cnlbYm94X25hbWVzW2tdXS5iZW5jaF9hcHBfaWQubmF0aXZlCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVnaXN0cnkgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozODgtMzkxCiAgICAvLyBzdGF0ZSwgYXR4biA9IGFiaV9jYWxsKAogICAgLy8gICAgIGJlbmNoX2NvbnRyYWN0LkJlbmNoLmdldF9zdGF0ZSwKICAgIC8vICAgICBhcHBfaWQ9YXBwX2lkLAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBieXRlYyAxMiAvLyBtZXRob2QgImdldF9zdGF0ZSgpKHVpbnQzMix1aW50NjQsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LGFkZHJlc3MsdWludDY0LHVpbnQ2NCxieXRlW10sdWludDgsYnl0ZVtdLHVpbnQ4KSIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzMgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6MzkyCiAgICAvLyBzdGF0ZXMuYXBwZW5kKHN0YXRlLmNvcHkoKSkKICAgIGJ5dGVjIDIzIC8vIDB4MDAwMgogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBpbnRjXzEgLy8gMQogICAgdW5jb3ZlciAzCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgZnJhbWVfYnVyeSAxCgpnZXRfYmVuY2hfc3RhdGVzX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozODUKICAgIC8vIGZvciBrIGluIHVyYW5nZShib3hfbmFtZXMubGVuZ3RoKToKICAgIGZyYW1lX2RpZyAzCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAzCiAgICBiIGdldF9iZW5jaF9zdGF0ZXNfZm9yX2hlYWRlckAxCgpnZXRfYmVuY2hfc3RhdGVzX2Vsc2VfYm9keUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM5NAogICAgLy8gc3RhdGVzLmFwcGVuZChiZW5jaF9zdGF0ZS5nZXRfZW1wdHlfc3RhdGUoKSkKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgc3dhcAogICAgZXh0cmFjdCAyIDAKICAgIGludGNfMSAvLyAxCiAgICBieXRlYyAyMyAvLyAweDAwMDIKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50CiAgICBmcmFtZV9idXJ5IDEKICAgIGIgZ2V0X2JlbmNoX3N0YXRlc19hZnRlcl9pZl9lbHNlQDYKCmdldF9iZW5jaF9zdGF0ZXNfYWZ0ZXJfZm9yQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6Mzk1CiAgICAvLyByZXR1cm4gc3RhdGVzCiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMucmVnaXN0cnkuY29udHJhY3QuUmVnaXN0cnkubG9nX2JlbmNoX3N0YXRlcyhib3hfbmFtZXM6IGJ5dGVzKSAtPiB2b2lkOgpsb2dfYmVuY2hfc3RhdGVzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM5Ny0zOTgKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBsb2dfYmVuY2hfc3RhdGVzKHNlbGYsIGJveF9uYW1lczogYXJjNC5EeW5hbWljQXJyYXlbUmVnaXN0cnlLZXldKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjM5OQogICAgLy8gZm9yIGsgaW4gdXJhbmdlKGJveF9uYW1lcy5sZW5ndGgpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMCAvLyAwCgpsb2dfYmVuY2hfc3RhdGVzX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozOTkKICAgIC8vIGZvciBrIGluIHVyYW5nZShib3hfbmFtZXMubGVuZ3RoKToKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMQogICAgPAogICAgYnogbG9nX2JlbmNoX3N0YXRlc19hZnRlcl9mb3JAOAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQwMAogICAgLy8gaWYgYm94X25hbWVzW2tdIGluIHNlbGYucmVnaXN0cnk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgMgogICAgcHVzaGludCA0NCAvLyA0NAogICAgKgogICAgcHVzaGludCA0NCAvLyA0NAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBsb2dfYmVuY2hfc3RhdGVzX2Vsc2VfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDAxCiAgICAvLyBhcHBfaWQgPSBzZWxmLnJlZ2lzdHJ5W2JveF9uYW1lc1trXV0uYmVuY2hfYXBwX2lkLm5hdGl2ZQogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlZ2lzdHJ5IGVudHJ5IGV4aXN0cwogICAgZXh0cmFjdCAwIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDAyLTQwNQogICAgLy8gc3RhdGUsIGF0eG4gPSBhYmlfY2FsbCgKICAgIC8vICAgICBiZW5jaF9jb250cmFjdC5CZW5jaC5nZXRfc3RhdGUsCiAgICAvLyAgICAgYXBwX2lkPWFwcF9pZCwKICAgIC8vICkKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgYnl0ZWMgMTIgLy8gbWV0aG9kICJnZXRfc3RhdGUoKSh1aW50MzIsdWludDY0LGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCxhZGRyZXNzLHVpbnQ2NCx1aW50NjQsYnl0ZVtdLHVpbnQ4LGJ5dGVbXSx1aW50OCkiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18zIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQwNgogICAgLy8gbG9nKHN0YXRlLmJ5dGVzKQogICAgbG9nCgpsb2dfYmVuY2hfc3RhdGVzX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTozOTkKICAgIC8vIGZvciBrIGluIHVyYW5nZShib3hfbmFtZXMubGVuZ3RoKToKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAyCiAgICBiIGxvZ19iZW5jaF9zdGF0ZXNfZm9yX2hlYWRlckAxCgpsb2dfYmVuY2hfc3RhdGVzX2Vsc2VfYm9keUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2JlbmNoL3R5cGVzLnB5OjUyCiAgICAvLyByZXR1cm4gU3RhdGUuZnJvbV9ieXRlcyhiIiIpCiAgICBieXRlY18yIC8vIDB4CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDA4CiAgICAvLyBsb2coYmVuY2hfc3RhdGUuZ2V0X2VtcHR5X3N0YXRlKCkpCiAgICBsb2cKICAgIGIgbG9nX2JlbmNoX3N0YXRlc19hZnRlcl9pZl9lbHNlQDYKCmxvZ19iZW5jaF9zdGF0ZXNfYWZ0ZXJfZm9yQDg6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMucmVnaXN0cnkuY29udHJhY3QuUmVnaXN0cnkubG9nX2JlbmNoX3N0YXRlc193aXRoX21ldGEoYm94X25hbWVzOiBieXRlcykgLT4gdm9pZDoKbG9nX2JlbmNoX3N0YXRlc193aXRoX21ldGE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDEwLTQxMwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGxvZ19iZW5jaF9zdGF0ZXNfd2l0aF9tZXRhKAogICAgLy8gICAgIHNlbGYsIGJveF9uYW1lczogYXJjNC5EeW5hbWljQXJyYXlbUmVnaXN0cnlLZXldCiAgICAvLyApIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDE0CiAgICAvLyBmb3IgayBpbiB1cmFuZ2UoYm94X25hbWVzLmxlbmd0aCk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18wIC8vIDAKCmxvZ19iZW5jaF9zdGF0ZXNfd2l0aF9tZXRhX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0MTQKICAgIC8vIGZvciBrIGluIHVyYW5nZShib3hfbmFtZXMubGVuZ3RoKToKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMQogICAgPAogICAgYnogbG9nX2JlbmNoX3N0YXRlc193aXRoX21ldGFfYWZ0ZXJfZm9yQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0MTUKICAgIC8vIGlmIGJveF9uYW1lc1trXSBpbiBzZWxmLnJlZ2lzdHJ5OgogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDIKICAgIHB1c2hpbnQgNDQgLy8gNDQKICAgICoKICAgIHB1c2hpbnQgNDQgLy8gNDQKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogbG9nX2JlbmNoX3N0YXRlc193aXRoX21ldGFfZWxzZV9ib2R5QDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0MTYKICAgIC8vIHJlZ2lzdHJ5X3ZhbHVlID0gc2VsZi5yZWdpc3RyeVtib3hfbmFtZXNba11dLmNvcHkoKQogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlZ2lzdHJ5IGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQxNwogICAgLy8gYXBwX2lkID0gcmVnaXN0cnlfdmFsdWUuYmVuY2hfYXBwX2lkLm5hdGl2ZQogICAgZHVwCiAgICBleHRyYWN0IDAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0MTgKICAgIC8vIG1ldGEgPSByZWdpc3RyeV92YWx1ZS5tZXRhCiAgICBkaWcgMQogICAgcHVzaGludCA4IC8vIDgKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMgogICAgbGVuCiAgICB1bmNvdmVyIDMKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0MTktNDIzCiAgICAvLyBjYWxsZXJfcHVyY2hhc2VfYm94LCBhdHhuID0gYWJpX2NhbGwoCiAgICAvLyAgICAgYmVuY2hfY29udHJhY3QuQmVuY2guZ2V0X2FjY291bnRfYnV5X3RvdGFsLAogICAgLy8gICAgIFR4bi5zZW5kZXIsCiAgICAvLyAgICAgYXBwX2lkPWFwcF9pZCwKICAgIC8vICkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0MjEKICAgIC8vIFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDE5LTQyMwogICAgLy8gY2FsbGVyX3B1cmNoYXNlX2JveCwgYXR4biA9IGFiaV9jYWxsKAogICAgLy8gICAgIGJlbmNoX2NvbnRyYWN0LkJlbmNoLmdldF9hY2NvdW50X2J1eV90b3RhbCwKICAgIC8vICAgICBUeG4uc2VuZGVyLAogICAgLy8gICAgIGFwcF9pZD1hcHBfaWQsCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHhlMDlhZjA5MyAvLyBtZXRob2QgImdldF9hY2NvdW50X2J1eV90b3RhbChhZGRyZXNzKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18zIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBBUkM0IHByZWZpeCBpcyB2YWxpZAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQyNC00MjcKICAgIC8vIHN0YXRlLCBhdHhuID0gYWJpX2NhbGwoCiAgICAvLyAgICAgYmVuY2hfY29udHJhY3QuQmVuY2guZ2V0X3N0YXRlLAogICAgLy8gICAgIGFwcF9pZD1hcHBfaWQsCiAgICAvLyApCiAgICBpdHhuX2JlZ2luCiAgICBkaWcgMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBieXRlYyAxMiAvLyBtZXRob2QgImdldF9zdGF0ZSgpKHVpbnQzMix1aW50NjQsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LGFkZHJlc3MsdWludDY0LHVpbnQ2NCxieXRlW10sdWludDgsYnl0ZVtdLHVpbnQ4KSIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpbnRjXzMgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEFSQzQgcHJlZml4IGlzIHZhbGlkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDI5CiAgICAvLyBiZW5jaF9pZD1zdGF0ZS5iZW5jaF9pZCwKICAgIGR1cAogICAgZXh0cmFjdCAwIDQgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDMwCiAgICAvLyBhcHBfaWQ9YXJjNC5VSW50NjQoYXBwX2lkKSwKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQzMQogICAgLy8gb3duZXJfYWRkcj1zdGF0ZS5vd25lcl9hZGRyLAogICAgZGlnIDIKICAgIGV4dHJhY3QgMTIgMzIgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDMyCiAgICAvLyB0aW1lX3N0YXJ0PXN0YXRlLnRpbWVfc3RhcnQsCiAgICBkaWcgMwogICAgZXh0cmFjdCA0NCA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQzMwogICAgLy8gb3JpZ2luYWxfdGltZV9zdGFydD1zdGF0ZS5vcmlnaW5hbF90aW1lX3N0YXJ0LAogICAgZGlnIDQKICAgIGV4dHJhY3QgNTIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0MzQKICAgIC8vIHRpbWVfZW5kPXN0YXRlLnRpbWVfZW5kLAogICAgZGlnIDUKICAgIGV4dHJhY3QgNjAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0MzUKICAgIC8vIG9yaWdpbmFsX3RpbWVfZW5kPXN0YXRlLm9yaWdpbmFsX3RpbWVfZW5kLAogICAgZGlnIDYKICAgIGV4dHJhY3QgNjggOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0MzYKICAgIC8vIHNlbGxpbmdfYXNzZXQ9c3RhdGUuc2VsbGluZ19hc3NldCwKICAgIGRpZyA3CiAgICBleHRyYWN0IDc2IDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDM3CiAgICAvLyBzZWxsaW5nX2Ftb3VudD1zdGF0ZS5zZWxsaW5nX2Ftb3VudCwKICAgIGRpZyA4CiAgICBleHRyYWN0IDg0IDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDM4CiAgICAvLyByZW1haW5pbmdfYW1vdW50PXN0YXRlLnJlbWFpbmluZ19hbW91bnQsCiAgICBkaWcgOQogICAgZXh0cmFjdCA5MiA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQzOQogICAgLy8gcHVyY2hhc2VfYXNzZXQ9c3RhdGUucHVyY2hhc2VfYXNzZXQsCiAgICBkaWcgMTAKICAgIGV4dHJhY3QgMTAwIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDQwCiAgICAvLyBwdXJjaGFzZV9wcmljZV9wZXJfMTAwbT1zdGF0ZS5wdXJjaGFzZV9wcmljZV9wZXJfMTAwbSwKICAgIGRpZyAxMQogICAgZXh0cmFjdCAxMDggOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0NDEKICAgIC8vIHB1cmNoYXNlX2xpbWl0PXN0YXRlLnB1cmNoYXNlX2xpbWl0LAogICAgZGlnIDEyCiAgICBleHRyYWN0IDExNiA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ0MgogICAgLy8gZmVlX2Jwcz1zdGF0ZS5mZWVfYnBzLAogICAgZGlnIDEzCiAgICBleHRyYWN0IDEyNCA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ0MwogICAgLy8gZmVlX2FkZHI9c3RhdGUuZmVlX2FkZHIsCiAgICBkaWcgMTQKICAgIGV4dHJhY3QgMTMyIDMyIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ0NAogICAgLy8gZmVlc19hY2NydWVkPXN0YXRlLmZlZXNfYWNjcnVlZCwKICAgIGRpZyAxNQogICAgZXh0cmFjdCAxNjQgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0NDUKICAgIC8vIGNhbmNlbGxhYmxlPXN0YXRlLmNhbmNlbGxhYmxlLAogICAgZGlnIDE2CiAgICBleHRyYWN0IDE3MiA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ0OAogICAgLy8gc2VsbGluZ19hc3NldF91bml0X25hbWU9c3RhdGUuc2VsbGluZ19hc3NldF91bml0X25hbWUuY29weSgpLAogICAgZGlnIDE3CiAgICBwdXNoaW50IDE4MCAvLyAxODAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMTgKICAgIHB1c2hpbnQgMTgzIC8vIDE4MwogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAxOQogICAgdW5jb3ZlciAyCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ0NwogICAgLy8gc2VsbGluZ19hc3NldF9kZWNpbWFscz1zdGF0ZS5zZWxsaW5nX2Fzc2V0X2RlY2ltYWxzLAogICAgZGlnIDE5CiAgICBleHRyYWN0IDE4MiAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ1MAogICAgLy8gcHVyY2hhc2VfYXNzZXRfdW5pdF9uYW1lPXN0YXRlLnB1cmNoYXNlX2Fzc2V0X3VuaXRfbmFtZS5jb3B5KCksCiAgICBkaWcgMjAKICAgIGxlbgogICAgZGlnIDIxCiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ0OQogICAgLy8gcHVyY2hhc2VfYXNzZXRfZGVjaW1hbHM9c3RhdGUucHVyY2hhc2VfYXNzZXRfZGVjaW1hbHMsCiAgICB1bmNvdmVyIDIwCiAgICBleHRyYWN0IDE4NSAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ1MQogICAgLy8gY2FsbGVyPWFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0MjgtNDUzCiAgICAvLyBzdGF0ZV93aXRoX21ldGEgPSBiZW5jaF9zdGF0ZS5TdGF0ZVdpdGhNZXRhKAogICAgLy8gICAgIGJlbmNoX2lkPXN0YXRlLmJlbmNoX2lkLAogICAgLy8gICAgIGFwcF9pZD1hcmM0LlVJbnQ2NChhcHBfaWQpLAogICAgLy8gICAgIG93bmVyX2FkZHI9c3RhdGUub3duZXJfYWRkciwKICAgIC8vICAgICB0aW1lX3N0YXJ0PXN0YXRlLnRpbWVfc3RhcnQsCiAgICAvLyAgICAgb3JpZ2luYWxfdGltZV9zdGFydD1zdGF0ZS5vcmlnaW5hbF90aW1lX3N0YXJ0LAogICAgLy8gICAgIHRpbWVfZW5kPXN0YXRlLnRpbWVfZW5kLAogICAgLy8gICAgIG9yaWdpbmFsX3RpbWVfZW5kPXN0YXRlLm9yaWdpbmFsX3RpbWVfZW5kLAogICAgLy8gICAgIHNlbGxpbmdfYXNzZXQ9c3RhdGUuc2VsbGluZ19hc3NldCwKICAgIC8vICAgICBzZWxsaW5nX2Ftb3VudD1zdGF0ZS5zZWxsaW5nX2Ftb3VudCwKICAgIC8vICAgICByZW1haW5pbmdfYW1vdW50PXN0YXRlLnJlbWFpbmluZ19hbW91bnQsCiAgICAvLyAgICAgcHVyY2hhc2VfYXNzZXQ9c3RhdGUucHVyY2hhc2VfYXNzZXQsCiAgICAvLyAgICAgcHVyY2hhc2VfcHJpY2VfcGVyXzEwMG09c3RhdGUucHVyY2hhc2VfcHJpY2VfcGVyXzEwMG0sCiAgICAvLyAgICAgcHVyY2hhc2VfbGltaXQ9c3RhdGUucHVyY2hhc2VfbGltaXQsCiAgICAvLyAgICAgZmVlX2Jwcz1zdGF0ZS5mZWVfYnBzLAogICAgLy8gICAgIGZlZV9hZGRyPXN0YXRlLmZlZV9hZGRyLAogICAgLy8gICAgIGZlZXNfYWNjcnVlZD1zdGF0ZS5mZWVzX2FjY3J1ZWQsCiAgICAvLyAgICAgY2FuY2VsbGFibGU9c3RhdGUuY2FuY2VsbGFibGUsCiAgICAvLyAgICAgbWV0YT1tZXRhLAogICAgLy8gICAgIHNlbGxpbmdfYXNzZXRfZGVjaW1hbHM9c3RhdGUuc2VsbGluZ19hc3NldF9kZWNpbWFscywKICAgIC8vICAgICBzZWxsaW5nX2Fzc2V0X3VuaXRfbmFtZT1zdGF0ZS5zZWxsaW5nX2Fzc2V0X3VuaXRfbmFtZS5jb3B5KCksCiAgICAvLyAgICAgcHVyY2hhc2VfYXNzZXRfZGVjaW1hbHM9c3RhdGUucHVyY2hhc2VfYXNzZXRfZGVjaW1hbHMsCiAgICAvLyAgICAgcHVyY2hhc2VfYXNzZXRfdW5pdF9uYW1lPXN0YXRlLnB1cmNoYXNlX2Fzc2V0X3VuaXRfbmFtZS5jb3B5KCksCiAgICAvLyAgICAgY2FsbGVyPWFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwKICAgIC8vICAgICBjYWxsZXJfcHVyY2hhc2VfYm94PWNhbGxlcl9wdXJjaGFzZV9ib3gsCiAgICAvLyApCiAgICB1bmNvdmVyIDIxCiAgICB1bmNvdmVyIDIxCiAgICBjb25jYXQKICAgIHVuY292ZXIgMjAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxOQogICAgY29uY2F0CiAgICB1bmNvdmVyIDE4CiAgICBjb25jYXQKICAgIHVuY292ZXIgMTcKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxNgogICAgY29uY2F0CiAgICB1bmNvdmVyIDE1CiAgICBjb25jYXQKICAgIHVuY292ZXIgMTQKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDEyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMTEKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxMAogICAgY29uY2F0CiAgICB1bmNvdmVyIDkKICAgIGNvbmNhdAogICAgdW5jb3ZlciA4CiAgICBjb25jYXQKICAgIHVuY292ZXIgNwogICAgY29uY2F0CiAgICB1bmNvdmVyIDYKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MDBlNAogICAgY29uY2F0CiAgICBkaWcgNQogICAgbGVuCiAgICBwdXNoaW50IDIyOCAvLyAyMjgKICAgICsKICAgIHN3YXAKICAgIHVuY292ZXIgNQogICAgY29uY2F0CiAgICBkaWcgMQogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgZGlnIDQKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICArCiAgICBzd2FwCiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0NTQKICAgIC8vIGxvZyhzdGF0ZV93aXRoX21ldGEuYnl0ZXMpCiAgICBsb2cKCmxvZ19iZW5jaF9zdGF0ZXNfd2l0aF9tZXRhX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0MTQKICAgIC8vIGZvciBrIGluIHVyYW5nZShib3hfbmFtZXMubGVuZ3RoKToKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAyCiAgICBiIGxvZ19iZW5jaF9zdGF0ZXNfd2l0aF9tZXRhX2Zvcl9oZWFkZXJAMQoKbG9nX2JlbmNoX3N0YXRlc193aXRoX21ldGFfZWxzZV9ib2R5QDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmVuY2gvdHlwZXMucHk6ODQKICAgIC8vIHJldHVybiBTdGF0ZVdpdGhNZXRhLmZyb21fYnl0ZXMoYiIiKQogICAgYnl0ZWNfMiAvLyAweAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ1NgogICAgLy8gbG9nKGJlbmNoX3N0YXRlLmdldF9lbXB0eV9zdGF0ZV93aXRoX21ldGEoKSkKICAgIGxvZwogICAgYiBsb2dfYmVuY2hfc3RhdGVzX3dpdGhfbWV0YV9hZnRlcl9pZl9lbHNlQDcKCmxvZ19iZW5jaF9zdGF0ZXNfd2l0aF9tZXRhX2FmdGVyX2ZvckA5OgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnJlZ2lzdHJ5LmNvbnRyYWN0LlJlZ2lzdHJ5LmxvZ19iZW5jaF9tZXRhKGJveF9uYW1lczogYnl0ZXMpIC0+IHZvaWQ6CmxvZ19iZW5jaF9tZXRhOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ1OC00NTkKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBsb2dfYmVuY2hfbWV0YShzZWxmLCBib3hfbmFtZXM6IGFyYzQuRHluYW1pY0FycmF5W1JlZ2lzdHJ5S2V5XSkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0NjAKICAgIC8vIGZvciBrIGluIHVyYW5nZShib3hfbmFtZXMubGVuZ3RoKToKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMAoKbG9nX2JlbmNoX21ldGFfZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ2MAogICAgLy8gZm9yIGsgaW4gdXJhbmdlKGJveF9uYW1lcy5sZW5ndGgpOgogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAxCiAgICA8CiAgICBieiBsb2dfYmVuY2hfbWV0YV9hZnRlcl9mb3JANwogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ2MQogICAgLy8gaWYgYm94X25hbWVzW2tdIGluIHNlbGYucmVnaXN0cnk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgMgogICAgcHVzaGludCA0NCAvLyA0NAogICAgKgogICAgcHVzaGludCA0NCAvLyA0NAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBsb2dfYmVuY2hfbWV0YV9lbHNlX2JvZHlANAogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ2MgogICAgLy8gbWV0YSA9IHNlbGYucmVnaXN0cnlbYm94X25hbWVzW2tdXS5tZXRhLm5hdGl2ZQogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlZ2lzdHJ5IGVudHJ5IGV4aXN0cwogICAgZHVwCiAgICBwdXNoaW50IDggLy8gOAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAxCiAgICBsZW4KICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6NDYzCiAgICAvLyBsb2cobWV0YSkKICAgIGxvZwoKbG9nX2JlbmNoX21ldGFfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3JlZ2lzdHJ5L2NvbnRyYWN0LnB5OjQ2MAogICAgLy8gZm9yIGsgaW4gdXJhbmdlKGJveF9uYW1lcy5sZW5ndGgpOgogICAgZnJhbWVfZGlnIDIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDIKICAgIGIgbG9nX2JlbmNoX21ldGFfZm9yX2hlYWRlckAxCgpsb2dfYmVuY2hfbWV0YV9lbHNlX2JvZHlANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo0NjUKICAgIC8vIGxvZygiIikKICAgIGJ5dGVjXzIgLy8gIiIKICAgIGxvZwogICAgYiBsb2dfYmVuY2hfbWV0YV9hZnRlcl9pZl9lbHNlQDUKCmxvZ19iZW5jaF9tZXRhX2FmdGVyX2ZvckA3OgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnJlZ2lzdHJ5LmNvbnRyYWN0LlJlZ2lzdHJ5LnVwZGF0ZSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo3OS04MAogICAgLy8gQGFyYzQuYmFyZW1ldGhvZChhbGxvd19hY3Rpb25zPSgiVXBkYXRlQXBwbGljYXRpb24iLCkpCiAgICAvLyBkZWYgdXBkYXRlKHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9yZWdpc3RyeS9jb250cmFjdC5weTo4MQogICAgLy8gc2VsZi52YWxpZGF0ZV9hZG1pbl9jYWxsZXIoKQogICAgY2FsbHN1YiB2YWxpZGF0ZV9hZG1pbl9jYWxsZXIKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5yZWdpc3RyeS5jb250cmFjdC5SZWdpc3RyeS5kZWxldGUoKSAtPiB2b2lkOgpkZWxldGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6ODMtODQKICAgIC8vIEBhcmM0LmJhcmVtZXRob2QoYWxsb3dfYWN0aW9ucz0oIkRlbGV0ZUFwcGxpY2F0aW9uIiwpKQogICAgLy8gZGVmIGRlbGV0ZShzZWxmKSAtPiBOb25lOgogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcmVnaXN0cnkvY29udHJhY3QucHk6ODUKICAgIC8vIHNlbGYudmFsaWRhdGVfYWRtaW5fY2FsbGVyKCkKICAgIGNhbGxzdWIgdmFsaWRhdGVfYWRtaW5fY2FsbGVyCiAgICByZXRzdWIKCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQoYXJyYXlfaXRlbXNfY291bnQ6IHVpbnQ2NCwgYXJyYXlfaGVhZF9hbmRfdGFpbDogYnl0ZXMsIG5ld19pdGVtc19jb3VudDogdWludDY0LCBuZXdfaGVhZF9hbmRfdGFpbDogYnl0ZXMpIC0+IGJ5dGVzOgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQ6CiAgICBwcm90byA0IDEKICAgIGJ5dGVjXzIgLy8gIiIKICAgIGR1cAogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZnJhbWVfZGlnIC00CiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgaW50Y18wIC8vIDAKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDE6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDMKICAgIDwKICAgIGJ6IGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JANAogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgNAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIDIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDEKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBmcmFtZV9idXJ5IDQKICAgIGIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJAMQoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2FmdGVyX2ZvckA0OgogICAgZnJhbWVfZGlnIC0zCiAgICBsZW4KICAgIGZyYW1lX2J1cnkgMAogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgNAoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJANToKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2FmdGVyX2ZvckA4CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgMAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAxCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMQogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGZyYW1lX2J1cnkgNAogICAgYiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfZm9yX2hlYWRlckA1CgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfZm9yQDg6CiAgICBmcmFtZV9kaWcgLTQKICAgIGZyYW1lX2RpZyAtMgogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAwCiAgICBzdWJzdHJpbmczCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAyCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIK",
        "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K"
    },
    "state": {
        "global": {
            "num_byte_slices": 16,
            "num_uints": 48
        },
        "local": {
            "num_byte_slices": 0,
            "num_uints": 0
        }
    },
    "schema": {
        "global": {
            "declared": {
                "abel_app_id": {
                    "type": "uint64",
                    "key": "abel_app_id"
                },
                "admin_addr": {
                    "type": "bytes",
                    "key": "admin_addr"
                },
                "allowlist_labels": {
                    "type": "bytes",
                    "key": "allowlist_labels"
                },
                "banlist_labels": {
                    "type": "bytes",
                    "key": "banlist_labels"
                },
                "default_fee_bps": {
                    "type": "uint64",
                    "key": "default_fee_bps"
                },
                "fee_addr": {
                    "type": "bytes",
                    "key": "fee_addr"
                },
                "id_counter": {
                    "type": "uint64",
                    "key": "id_counter"
                },
                "setup_fee": {
                    "type": "uint64",
                    "key": "setup_fee"
                }
            },
            "reserved": {}
        },
        "local": {
            "declared": {},
            "reserved": {}
        }
    },
    "contract": {
        "name": "Registry",
        "methods": [
            {
                "name": "change_admin_1",
                "args": [
                    {
                        "type": "account",
                        "name": "new_admin"
                    }
                ],
                "readonly": false,
                "returns": {
                    "type": "void"
                }
            },
            {
                "name": "change_admin_2",
                "args": [],
                "readonly": false,
                "returns": {
                    "type": "void"
                }
            },
            {
                "name": "change_fee_addr",
                "args": [
                    {
                        "type": "account",
                        "name": "new_fee_addr"
                    }
                ],
                "readonly": false,
                "returns": {
                    "type": "void"
                }
            },
            {
                "name": "change_default_fee_bps",
                "args": [
                    {
                        "type": "uint64",
                        "name": "new_default_fee_bps"
                    }
                ],
                "readonly": false,
                "returns": {
                    "type": "void"
                }
            },
            {
                "name": "change_setup_fee",
                "args": [
                    {
                        "type": "uint64",
                        "name": "new_setup_fee"
                    }
                ],
                "readonly": false,
                "returns": {
                    "type": "void"
                }
            },
            {
                "name": "change_abel_app_id",
                "args": [
                    {
                        "type": "uint64",
                        "name": "new_abel_app_id"
                    }
                ],
                "readonly": false,
                "returns": {
                    "type": "void"
                }
            },
            {
                "name": "change_allowlist_labels",
                "args": [
                    {
                        "type": "string[]",
                        "name": "new_allowlist_labels"
                    }
                ],
                "readonly": false,
                "returns": {
                    "type": "void"
                }
            },
            {
                "name": "change_banlist_labels",
                "args": [
                    {
                        "type": "string[]",
                        "name": "new_banlist_labels"
                    }
                ],
                "readonly": false,
                "returns": {
                    "type": "void"
                }
            },
            {
                "name": "optin",
                "args": [
                    {
                        "type": "asset",
                        "name": "asset"
                    }
                ],
                "readonly": false,
                "returns": {
                    "type": "void"
                }
            },
            {
                "name": "create",
                "args": [
                    {
                        "type": "account",
                        "name": "owner_addr"
                    },
                    {
                        "type": "uint64",
                        "name": "time_start"
                    },
                    {
                        "type": "uint64",
                        "name": "time_end"
                    },
                    {
                        "type": "asset",
                        "name": "selling_asset"
                    },
                    {
                        "type": "uint64",
                        "name": "selling_amount"
                    },
                    {
                        "type": "asset",
                        "name": "purchase_asset"
                    },
                    {
                        "type": "uint64",
                        "name": "purchase_price_per_100m"
                    },
                    {
                        "type": "uint64",
                        "name": "purchase_limit"
                    },
                    {
                        "type": "uint64",
                        "name": "cancellable"
                    },
                    {
                        "type": "string",
                        "name": "meta"
                    }
                ],
                "readonly": false,
                "returns": {
                    "type": "(uint64,uint64)"
                }
            },
            {
                "name": "set_id_counter",
                "args": [
                    {
                        "type": "uint64",
                        "name": "new_id_counter"
                    }
                ],
                "readonly": false,
                "returns": {
                    "type": "void"
                }
            },
            {
                "name": "get_meta",
                "args": [
                    {
                        "type": "(uint32,uint32,uint32,uint64,uint64,uint64,uint64)",
                        "name": "registry_key"
                    }
                ],
                "readonly": false,
                "returns": {
                    "type": "string"
                }
            },
            {
                "name": "set_meta",
                "args": [
                    {
                        "type": "(uint32,uint32,uint32,uint64,uint64,uint64,uint64)",
                        "name": "registry_key"
                    },
                    {
                        "type": "string",
                        "name": "meta"
                    }
                ],
                "readonly": false,
                "returns": {
                    "type": "void"
                }
            },
            {
                "name": "cleanup",
                "args": [
                    {
                        "type": "account",
                        "name": "owner"
                    },
                    {
                        "type": "uint32",
                        "name": "id"
                    },
                    {
                        "type": "uint32",
                        "name": "time_start"
                    },
                    {
                        "type": "uint32",
                        "name": "time_end"
                    },
                    {
                        "type": "asset",
                        "name": "selling_asset"
                    },
                    {
                        "type": "uint64",
                        "name": "selling_amount"
                    },
                    {
                        "type": "asset",
                        "name": "purchase_asset"
                    },
                    {
                        "type": "uint64",
                        "name": "purchase_price_per_100m"
                    }
                ],
                "readonly": false,
                "returns": {
                    "type": "void"
                }
            },
            {
                "name": "get_registry_key",
                "args": [
                    {
                        "type": "uint32",
                        "name": "id"
                    },
                    {
                        "type": "uint64",
                        "name": "purchase_asset_id"
                    },
                    {
                        "type": "uint64",
                        "name": "purchase_price_per_100m"
                    },
                    {
                        "type": "uint64",
                        "name": "selling_asset_id"
                    },
                    {
                        "type": "uint64",
                        "name": "selling_amount"
                    },
                    {
                        "type": "uint32",
                        "name": "time_start"
                    },
                    {
                        "type": "uint32",
                        "name": "time_end"
                    }
                ],
                "readonly": false,
                "returns": {
                    "type": "(uint32,uint32,uint32,uint64,uint64,uint64,uint64)"
                }
            },
            {
                "name": "get_app_ids",
                "args": [
                    {
                        "type": "(uint32,uint32,uint32,uint64,uint64,uint64,uint64)[]",
                        "name": "box_names"
                    }
                ],
                "readonly": true,
                "returns": {
                    "type": "uint64[]"
                }
            },
            {
                "name": "get_bench_states",
                "args": [
                    {
                        "type": "(uint32,uint32,uint32,uint64,uint64,uint64,uint64)[]",
                        "name": "box_names"
                    }
                ],
                "readonly": true,
                "returns": {
                    "type": "(uint32,uint64,address,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,address,uint64,uint64,byte[],uint8,byte[],uint8)[]"
                }
            },
            {
                "name": "log_bench_states",
                "args": [
                    {
                        "type": "(uint32,uint32,uint32,uint64,uint64,uint64,uint64)[]",
                        "name": "box_names"
                    }
                ],
                "readonly": true,
                "returns": {
                    "type": "void"
                }
            },
            {
                "name": "log_bench_states_with_meta",
                "args": [
                    {
                        "type": "(uint32,uint32,uint32,uint64,uint64,uint64,uint64)[]",
                        "name": "box_names"
                    }
                ],
                "readonly": true,
                "returns": {
                    "type": "void"
                }
            },
            {
                "name": "log_bench_meta",
                "args": [
                    {
                        "type": "(uint32,uint32,uint32,uint64,uint64,uint64,uint64)[]",
                        "name": "box_names"
                    }
                ],
                "readonly": true,
                "returns": {
                    "type": "void"
                }
            },
            {
                "name": "noop",
                "args": [],
                "readonly": false,
                "returns": {
                    "type": "void"
                }
            }
        ],
        "networks": {}
    },
    "bare_call_config": {
        "update_application": "CALL",
        "delete_application": "CALL",
        "no_op": "CREATE"
    }
}